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