17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*
27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License.
67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at
77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and
147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License.
157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file    M4MP4W_Types.h
207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Definition of types for the core MP4 writer
217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef M4MP4W_TYPES_H
257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4MP4W_TYPES_H
267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef __cplusplus
287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern "C" {
297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* __cplusplus */
307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "NXPSW_CompilerSwitches.h"
327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef _M4MP4W_USE_CST_MEMORY_WRITER
347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* includes */
367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Types.h"
377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_FileWriter.h"
387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_FileReader.h"
397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4SYS_Stream.h"
407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure    M4MP4C_FtypBox
447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief       Information to build the 'ftyp' atom
457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4MPAC_FTYP_TAG 0x66747970 /* 'ftyp' */
487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4MPAC_MAX_COMPATIBLE_BRANDS 10
497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct
507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* All brand fields are actually char[4] stored in big-endian integer format */
527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32    major_brand;         /* generally '3gp4'            */
547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32    minor_version;       /* generally '0000' or 'x.x '  */
557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32    nbCompatibleBrands;  /* number of compatible brands */
567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32    compatible_brands[M4MPAC_MAX_COMPATIBLE_BRANDS];   /* array of max compatible
577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                                       brands */
587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4MP4C_FtypBox;
597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure    M4MP4W_memAddr
647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief        Buffer structure for the MP4 writer
657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct
687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32        size;
707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_MemAddr32    addr;
717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4MP4W_memAddr;
727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Time type for the core MP4 writer
767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef M4OSA_UInt32 M4MP4W_Time32;
797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * enumeration   M4MP4W_State
837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief        This enum defines the core MP4 writer states
847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note         These states are used internaly, but can be retrieved from outside
857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *               the writer.
867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef enum
897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_opened            = 0x100,
917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_ready             = 0x200,
927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_writing           = 0x300,
937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_writing_startAU   = 0x301,
947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_closed            = 0x400
957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4MP4W_State;
967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * enumeration    M4MP4W_OptionID
1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief        This enum defines the core MP4 writer options
1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note        These options give parameters for the core MP4 writer
1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef enum
1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_maxAUperChunk        = 0xC101,
1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_maxChunkSize         = 0xC102,
1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_maxChunkInter        = 0xC103,
1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_preWriteCallBack     = 0xC104,
1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_postWriteCallBack    = 0xC105,
1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_maxAUsize            = 0xC106,
1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_IOD                  = 0xC111,
1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_ESD                  = 0xC112,
1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_SDP                  = 0xC113,
1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_trackSize            = 0xC114,
1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_MOOVfirst            = 0xC121,
1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_V2_MOOF              = 0xC131,
1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_V2_tblCompres        = 0xC132,
1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*warning: unspecified options:*/
1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_maxFileSize          = 0xC152,
1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_CamcoderVersion      = 0xC153, /*000 to 999 !*/
1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_estimateAudioSize    = 0xC154, /*audio AUs are processed after the video, */
1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*this option MUST NOT be set if non constant audio
1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    frame size (e.g. if SID)*/
1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_embeddedString       = 0xC155,
1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_integrationTag       = 0xC156,
1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_maxFileDuration      = 0xC157,
1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_setFtypBox           = 0xC158,
1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_DSI                  = 0xC159,
1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* H.264 trimming */
1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_MUL_PPS_SPS          = 0xC160,
1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* H.264 trimming */
1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4MP4W_OptionID;
1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Audio & video stream IDs
1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define AudioStreamID 1
1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define VideoStreamID 2
1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Default parameters values, that can be modified by M4MP4W_setOption
1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4MP4W_DefaultWidth 320
1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4MP4W_DefaultHeight 240
1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4MP4W_DefaultMaxAuSize  4096 /*bytes*/
1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4MP4W_DefaultMaxChunkSize 100000 /*bytes*/
1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4MP4W_DefaultInterleaveDur 0 /*bytes*/
1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure    M4MP4W_StreamIDsize
1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief        Video plane size
1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct
1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_StreamID streamID;
1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt16    height;
1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt16    width;
1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4MP4W_StreamIDsize;
1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure    M4MP4W_TrackData
1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief       Internal core MP4 writer track structure
1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct
1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_StreamType    trackType;
1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32        timescale;          /* T (video=1000), (AMR8=8000), (AMR16=16000)*/
1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32        sampleSize;         /* S (video=0)*/
1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32        sttsTableEntryNb;   /* J (audio=1)*/
1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_Time32        lastCTS;           /* CTS of the previous AU,
1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                               init to 0.Gives duration at the end.*/
1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32        sampleNb;           /* K (audio=F)*/
1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4MP4W_TrackData;
1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure    M4MP4W_AudioTrackData
1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief       Internal core MP4 writer audio specific structure
1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct
1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_State            microState;
1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_TrackData        CommonData;
1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UChar**           Chunk;
1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32*           chunkSizeTable;
1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef _M4MP4W_MOOV_FIRST
1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32*           chunkOffsetTable;
1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*_M4MP4W_MOOV_FIRST*/
2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32*           chunkSampleNbTable;
2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32*           chunkTimeMsTable;
2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            currentChunk;       /* Init to 0*/
2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            currentPos;         /* Init to 0 */
2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef _M4MP4W_OPTIMIZE_FOR_PHONE
2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            currentStsc;        /* Init to 0 */
2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif
2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_Time32           sampleDuration;     /* Check (AMR8=160), (AMR16=320)*/
2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            MaxChunkSize;       /* Init to M4MP4W_Mp4FileData.MaxChunkSize*/
2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            MaxAUSize;          /* Init to M4MP4W_Mp4FileData.MaxAUSize*/
2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            LastAllocatedChunk;
2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* previously, audio au size was supposed constant,
2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * which is actually not the case if silences (sid).*/
2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* at first audio au, sampleSize is set. It is later reset to 0 if non constant size.*/
2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* So sampleSize should be tested to know weither or not there is a TABLE_STSZ. */
2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32*           TABLE_STSZ; /* table size is 4K*/
2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            nbOfAllocatedStszBlocks;
2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32*           TABLE_STTS;
2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            nbOfAllocatedSttsBlocks;
2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            maxBitrate;     /*not used in amr case*/
2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            avgBitrate;     /*not used in amr case*/
2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UChar*            DSI;            /* Decoder Specific Info: May be M4OSA_NULL
2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                            (defaulted) for AMR */
2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8             dsiSize;        /* DSI size, always 9 bytes for AMR */
2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4MP4W_AudioTrackData;
2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure    M4MP4W_VideoTrackData
2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief        Internal core MP4 writer video specific structure
2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct
2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_State            microState;
2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_TrackData        CommonData;
2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UChar**           Chunk;
2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32*           chunkSizeTable;
2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef _M4MP4W_MOOV_FIRST
2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32*           chunkOffsetTable;
2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*_M4MP4W_MOOV_FIRST*/
2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32*           chunkSampleNbTable;
2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_Time32*          chunkTimeMsTable;
2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            currentChunk;            /* Init to 0*/
2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            currentPos ;             /* Init to 0*/
2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef _M4MP4W_OPTIMIZE_FOR_PHONE
2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            currentStsc;             /* Init to 0*/
2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif
2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            stssTableEntryNb ;       /* N*/
2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt16            width;                   /* X*/
2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt16            height;                  /* Y*/
2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32*           TABLE_STTS;              /* table size is J*/
2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            nbOfAllocatedSttsBlocks;
2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef _M4MP4W_OPTIMIZE_FOR_PHONE
2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt16*           TABLE_STSZ;              /* table size is 2K*/
2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else
2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32*           TABLE_STSZ;              /* table size is 4K*/
2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif
2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            nbOfAllocatedStszBlocks;
2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32*           TABLE_STSS;              /* table size is N*/
2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            nbOfAllocatedStssBlocks;
2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef _M4MP4W_OPTIMIZE_FOR_PHONE
2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            MaxAUperChunk;           /*Init to 0, i.e. not used*/
2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif
2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            MaxChunkSize;            /*Init to M4MP4W_Mp4FileData.MaxChunkSize*/
2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            MaxAUSize;               /*Init to M4MP4W_Mp4FileData.MaxAUSize*/
2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            LastAllocatedChunk;
2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            maxBitrate;
2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            avgBitrate;
2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UChar*            DSI;            /* Decoder Specific Info: May be M4OSA_NULL
2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                            (defaulted) for H263*/
2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8             dsiSize;        /* DSI size, always 7 bytes for H263 */
2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4MP4W_VideoTrackData;
2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure    M4MP4W_Mp4FileData
2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief       Internal core MP4 writer private context structure
2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct
2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_State                  state;
2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Char*                   url;
2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32                  duration;    /* D in ms, max duration of audio&video*/
2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32                  filesize;    /* actual filesize in bytes*/
2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_AudioTrackData*        audioTrackPtr;
2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Bool                    hasAudio;
2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_VideoTrackData*        videoTrackPtr;
2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Bool                    hasVideo;
2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32                  MaxChunkSize;       /* Init to 100000*/
2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32                  MaxAUSize;          /* Init to 4096*/
2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32                  MaxFileSize;        /* Init to 0, i.e. not used*/
2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_Time32                 InterleaveDur;      /* Init to 0, i.e. not used, ms*/
2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* M4MP4W_WriteCallBack            PreWriteCallBack;*/    /*Init to M4OSA_NULL*/
2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* M4MP4W_WriteCallBack            PostWriteCallBack;*/ /*Init to M4OSA_NULL*/
2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_FileWriterPointer*      fileWriterFunctions;
2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_FileReadPointer*        fileReaderFunctions;
2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32                  camcoderVersion;
3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Bool                    estimateAudioSize;  /* default is false*/
3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32                  audioMsChunkDur;    /* in ms, set only if estimateAudioSize
3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                         is true*/
3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32                  audioMsStopTime;    /* time to stop audio, set only if
3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                         estimateAudioSize is true*/
3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Context                 fileWriterContext;
3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef _M4MP4W_MOOV_FIRST
3077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32                  absoluteCurrentPos; /* new field for offset update*/
3087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*_M4MP4W_MOOV_FIRST*/
3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UChar*                  embeddedString;     /* 16 bytes string, default value
3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                         writen if NULL*/
3117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UChar*                  integrationTag;     /* 60 bytes string, memset to 0 if NULL */
3127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32                  MaxFileDuration;    /* Init to 0, i.e. not used*/
3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4C_FtypBox                ftyp;               /* ftyp atom, if not defined set major_brand
3147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                            = 0, will use default box */
3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef _M4MP4W_RESERVED_MOOV_DISK_SPACE
3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Char*                    safetyFileUrl;
3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Bool                        cleanSafetyFile;
3187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* _M4MP4W_RESERVED_MOOV_DISK_SPACE */
3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Bool                               bMULPPSSPS;
3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4MP4W_Mp4FileData;
3217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* _M4MP4W_USE_CST_MEMORY_WRITER */
3237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef __cplusplus
3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* __cplusplus */
3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*M4MP4W_TYPES_H*/
3297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
330