10c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* 20c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 325d6699c194a9719997c79dfb95bd66673825b7bSantosh Madhava * 40c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 50c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * you may not use this file except in compliance with the License. 60c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * You may obtain a copy of the License at 70c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 80c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 90c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * See the License for the specific language governing permissions and 140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * limitations under the License. 150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************* 180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @file VideoEditor3gpReader.cpp 190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @brief StageFright shell 3GP Reader 200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************* 210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define LOG_NDEBUG 1 240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define LOG_TAG "VIDEOEDITOR_3GPREADER" 250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * HEADERS 280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define VIDEOEDITOR_BITSTREAM_PARSER 310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_Debug.h" 330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "VideoEditor3gpReader.h" 340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4SYS_AccessUnit.h" 350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "VideoEditorUtils.h" 360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4READER_3gpCom.h" 370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4_Common.h" 380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_FileWriter.h" 390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef VIDEOEDITOR_BITSTREAM_PARSER 410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_CoreID.h" 420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_Error.h" 430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_Memory.h" 440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4_Utils.h" 450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif 460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "ESDS.h" 480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "utils/Log.h" 490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include <media/stagefright/MediaBufferGroup.h> 500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include <media/stagefright/DataSource.h> 510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include <media/stagefright/FileSource.h> 520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include <media/stagefright/MediaBuffer.h> 530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include <media/stagefright/MediaDefs.h> 540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include <media/stagefright/MediaExtractor.h> 550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include <media/stagefright/MediaDebug.h> 560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include <media/stagefright/MediaSource.h> 570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include <media/stagefright/MetaData.h> 580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * SOURCE CLASS 610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundarginamespace android { 630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * ENGINE INTERFACE 650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ************************************************************************ 690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Array of AMR NB/WB bitrates 700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note Array to match the mode and the bit rate 710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ************************************************************************ 720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargiconst M4OSA_UInt32 VideoEditor3gpReader_AmrBitRate [2 /* 8kHz / 16kHz */] 740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi [9 /* the bitrate mode */] = 750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi {4750, 5150, 5900, 6700, 7400, 7950, 10200, 12200, 0}, 770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi {6600, 8850, 12650, 14250, 15850, 18250, 19850, 23050, 23850} 780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}; 790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************* 820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * structure VideoEditor3gpReader_Context 830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief:This structure defines the context of the StageFright 3GP shell Reader 840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************* 850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargitypedef struct { 870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sp<DataSource> mDataSource; 880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sp<MediaExtractor> mExtractor; 890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sp<MediaSource> mAudioSource; 900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sp<MediaSource> mVideoSource; 910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_StreamHandler* mAudioStreamHandler; 920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_StreamHandler* mVideoStreamHandler; 930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_AccessUnit mAudioAu; 940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_AccessUnit mVideoAu; 950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Time mMaxDuration; 96413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury int64_t mFileSize; 970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_StreamType mStreamType; 980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 mStreamId; 990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi int32_t mTracks; 1000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi int32_t mCurrTrack; 1010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Bool mAudioSeeking; 1020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Time mAudioSeekTime; 1030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Bool mVideoSeeking; 1040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Time mVideoSeekTime; 1050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} VideoEditor3gpReader_Context; 1070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef VIDEOEDITOR_BITSTREAM_PARSER 1090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 1100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ************************************************************************ 1110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * structure VideoEditor3gpReader_BitStreamParserContext 1120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Internal BitStreamParser context 1130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ************************************************************************ 1140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 1150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargitypedef struct { 1160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32* mPbitStream; /**< bitstream pointer (32bits aligned) */ 1170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 mSize; /**< bitstream size in bytes */ 1180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 mIndex; /**< byte index */ 1190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 mBitIndex; /**< bit index */ 1200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 mStructSize; /**< size of structure */ 1210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} VideoEditor3gpReader_BitStreamParserContext; 1220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 1240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************* 1250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Allocates the context and initializes internal data. 1260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (OUT) Pointer to the BitStreamParser context to create. 1270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param bitStream A pointer to the bitstream 1280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param size The size of the bitstream in bytes 1290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************* 1300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 1310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic void VideoEditor3gpReader_BitStreamParserInit(void** pContext, 1320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi void* pBitStream, M4OSA_Int32 size) { 1330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext; 1340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pContext=M4OSA_NULL; 1362ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu pStreamContext = (VideoEditor3gpReader_BitStreamParserContext*)M4OSA_32bitAlignedMalloc( 1370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeof(VideoEditor3gpReader_BitStreamParserContext), M4READER_3GP, 1380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char*)"3GP BitStreamParser Context"); 1390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pStreamContext) { 1400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return; 1410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 1420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mPbitStream=(M4OSA_UInt32*)pBitStream; 1430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mSize=size; 1440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mIndex=0; 1450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mBitIndex=0; 1460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mStructSize = 1470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeof(VideoEditor3gpReader_BitStreamParserContext); 1480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pContext=pStreamContext; 1500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 1510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 1520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ********************************************************************** 1530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Clean up context 1540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN/OUT) BitStreamParser context. 1550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ********************************************************************** 1560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 1570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic void VideoEditor3gpReader_BitStreamParserCleanUp(void* pContext) { 1582ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free((M4OSA_Int32*)pContext); 1590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 1600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 1610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ***************************************************************************** 1620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Read the next <length> bits in the bitstream. 1630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note The function does not update the bitstream pointer. 1640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN/OUT) BitStreamParser context. 1650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param length (IN) The number of bits to extract from the bitstream 1660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return the read bits 1670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ***************************************************************************** 1680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 1690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_UInt32 VideoEditor3gpReader_BitStreamParserShowBits(void* pContext, 1700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 length) { 1710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext = 1720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (VideoEditor3gpReader_BitStreamParserContext*)pContext; 1730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 u_mask; 1750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 retval; 1760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 i_ovf; 1770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL==pStreamContext), 0, 1790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_BitStreamParserShowBits:invalid context pointer"); 1800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi retval=(M4OSA_UInt32)GET_MEMORY32(pStreamContext->\ 1820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mPbitStream[ pStreamContext->mIndex ]); 1830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi i_ovf = pStreamContext->mBitIndex + length - 32; 1840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi u_mask = (length >= 32) ? 0xffffffff: (1 << length) - 1; 1850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* do we have enough bits availble in the current word(32bits)*/ 1870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (i_ovf <= 0) { 1880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi retval=(retval >> (- i_ovf)) & u_mask; 1890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 1900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 u_nextword = (M4OSA_UInt32)GET_MEMORY32( 1910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mPbitStream[ pStreamContext->mIndex + 1 ]); 1920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 u_msb_mask, u_msb_value, u_lsb_mask, u_lsb_value; 1930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi u_msb_mask = ((1 << (32 - pStreamContext->mBitIndex)) - 1) << i_ovf; 1950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi u_msb_value = retval << i_ovf; 1960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi u_lsb_mask = (1 << i_ovf) - 1; 1970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi u_lsb_value = u_nextword >> (32 - i_ovf); 1980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi retval= (u_msb_value & u_msb_mask ) | (u_lsb_value & u_lsb_mask); 1990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* return the bits...*/ 2010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return retval; 2020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 2030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 2040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ************************************************************************ 2050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Increment the bitstream pointer of <length> bits. 2060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN/OUT) BitStreamParser context. 2070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param length (IN) The number of bit to shift the bitstream 2080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ************************************************************************ 2090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 2100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic void VideoEditor3gpReader_BitStreamParserFlushBits(void* pContext, 2110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 length) { 2120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext=( 2130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext*)pContext; 2140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 val; 2150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pStreamContext) { 2170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return; 2180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi val=pStreamContext->mBitIndex + length; 2200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* update the bits...*/ 2210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mBitIndex += length; 2220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (val - 32 >= 0) { 2240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* update the bits...*/ 2250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mBitIndex -= 32; 2260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* update the words*/ 2270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mIndex++; 2280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 2300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_UInt32 VideoEditor3gpReader_BitStreamParserGetBits( 2320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi void* pContext,M4OSA_Int32 bitPos, M4OSA_Int32 bitLength) { 2330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext = 2340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (VideoEditor3gpReader_BitStreamParserContext*)pContext; 2350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 bitLocation, bitIndex; 2370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 retval=0; 2380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL==pStreamContext), 0, 2400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_BitStreamParserGetBits: invalid context pointer"); 2410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* computes the word location*/ 2430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bitLocation=bitPos/32; 2440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bitIndex=(bitPos) % 32; 2450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (bitLocation < pStreamContext->mSize) { 2470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 u_mask; 2480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 i_ovf = bitIndex + bitLength - 32; 2490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi retval=(M4OSA_UInt32)GET_MEMORY32( 2500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mPbitStream[ bitLocation ]); 2510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi u_mask = (bitLength >= 32) ? 0xffffffff: (1 << bitLength) - 1; 2530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (i_ovf <= 0) { 2550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi retval=(retval >> (- i_ovf)) & u_mask; 2560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 2570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 u_nextword = (M4OSA_UInt32)GET_MEMORY32( 2580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mPbitStream[ bitLocation + 1 ]); 2590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 u_msb_mask, u_msb_value, u_lsb_mask, u_lsb_value; 2600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi u_msb_mask = ((1 << (32 - bitIndex)) - 1) << i_ovf; 2620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi u_msb_value = retval << i_ovf; 2630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi u_lsb_mask = (1 << i_ovf) - 1; 2640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi u_lsb_value = u_nextword >> (32 - i_ovf); 2650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi retval= (u_msb_value & u_msb_mask ) | (u_lsb_value & u_lsb_mask); 2660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return retval; 2690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 2700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic void VideoEditor3gpReader_BitStreamParserRestart(void* pContext) { 2720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext = 2730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (VideoEditor3gpReader_BitStreamParserContext*)pContext; 2740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pStreamContext) { 2760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return; 2770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* resets the bitstream pointers*/ 2790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mIndex=0; 2800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mBitIndex=0; 2810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 2820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 2830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************* 2840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Get a pointer to the current byte pointed by the bitstream pointer. 2850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note It should be used carefully as the pointer is in the bitstream itself 2860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * and no copy is made. 2870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN/OUT) BitStreamParser context. 2880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return Pointer to the current location in the bitstream 2890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************* 2900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 2910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_UInt8* VideoEditor3gpReader_GetCurrentbitStreamPointer( 2920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi void* pContext) { 2930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext = 2940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (VideoEditor3gpReader_BitStreamParserContext*)pContext; 2950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL==pStreamContext), 0, "invalid context pointer"); 2960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (M4OSA_UInt8*)((M4OSA_UInt8*)pStreamContext->mPbitStream + \ 2980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mIndex * sizeof(M4OSA_UInt32) + \ 2990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamContext->mBitIndex/8) ; 3000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 3010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_Int32 VideoEditor3gpReader_BitStreamParserGetSize(void* pContext) { 3030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext = 3040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (VideoEditor3gpReader_BitStreamParserContext*)pContext; 3050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL==pStreamContext), 0, "invalid context pointer"); 3060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return pStreamContext->mSize; 3080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 3090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic void VideoEditor3gpReader_MPEG4BitStreamParserInit(void** pContext, 3120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi void* pBitStream, M4OSA_Int32 size) { 3130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserInit(pContext, pBitStream, size); 3140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 3150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_Int32 VideoEditor3gpReader_GetMpegLengthFromInteger(void* pContext, 3160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 val) { 3170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 length=0; 3180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 numBytes=0; 3190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 b=0; 3200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL==pContext), 0, "invalid context pointer"); 3220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* the length is encoded as a sequence of bytes. The highest bit is used 3240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi to indicate that the length continues on the next byte. 3250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi The length can be: 0x80 0x80 0x80 0x22 3270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi of just 0x22 (highest bit not set) 3280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 3300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi do { 3320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi b=(val & ((0xff)<< (8 * numBytes)))>> (8 * numBytes); 3330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi length=(length << 7) | (b & 0x7f); 3340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi numBytes++; 3350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } while ((b & 0x80) && numBytes < 4); 3360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return length; 3380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 3390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 3410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************* 3420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Decode an MPEG4 Systems descriptor size from an encoded SDL size data 3430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note The value is read from the current bitstream location. 3440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN/OUT) BitStreamParser context. 3450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return Size in a human readable form 3460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************* 3470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 3480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_Int32 VideoEditor3gpReader_GetMpegLengthFromStream(void* pContext){ 3490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 length=0; 3500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 numBytes=0; 3510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 b=0; 3520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL==pContext), 0, "invalid context pointer"); 3540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* the length is encoded as a sequence of bytes. The highest bit is used 3560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi to indicate that the length continues on the next byte. 3570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi The length can be: 0x80 0x80 0x80 0x22 3590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi of just 0x22 (highest bit not set) 3600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 3610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi do { 3630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi b=VideoEditor3gpReader_BitStreamParserShowBits(pContext, 8); 3640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pContext, 8); 3650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi length=(length << 7) | (b & 0x7f); 3660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi numBytes++; 3670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } while ((b & 0x80) && numBytes < 4); 3680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return length; 3700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 3710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /* VIDEOEDITOR_BITSTREAM_PARSER */ 3720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 3730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************ 3740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @brief create an instance of the 3gp reader 3750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note allocates the context 3760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 3770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext: (OUT) pointer on a reader context 3780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 3790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR there is no error 3800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_ALLOC a memory allocation has failed 3810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not valid 3820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************ 3830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 3840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_create(M4OSA_Context *pContext) { 3860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_Context* pC = NULL; 3870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 3880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pContext , M4ERR_PARAMETER); 3890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_create begin"); 3910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Context allocation & initialization */ 3930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi SAFE_MALLOC(pC, VideoEditor3gpReader_Context, 1, "VideoEditor3gpReader"); 3940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi memset(pC, sizeof(VideoEditor3gpReader_Context), 0); 3960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioStreamHandler = M4OSA_NULL; 3980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioAu.dataAddress = M4OSA_NULL; 3990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoStreamHandler = M4OSA_NULL; 4000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoAu.dataAddress = M4OSA_NULL; 4010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioSeeking = M4OSA_FALSE; 4030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioSeekTime = 0; 4040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoSeeking = M4OSA_FALSE; 4060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoSeekTime = 0; 4070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 408c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng pC->mMaxDuration = 0; 409c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng 4100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pContext=pC; 4110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargicleanUp: 4130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if ( M4NO_ERROR == err ) { 4140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_create no error"); 4150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 4160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_create ERROR 0x%X", err); 4170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_create end "); 4190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 4200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 4210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 4230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************** 4240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @brief destroy the instance of the 3gp reader 4250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @note after this call the context is invalid 4260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param context: (IN) Context of the reader 4270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4NO_ERROR there is no error 4280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_PARAMETER pContext parameter is not properly set 4290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************** 4300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 4310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_destroy(M4OSA_Context pContext) { 4330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 4340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_Context* pC = M4OSA_NULL; 4350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_destroy begin"); 4370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pContext, M4ERR_PARAMETER); 4390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC = (VideoEditor3gpReader_Context*)pContext; 4400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi SAFE_FREE(pC->mAudioAu.dataAddress); 4420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioAu.dataAddress = M4OSA_NULL; 4430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi SAFE_FREE(pC->mVideoAu.dataAddress); 4440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoAu.dataAddress = M4OSA_NULL; 4450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi SAFE_FREE(pC); 4460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pContext = M4OSA_NULL; 4470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargicleanUp: 4490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR == err ) { 4500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_destroy no error"); 4510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 4530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_destroy ERROR 0x%X", err); 4550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_destroy end "); 4580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 4590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 4600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 4620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************ 4630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @brief open the reader and initializes its created instance 4640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @note this function open the media file 4650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param context: (IN) Context of the reader 4660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param pFileDescriptor: (IN) Pointer to proprietary data identifying 4670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* the media to open 4680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4NO_ERROR there is no error 4690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_PARAMETER the context is NULL 47056650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava* @return M4ERR_UNSUPPORTED_MEDIA_TYPE 47156650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava* the media is DRM protected 4720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************ 4730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 4740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_open(M4OSA_Context pContext, 4760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Void* pFileDescriptor) { 4770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_Context* pC = (VideoEditor3gpReader_Context*)pContext; 4780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 4790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_open start "); 4810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, 4820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_open: invalid context pointer"); 4830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pFileDescriptor), M4ERR_PARAMETER, 4840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_open: invalid pointer pFileDescriptor"); 4850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_open Datasource start %s", 4870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (char*)pFileDescriptor); 48825d6699c194a9719997c79dfb95bd66673825b7bSantosh Madhava //pC->mDataSource = DataSource::CreateFromURI((char*)pFileDescriptor); 48925d6699c194a9719997c79dfb95bd66673825b7bSantosh Madhava pC->mDataSource = new FileSource ((char*)pFileDescriptor); 4900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (pC->mDataSource == NULL) { 4920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_open Datasource error"); 4930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_PARAMETER; 4940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mExtractor = MediaExtractor::Create(pC->mDataSource, 4970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi MEDIA_MIMETYPE_CONTAINER_MPEG4); 4980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (pC->mExtractor == NULL) { 5000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_open extractor error"); 5010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_PARAMETER; 5020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50456650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava int32_t isDRMProtected = 0; 50556650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava sp<MetaData> meta = pC->mExtractor->getMetaData(); 50656650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava meta->findInt32(kKeyIsDRM, &isDRMProtected); 50756650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava if (isDRMProtected) { 50856650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava LOGV("VideoEditorMp3Reader_open error - DRM Protected"); 50956650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava return M4ERR_UNSUPPORTED_MEDIA_TYPE; 51056650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava } 51156650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava 5120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_open end "); 5130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 5140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 5150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 5170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************ 5180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @brief close the reader 5190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @note close the 3GP file 5200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param context: (IN) Context of the reader 5210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4NO_ERROR there is no error 5220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_PARAMETER the context is NULL 5230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_BAD_CONTEXT provided context is not a valid one 5240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************ 5250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 5260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_close(M4OSA_Context context) { 5270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_Context *pC = (VideoEditor3gpReader_Context*)context; 5280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_AudioSbrUserdata *pAudioSbrUserData; 5290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_AccessUnit *pAU; 5300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 5310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_close begin"); 5330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, 5350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_close: invalid context pointer"); 5360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (pC->mAudioStreamHandler) { 5380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_close Audio"); 5390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL != pC->mAudioStreamHandler->m_pDecoderSpecificInfo) { 5412ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->mAudioStreamHandler->\ 5420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pDecoderSpecificInfo); 5430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioStreamHandler->m_decoderSpecificInfoSize = 0; 5440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioStreamHandler->m_pDecoderSpecificInfo = M4OSA_NULL; 5450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if ((M4DA_StreamTypeAudioAac == pC->mAudioStreamHandler->m_streamType) 5480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (M4OSA_NULL != pC->mAudioStreamHandler->m_pUserData)) { 5490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAudioSbrUserData = (M4READER_AudioSbrUserdata*)(\ 5500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioStreamHandler->m_pUserData); 5510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAU = (M4_AccessUnit*)pAudioSbrUserData->m_pFirstAU; 5530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL != pAU) { 5542ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pAU); 5550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL != pAudioSbrUserData->m_pAacDecoderUserConfig) { 5582ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pAudioSbrUserData->\ 5590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pAacDecoderUserConfig); 5600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5612ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pAudioSbrUserData); 5620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioStreamHandler->m_pUserData = M4OSA_NULL; 5630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (pC->mAudioStreamHandler->m_pESDSInfo != M4OSA_NULL) { 5662ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->mAudioStreamHandler->m_pESDSInfo); 5670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioStreamHandler->m_pESDSInfo = M4OSA_NULL; 5680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioStreamHandler->m_ESDSInfoSize = 0; 5690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Finally destroy the stream handler */ 5712ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->mAudioStreamHandler); 5720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioStreamHandler = M4OSA_NULL; 5730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioSource->stop(); 5750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioSource.clear(); 5760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (pC->mVideoStreamHandler) { 5780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_close Video "); 5790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(M4OSA_NULL != pC->mVideoStreamHandler->m_pDecoderSpecificInfo) { 5812ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->mVideoStreamHandler->\ 5820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pDecoderSpecificInfo); 5830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoStreamHandler->m_decoderSpecificInfoSize = 0; 5840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoStreamHandler->m_pDecoderSpecificInfo = M4OSA_NULL; 5850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(M4OSA_NULL != pC->mVideoStreamHandler->m_pH264DecoderSpecificInfo) { 5882ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->mVideoStreamHandler->\ 5890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pH264DecoderSpecificInfo); 5900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoStreamHandler->m_H264decoderSpecificInfoSize = 0; 5910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoStreamHandler->m_pH264DecoderSpecificInfo = M4OSA_NULL; 5920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(pC->mVideoStreamHandler->m_pESDSInfo != M4OSA_NULL) { 5952ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->mVideoStreamHandler->m_pESDSInfo); 5960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoStreamHandler->m_pESDSInfo = M4OSA_NULL; 5970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoStreamHandler->m_ESDSInfoSize = 0; 5980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Finally destroy the stream handler */ 6012ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->mVideoStreamHandler); 6020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoStreamHandler = M4OSA_NULL; 6030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoSource->stop(); 6050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoSource.clear(); 6060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 60725d6699c194a9719997c79dfb95bd66673825b7bSantosh Madhava pC->mExtractor.clear(); 6080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mDataSource.clear(); 6090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_close end"); 6110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 6120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 6130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 6150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************ 6160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @brief get an option from the 3gp reader 6170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @note it allows the caller to retrieve a property value: 6180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* 6190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param context: (IN) Context of the reader 6200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param optionId: (IN) indicates the option to get 6210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param pValue: (OUT) pointer to structure or value (allocated 6220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* by user) where option is stored 6230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* 6240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4NO_ERROR there is no error 6250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_BAD_CONTEXT provided context is not a valid one 6260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_PARAMETER at least one parameter is not properly set 6270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_BAD_OPTION_ID when the option ID is not a valid one 6280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_VIDEO_NOT_H263 No video stream H263 in file. 6290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_NO_VIDEO_STREAM_RETRIEVED_YET 6300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* Function 3gpReader_getNextStreamHandler must be called before 6310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************ 6320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 6330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_getOption(M4OSA_Context context, 6340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_OptionID optionId, M4OSA_DataOption pValue) { 6350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_Context* pC = (VideoEditor3gpReader_Context*)context; 6360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 6370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption begin %d", optionId); 6390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, 6410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "invalid context pointer"); 6420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pValue), M4ERR_PARAMETER, 6430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_getOption: invalid pointer on value"); 6440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch (optionId) { 6460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_kOptionID_Duration: 6470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 6480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption duration %d",pC->mMaxDuration); 649c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng *(M4OSA_Time*)pValue = pC->mMaxDuration; 6500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_kOptionID_Version: 6530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* not used */ 6540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption: M4READER_kOptionID_Version"); 6550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_kOptionID_Copyright: 6580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* not used */ 6590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV(">>>>>>> M4READER_kOptionID_Copyright"); 6600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_kOptionID_CreationTime: 6630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* not used */ 6640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption M4READER_kOptionID_CreationTime"); 6650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_kOptionID_Bitrate: 6680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 6690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32* pBitrate = (M4OSA_UInt32*)pValue; 6700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (pC->mMaxDuration != 0) { 6720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 ui32Tmp = (M4OSA_UInt32)pC->mMaxDuration; 673413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury *pBitrate = (M4OSA_UInt32)(pC->mFileSize * 8000.0 / pC->mMaxDuration); 6740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption bitrate %ld", *pBitrate); 6760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_3GP_kOptionID_H263Properties: 6790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 6800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(M4OSA_NULL == pC->mVideoStreamHandler) { 6810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption no videoStream retrieved"); 6820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4ERR_NO_VIDEO_STREAM_RETRIEVED_YET; 6840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if((M4DA_StreamTypeVideoH263 != pC->mVideoStreamHandler->\ 6875fcff590d602457aa16fad5e13344b67e516bef3Danny Fernandes m_streamType) || (pC->mVideoStreamHandler->\ 6880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_decoderSpecificInfoSize < 7)) { 6890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption DSI Size %d", 6900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoStreamHandler->m_decoderSpecificInfoSize); 6910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4ERR_VIDEO_NOT_H263; 6930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* MAGICAL in the decoder confi H263: the 7th byte is the profile 6970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * number, 6th byte is the level number */ 6980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ((M4READER_3GP_H263Properties *)pValue)->uiProfile = 6990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoStreamHandler->m_pDecoderSpecificInfo[6]; 7000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ((M4READER_3GP_H263Properties *)pValue)->uiLevel = 7010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoStreamHandler->m_pDecoderSpecificInfo[5]; 7020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption M4READER_3GP_kOptionID_\ 7030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi H263Properties end"); 7040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 7050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_3GP_kOptionID_PurpleLabsDrm: 7070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReaderOption M4READER_3GP_kOptionID_PurpleLabsDrm"); 7080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* not used */ 7090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_kOptionID_GetNumberOfAudioAu: 7120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* not used */ 7130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReadeOption M4READER_kOptionID_GetNumberOfAudioAu"); 7140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_kOptionID_GetNumberOfVideoAu: 7170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* not used */ 7180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption :GetNumberOfVideoAu"); 7190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_kOptionID_GetMetadata: 7220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* not used */ 7230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption M4READER_kOptionID_GetMetadata"); 7240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_kOptionID_3gpFtypBox: 7270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* used only for SEMC */ 7280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption M4READER_kOptionID_3gpFtypBox"); 7290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4ERR_BAD_OPTION_ID; //check this 7300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef OPTIONID_GET_NEXT_VIDEO_CTS 7330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_3GP_kOptionID_getNextVideoCTS: 7340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* not used */ 7350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption: getNextVideoCTS"); 7360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif 7380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 7390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 7400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4ERR_BAD_OPTION_ID; 7410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption M4ERR_BAD_OPTION_ID"); 7420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 7430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 7450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption end: optionID: x%x", optionId); 7460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 7470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 7480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 7490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************ 7500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @brief set an option on the 3gp reader 7510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @note No option can be set yet. 7520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param context: (IN) Context of the reader 7530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param optionId: (IN) indicates the option to set 7540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param pValue: (IN) pointer to structure or value (allocated 7550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* by user) where option is stored 7560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4NO_ERROR there is no error 7570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_BAD_CONTEXT provided context is not a valid one 7580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_PARAMETER at least one parameter is not properly set 7590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_BAD_OPTION_ID when the option ID is not a valid one 7600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi************************************************************************ 7610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 7620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_setOption(M4OSA_Context context, 7630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_OptionID optionId, M4OSA_DataOption pValue) { 7640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_Context* pC = (VideoEditor3gpReader_Context*)context; 7650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 7660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check function parameters */ 7680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, 7690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "invalid context pointer"); 7700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pValue), M4ERR_PARAMETER, 7710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "invalid value pointer"); 7720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_setOption begin %d",optionId); 7740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch(optionId) { 7760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_kOptionID_SetOsaFileReaderFctsPtr: 7770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_3GP_kOptionID_AudioOnly: 7800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_3GP_kOptionID_VideoOnly: 7830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_3GP_kOptionID_FastOpenMode: 7860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4READER_kOptionID_MaxMetadataSize: 7890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 7920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 7930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_setOption: returns M4ERR_BAD_OPTION_ID"); 7940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4ERR_BAD_OPTION_ID; 7950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 7960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 7970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 7980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_setOption end "); 7990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 8000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 8010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 8020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ************************************************************************ 8030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief fill the access unit structure with initialization values 8040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param context: (IN) Context of the reader 8050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pStreamHandler: (IN) pointer to the stream handler to which 8060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * the access unit will be associated 8070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pAccessUnit: (IN/OUT) pointer to the access unit (allocated 8080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * by the caller) to initialize 8090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR there is no error 8100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 8110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ************************************************************************ 8120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 8130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_fillAuStruct(M4OSA_Context context, 8140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_StreamHandler *pStreamHandler, M4_AccessUnit *pAccessUnit) { 8150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_Context* pC = (VideoEditor3gpReader_Context*)context; 8160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err= M4NO_ERROR; 8170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, 8190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_fillAuStruct: invalid context"); 8200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 8210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_fillAuStruc invalid pointer to M4_StreamHandler"); 8220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pAccessUnit == 0), M4ERR_PARAMETER, 8230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_fillAuStruct: invalid pointer to M4_AccessUnit"); 8240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_fillAuStruct begin"); 8260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Initialize pAccessUnit structure */ 8280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_size = 0; 8290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_CTS = 0; 8300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_DTS = 0; 8310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_attribute = 0; 8320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_dataAddress = M4OSA_NULL; 8330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_maxsize = pStreamHandler->m_maxAUSize; 8340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_streamID = pStreamHandler->m_streamId; 8350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_structSize = sizeof(M4_AccessUnit); 8360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_fillAuStruct end"); 8380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 8390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 8400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 8420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi******************************************************************************** 8430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @brief jump into the stream at the specified time 8440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @note 8450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param context: (IN) Context of the reader 8460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param pStreamHandler (IN) the stream handler of the stream to make jump 8470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param pTime (I/O)IN the time to jump to (in ms) 8480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* OUT the time to which the stream really jumped 8490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4NO_ERROR there is no error 8500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_PARAMETER at least one parameter is not properly set 8510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi******************************************************************************** 8520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 8530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_jump(M4OSA_Context context, 8540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_StreamHandler *pStreamHandler, M4OSA_Int32* pTime) { 8550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_Context* pC = (VideoEditor3gpReader_Context*)context; 8560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 8570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_AccessUnit* pAu; 8580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Time time64; 8590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, 8610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_jump: invalid context"); 8620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 8630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_jump: invalid pointer to M4_StreamHandler"); 8640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pTime == 0), M4ERR_PARAMETER, 8650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_jump: invalid time pointer"); 8660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump begin"); 8680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (*pTime == (pStreamHandler->m_duration)) { 870c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru *pTime -= 1; 871c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru } 872c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng time64 = (M4OSA_Time)*pTime; 8730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump time us %ld ", time64); 8750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if ((pC->mAudioStreamHandler != M4OSA_NULL) && 8770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pStreamHandler->m_streamId == pC->mAudioStreamHandler->m_streamId)) 8780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 8790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu = &pC->mAudioAu; 8800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu->CTS = time64; 8810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu->DTS = time64; 8820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi time64 = time64 * 1000; /* Convert the time into micro sec */ 8840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioSeeking = M4OSA_TRUE; 8850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioSeekTime = time64; 8860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump AUDIO time us %ld ", time64); 8870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else if ((pC->mVideoStreamHandler != M4OSA_NULL) && 8880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pStreamHandler->m_streamId == pC->mVideoStreamHandler->m_streamId)) 8890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 8900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu = &pC->mVideoAu; 8910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu->CTS = time64; 8920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu->DTS = time64; 8930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi time64 = time64 * 1000; /* Convert the time into micro sec */ 8950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoSeeking = M4OSA_TRUE; 8960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoSeekTime = time64; 8970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump VIDEO time us %ld ", time64); 8980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 8990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump passed StreamHandler is not known\n"); 9000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_PARAMETER; 9010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi time64 = time64 / 1000; /* Convert the time into milli sec */ 9030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump time ms before seekset %ld ", time64); 9040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 905c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng *pTime = (M4OSA_Int32)time64; 9060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump end"); 9080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4NO_ERROR; 9090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 9100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 9110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 9120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi******************************************************************************** 9130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @brief reset the stream, that is seek it to beginning and make it ready 9140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @note 9150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param context: (IN) Context of the reader 9160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param pStreamHandler (IN) The stream handler of the stream to reset 9170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4NO_ERROR there is no error 9180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_PARAMETER at least one parameter is not properly set 9190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi******************************************************************************** 9200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 9210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_reset(M4OSA_Context context, 9220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_StreamHandler *pStreamHandler) { 9230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_Context* pC = (VideoEditor3gpReader_Context*)context; 9240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 9250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_StreamID streamIdArray[2]; 9260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_AccessUnit* pAu; 927c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng M4OSA_Time time64 = 0; 9280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, 9300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_reset: invalid context"); 9310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 9320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_reset: invalid pointer to M4_StreamHandler"); 9330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_reset begin"); 9350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (pStreamHandler == (M4_StreamHandler*)pC->mAudioStreamHandler) { 9370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu = &pC->mAudioAu; 9380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else if (pStreamHandler == (M4_StreamHandler*)pC->mVideoStreamHandler) { 9390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu = &pC->mVideoAu; 9400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 9410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_reset passed StreamHandler is not known\n"); 9420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_PARAMETER; 9430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu->CTS = time64; 9460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu->DTS = time64; 9470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_reset end"); 9490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 9500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 9510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 9530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi******************************************************************************** 9540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @brief Gets an access unit (AU) from the stream handler source. 9550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @note An AU is the smallest possible amount of data to be decoded by decoder 9560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* 9570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param context: (IN) Context of the reader 9580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param pStreamHandler (IN) The stream handler of the stream to make jump 9590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param pAccessUnit (IO) Pointer to access unit to fill with read data 9600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4NO_ERROR there is no error 9610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_PARAMETER at least one parameter is not properly set 9620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @returns M4ERR_ALLOC memory allocation failed 9630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @returns M4WAR_NO_MORE_AU there are no more access unit in the stream 9640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi******************************************************************************** 9650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 9660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_getNextAu(M4OSA_Context context, 9670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_StreamHandler *pStreamHandler, M4_AccessUnit *pAccessUnit) { 9680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_Context* pC=(VideoEditor3gpReader_Context*)context; 9690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 9700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_AccessUnit* pAu; 9710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi int64_t tempTime64 = 0; 9720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi MediaBuffer *mMediaBuffer = NULL; 9730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi MediaSource::ReadOptions options; 9740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Bool flag = M4OSA_FALSE; 9750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi status_t error; 976c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru int32_t i32Tmp = 0; 9770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pReaderContext == 0), M4ERR_PARAMETER, 9790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_getNextAu: invalid context"); 9800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 9810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_getNextAu: invalid pointer to M4_StreamHandler"); 9820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pAccessUnit == 0), M4ERR_PARAMETER, 9830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_getNextAu: invalid pointer to M4_AccessUnit"); 9840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu begin"); 9860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (pStreamHandler == (M4_StreamHandler*)pC->mAudioStreamHandler) { 9880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu audio stream"); 9890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu = &pC->mAudioAu; 9900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (pC->mAudioSeeking == M4OSA_TRUE) { 9910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu audio seek time: %ld", 9920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioSeekTime); 9930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi options.setSeekTo(pC->mAudioSeekTime); 9940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioSource->read(&mMediaBuffer, &options); 9950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer->meta_data()->findInt64(kKeyTime, 9970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (int64_t*)&tempTime64); 9980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi options.clearSeekTo(); 9990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioSeeking = M4OSA_FALSE; 10000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi flag = M4OSA_TRUE; 10010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 10020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu audio no seek:"); 10030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioSource->read(&mMediaBuffer, &options); 10040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (mMediaBuffer != NULL) { 10050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer->meta_data()->findInt64(kKeyTime, 10060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (int64_t*)&tempTime64); 10070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else if (pStreamHandler == (M4_StreamHandler*)pC->mVideoStreamHandler) { 10100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu video steram "); 10110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu = &pC->mVideoAu; 10120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(pC->mVideoSeeking == M4OSA_TRUE) { 10130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi flag = M4OSA_TRUE; 10140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu seek: %ld",pC->mVideoSeekTime); 10150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi options.setSeekTo(pC->mVideoSeekTime, 10160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC); 10170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi do 10180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 10190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (mMediaBuffer != NULL) { 10200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu free the MediaBuffer"); 10210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer->release(); 10220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi error = pC->mVideoSource->read(&mMediaBuffer, &options); 10240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VE3gpReader_getNextAu MediaBuffer %x , error %d", 10250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer, error); 10260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (mMediaBuffer != NULL) 10270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 1028c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru if (mMediaBuffer->meta_data()->findInt32(kKeyIsSyncFrame, 1029c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru &i32Tmp) && i32Tmp) { 1030c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru LOGV("SYNC FRAME FOUND--%d", i32Tmp); 1031c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru pAu->attribute = AU_RAP; 1032c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru } 10337e768504a0222d68ab2f9e80fbd670df033aafdbDheeraj Sharma else { 10347e768504a0222d68ab2f9e80fbd670df033aafdbDheeraj Sharma pAu->attribute = AU_P_Frame; 10357e768504a0222d68ab2f9e80fbd670df033aafdbDheeraj Sharma } 10360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer->meta_data()->findInt64(kKeyTime, 10370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (int64_t*)&tempTime64); 10380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 10390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 10400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi options.clearSeekTo(); 10420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } while(tempTime64 < pC->mVideoSeekTime); 10430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VE3gpReader_getNextAu: video time with seek = %lld:", 10450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi tempTime64); 10460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoSeeking = M4OSA_FALSE; 10470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 10480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu video no seek:"); 10490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoSource->read(&mMediaBuffer, &options); 10500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(mMediaBuffer != NULL) { 1052c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru if (mMediaBuffer->meta_data()->findInt32(kKeyIsSyncFrame, 1053c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru &i32Tmp) && i32Tmp) { 1054c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru LOGV("SYNC FRAME FOUND--%d", i32Tmp); 1055c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru pAu->attribute = AU_RAP; 1056c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru } 10577e768504a0222d68ab2f9e80fbd670df033aafdbDheeraj Sharma else { 10587e768504a0222d68ab2f9e80fbd670df033aafdbDheeraj Sharma pAu->attribute = AU_P_Frame; 10597e768504a0222d68ab2f9e80fbd670df033aafdbDheeraj Sharma } 10600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer->meta_data()->findInt64(kKeyTime, 10610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (int64_t*)&tempTime64); 10620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VE3gpReader_getNextAu: video no seek time = %lld:", 10630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi tempTime64); 10640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi }else { 10650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VE3gpReader_getNextAu:video no seek time buffer is NULL"); 10660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 10690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu M4ERR_PARAMETER"); 10700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_PARAMETER; 10710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (mMediaBuffer != NULL) { 10740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (pAu->dataAddress == NULL) || (pAu->size < \ 10750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer->range_length())) { 10760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(pAu->dataAddress != NULL) { 10772ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free((M4OSA_Int32*)pAu->dataAddress); 10780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu->dataAddress = NULL; 10790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("Buffer lenght = %d ,%d",(mMediaBuffer->range_length() +\ 10810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3) & ~0x3,(mMediaBuffer->range_length())); 10820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10832ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu pAu->dataAddress = (M4OSA_Int32*)M4OSA_32bitAlignedMalloc( 10840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (mMediaBuffer->range_length() + 3) & ~0x3,M4READER_3GP, 10850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char*)"pAccessUnit->m_dataAddress" ); 10860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(pAu->dataAddress == NULL) { 10870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu malloc failed"); 10880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 10890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu->size = mMediaBuffer->range_length(); 10920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10939d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pAu->dataAddress, 10949d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)((const char *)mMediaBuffer->data() + mMediaBuffer->range_offset()), 10950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer->range_length()); 10960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (pStreamHandler == (M4_StreamHandler*)pC->mVideoStreamHandler) && 10980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pStreamHandler->m_streamType == M4DA_StreamTypeVideoMpeg4Avc) ) { 10990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 size = mMediaBuffer->range_length(); 11000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 *lbuffer; 11010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lbuffer = (M4OSA_UInt8 *) pAu->dataAddress; 11030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("pAccessUnit->m_dataAddress size = %x",size); 11040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lbuffer[0] = (size >> 24) & 0xFF; 11060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lbuffer[1] = (size >> 16) & 0xFF; 11070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lbuffer[2] = (size >> 8) & 0xFF; 11080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lbuffer[3] = (size) & 0xFF; 11090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 11100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu->CTS = tempTime64; 11120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu->CTS = pAu->CTS / 1000; //converting the microsec to millisec 11140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu CTS = %ld",pAu->CTS); 11150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu->DTS = pAu->CTS; 1117c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru if (pStreamHandler == (M4_StreamHandler*)pC->mAudioStreamHandler) { 1118c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru pAu->attribute = M4SYS_kFragAttrOk; 1119c3b959af08149605d3b1fdb52b1a21b851399565Basavapatna Dattaguru } 11200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer->release(); 11210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_dataAddress = (M4OSA_Int8*) pAu->dataAddress; 11230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_size = pAu->size; 11240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_maxsize = pAu->size; 11250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_CTS = pAu->CTS; 11260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_DTS = pAu->DTS; 11270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_attribute = pAu->attribute; 11280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 11300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu: M4WAR_NO_MORE_AU (EOS) reached"); 11310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAccessUnit->m_size = 0; 11320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4WAR_NO_MORE_AU; 11330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 11340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi options.clearSeekTo(); 11350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAu->nbFrag = 0; 11370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer = NULL; 11380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu end "); 11390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 11410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 11420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 11430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************* 11440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Split the AVC DSI in its different components and write it in 11450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * ONE memory buffer 11460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note 11470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pStreamHandler: (IN/OUT) The MPEG4-AVC stream 11480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pDecoderConfigLocal: (IN) The DSI buffer 11490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param decoderConfigSizeLocal: (IN) The DSI buffer size 11500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR there is no error 11510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return ERR_FILE_SYNTAX_ERROR pDecoderConfigLocal is NULL 11520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************* 11530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 11540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR VideoEditor3gpReader_AnalyseAvcDsi( 11550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_StreamHandler *pStreamHandler, M4OSA_Int32* pDecoderConfigLocal, 11560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 decoderConfigSizeLocal) { 11570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi struct _avcSpecificInfo *pAvcSpecInfo = M4OSA_NULL; 11580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiSpecInfoSize; 11590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Context pBitParserContext = M4OSA_NULL; 11600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_MemAddr8 pPos; 11610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 11630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * First parsing to get the total allocation size (we must not do 11640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * multiple malloc, but only one instead) */ 11650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 11660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 val; 11670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 i,j; 11680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 nalUnitLength; 11690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 numOfSequenceParameterSets; 11700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiTotalSizeOfSPS = 0; 11710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 numOfPictureParameterSets; 11720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiTotalSizeOfPPS = 0; 11730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiSize; 11740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi struct _avcSpecificInfo avcSpIf; 11750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi avcSpIf.m_nalUnitLength = 0; 11770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pDecoderConfigLocal) { 11790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_READER3GP_DECODER_CONFIG_ERROR; 11800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 11810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_MPEG4BitStreamParserInit(&pBitParserContext, 11830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDecoderConfigLocal, decoderConfigSizeLocal); 11840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pBitParserContext) { 11860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 11870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 11880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 11900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* 8 bits -- configuration version */ 11910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 11920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* 8 bits -- avc profile indication*/ 11930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 11940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* 8 bits -- profile compatibility */ 11950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 11960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* 8 bits -- avc level indication*/ 11970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi val=VideoEditor3gpReader_BitStreamParserShowBits(pBitParserContext, 8); 11980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* 6 bits reserved 111111b 2 bits length Size minus one*/ 11990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 12000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* m_nalUnitLength */ 12010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nalUnitLength = (M4OSA_UInt8)((val & 0x03) + 1);/*0b11111100*/ 12030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (nalUnitLength > 4) { 12040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_decoderSpecificInfoSize = 0; 12050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_pDecoderSpecificInfo = M4OSA_NULL; 12060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserCleanUp(pBitParserContext); 12070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 12080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 12090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * SPS table */ 12100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi val=VideoEditor3gpReader_BitStreamParserShowBits(pBitParserContext, 12110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8);/* 3 bits-reserved 111b-5 bits number of sequence parameter set*/ 12120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi numOfSequenceParameterSets = val & 0x1F; 12130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*1F instead of E0*/ /*0b11100000*/ /*Number of seq parameter sets*/ 12140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 12150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for (i=0; i < numOfSequenceParameterSets; i++) { 12160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 12170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Get the size of this element */ 12180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiSize = 12190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt32)VideoEditor3gpReader_BitStreamParserShowBits( 12200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pBitParserContext, 16); 12210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiTotalSizeOfSPS += uiSize; 12220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits( 12230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pBitParserContext, 16); 12240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 12250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *Read the element(dont keep it, we only want size right now) */ 12260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for (j=0; j<uiSize; j++) { 12270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits( 12280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pBitParserContext, 8); 12290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 12330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * SPS table */ 12340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi numOfPictureParameterSets=(M4OSA_UInt8)\ 12350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserShowBits(pBitParserContext, 12360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8); 12370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 12380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for (i=0; i < numOfPictureParameterSets; i++) { 12390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 12400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Get the size of this element */ 12410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiSize = (M4OSA_UInt32) 12420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserShowBits( 12430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pBitParserContext, 16); 12440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiTotalSizeOfPPS += uiSize; 12450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits( 12460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pBitParserContext, 16); 12470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 12480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *Read the element(dont keep it,we only want size right now)*/ 12490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for (j=0; j<uiSize; j++) { 12500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits( 12510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pBitParserContext, 8); 12520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 12560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Compute the size of the full buffer */ 12570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiSpecInfoSize = sizeof(struct _avcSpecificInfo) + 12580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi numOfSequenceParameterSets * sizeof(struct _parameterSet) 12590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + /**< size of the table of SPS elements */ 12600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi numOfPictureParameterSets * sizeof(struct _parameterSet) 12610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + /**< size of the table of PPS elements */ 12620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiTotalSizeOfSPS + 12630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiTotalSizeOfPPS; 12640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 12650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Allocate the buffer */ 12662ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu pAvcSpecInfo =(struct _avcSpecificInfo*)M4OSA_32bitAlignedMalloc(uiSpecInfoSize, 12670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_3GP, (M4OSA_Char*)"MPEG-4 AVC DecoderSpecific"); 12680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pAvcSpecInfo) { 12690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserCleanUp(pBitParserContext); 12700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 12710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 12740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the pointers to the correct part of the buffer */ 12750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAvcSpecInfo->m_nalUnitLength = nalUnitLength; 12760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAvcSpecInfo->m_numOfSequenceParameterSets = 12770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi numOfSequenceParameterSets; 12780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAvcSpecInfo->m_numOfPictureParameterSets = 12790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi numOfPictureParameterSets; 12800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* We place the SPS param sets table after m_pPictureParameterSet */ 12820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAvcSpecInfo->m_pSequenceParameterSet= (struct _parameterSet*)( 12830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_MemAddr8)(&pAvcSpecInfo->m_pPictureParameterSet) + 12840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeof(pAvcSpecInfo->m_pPictureParameterSet)); 12850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*We place the PPS param sets table after the SPS param sets table*/ 12860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAvcSpecInfo->m_pPictureParameterSet = (struct _parameterSet*)( 12870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_MemAddr8)(pAvcSpecInfo->m_pSequenceParameterSet) + 12880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (numOfSequenceParameterSets * sizeof(struct _parameterSet))); 12890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< The data will be placed after the PPS param sets table */ 12900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pPos = (M4OSA_MemAddr8)pAvcSpecInfo->m_pPictureParameterSet + 12910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (numOfPictureParameterSets * sizeof(struct _parameterSet)); 12920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 12940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * reset the bit parser */ 12950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserCleanUp(pBitParserContext); 12960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 13000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Second parsing to copy the data */ 13010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL != pAvcSpecInfo) { 13020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 i,j; 13030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_MPEG4BitStreamParserInit(&pBitParserContext, 13050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDecoderConfigLocal, decoderConfigSizeLocal); 13060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pBitParserContext) { 13082ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pAvcSpecInfo); 13090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 13100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 13110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* 8 bits -- configuration version */ 13140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* 8 bits -- avc profile indication*/ 13160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* 8 bits -- profile compatibility */ 13180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* 8 bits -- avc level indication*/ 13200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* m_nalUnitLength */ 13220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* 3 bits -- reserved 111b -- 5 bits number of sequence parameter set*/ 13240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for (i=0; i < pAvcSpecInfo->m_numOfSequenceParameterSets; i++) { 13260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAvcSpecInfo->m_pSequenceParameterSet[i].m_length = 13270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt16)VideoEditor3gpReader_BitStreamParserShowBits( 13280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pBitParserContext, 16); 13290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext,16); 13300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAvcSpecInfo->m_pSequenceParameterSet[i].m_pParameterSetUnit = 13320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8*)pPos; /**< current position in the buffer */ 13330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pPos += pAvcSpecInfo->m_pSequenceParameterSet[i].m_length; 13340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< increment the position in the buffer */ 13350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for (j=0; j<pAvcSpecInfo->m_pSequenceParameterSet[i].m_length;j++){ 13360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAvcSpecInfo->m_pSequenceParameterSet[i].m_pParameterSetUnit[j]= 13370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)VideoEditor3gpReader_BitStreamParserShowBits( 13380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pBitParserContext, 8); 13390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits( 13400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pBitParserContext, 8); 13410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 13420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 13430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* number of pîcture parameter set*/ 13460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for (i=0; i < pAvcSpecInfo->m_numOfPictureParameterSets; i++) { 13480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAvcSpecInfo->m_pPictureParameterSet[i].m_length = 13490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt16)VideoEditor3gpReader_BitStreamParserShowBits( 13500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pBitParserContext, 16); 13510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext,16); 13520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAvcSpecInfo->m_pPictureParameterSet[i].m_pParameterSetUnit = 13540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8*)pPos; /**< current position in the buffer */ 13550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pPos += pAvcSpecInfo->m_pPictureParameterSet[i].m_length; 13560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< increment the position in the buffer */ 13570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for (j=0; j<pAvcSpecInfo->m_pPictureParameterSet[i].m_length; j++) { 13580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAvcSpecInfo->m_pPictureParameterSet[i].m_pParameterSetUnit[j] = 13590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)VideoEditor3gpReader_BitStreamParserShowBits( 13600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pBitParserContext, 8); 13610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits( 13620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pBitParserContext, 8); 13630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 13640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 13650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserCleanUp(pBitParserContext); 13660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_decoderSpecificInfoSize = uiSpecInfoSize; 13670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_pDecoderSpecificInfo = (M4OSA_UInt8*)pAvcSpecInfo; 13680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 13690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_H264decoderSpecificInfoSize = decoderConfigSizeLocal; 13702ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu pStreamHandler->m_pH264DecoderSpecificInfo = (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc( 13710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi decoderConfigSizeLocal, M4READER_3GP, 13720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char*)"MPEG-4 AVC DecoderSpecific"); 13730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pStreamHandler->m_pH264DecoderSpecificInfo) { 13740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto cleanup; 13750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 13760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13779d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void * ) pStreamHandler->m_pH264DecoderSpecificInfo, 13789d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void * )pDecoderConfigLocal, 13790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_H264decoderSpecificInfoSize); 13800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 13810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargicleanup: 13820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserCleanUp(pBitParserContext); 13830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_READER3GP_DECODER_CONFIG_ERROR; 13840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 13850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 13860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi******************************************************************************** 13870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @brief Get the next stream found in the 3gp file 13880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @note 13890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param context: (IN) Context of the reader 13900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param pMediaFamily: OUT) pointer to a user allocated 13910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* M4READER_MediaFamily that will be filled 13920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* with the media family of the found stream 13930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @param pStreamHandler:(OUT) pointer to StreamHandler that will be allocated 13940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* and filled with the found stream description 13950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4NO_ERROR there is no error 13960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_BAD_CONTEXT provided context is not a valid one 13970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4ERR_PARAMETER at least one parameter is not properly set 13980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi* @return M4WAR_NO_MORE_STREAM no more available stream in the media 13990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi******************************************************************************** 14000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 14010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_getNextStreamHandler(M4OSA_Context context, 14020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_MediaFamily *pMediaFamily, 14030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_StreamHandler **pStreamHandler) { 14040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_Context* pC=(VideoEditor3gpReader_Context*)context; 14050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 14060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_StreamID streamIdArray[2]; 14070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_StreamDescription streamDesc; 14080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_AudioStreamHandler* pAudioStreamHandler; 14090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_VideoStreamHandler* pVideoStreamHandler; 14100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int8 *DecoderSpecificInfo = M4OSA_NULL; 14110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 decoderSpecificInfoSize =0, maxAUSize = 0; 14120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_StreamType streamType = M4DA_StreamTypeUnknown; 14140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 temp, i, trackCount; 14150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Bool haveAudio = M4OSA_FALSE; 14160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Bool haveVideo = M4OSA_FALSE; 14170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sp<MetaData> meta = NULL; 14180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi int64_t Duration = 0; 14190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8* DecoderSpecific = M4OSA_NULL ; 14200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uint32_t type; 14210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi const void *data; 14220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi size_t size; 14230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi const void *codec_specific_data; 14240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi size_t codec_specific_data_size; 14250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 ptempTime; 1426dab5839386270b4ec08db02ce9f8fa87bc96ca03Basavapatna Dattaguru M4OSA_Int32 avgFPS=0; 14270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStreamHandler begin"); 14290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, 14310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_getNextStreamHandler: invalid context"); 14320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pMediaFamily == 0), M4ERR_PARAMETER, 14330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "getNextStreamHandler: invalid pointer to MediaFamily"); 14340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 14350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "getNextStreamHandler: invalid pointer to StreamHandler"); 14360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi trackCount = pC->mExtractor->countTracks(); 14380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = pC->mCurrTrack; 14390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(temp >= trackCount) { 14410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStreamHandler error = %d", 14420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WAR_NO_MORE_STREAM); 14430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (M4WAR_NO_MORE_STREAM); 14440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 14450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi const char *mime; 14460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi meta = pC->mExtractor->getTrackMetaData(temp); 14470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi CHECK(meta->findCString(kKeyMIMEType, &mime)); 14480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (!haveVideo && !strncasecmp(mime, "video/", 6)) { 14500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoSource = pC->mExtractor->getTrack(temp); 14510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoSource->start(); 14520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pMediaFamily = M4READER_kMediaFamilyVideo; 14540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi haveVideo = true; 14550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStreamHandler getTrack called"); 14560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_AVC)) { 14570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamType = M4DA_StreamTypeVideoMpeg4Avc; 14580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_H263)) { 14590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamType = M4DA_StreamTypeVideoH263; 14600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_MPEG4)) { 14610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamType = M4DA_StreamTypeVideoMpeg4; 14620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 14630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReaderGetNextStreamHandler streamTypeNONE"); 14640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 14650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStreamHandler: stream type: %d ", 14660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamType); 14670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(streamType != M4DA_StreamTypeUnknown) { 14690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mStreamType = streamType; 14700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mStreamId = pC->mCurrTrack; 14710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14722ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu pVideoStreamHandler = (M4_VideoStreamHandler*)M4OSA_32bitAlignedMalloc 14730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (sizeof(M4_VideoStreamHandler), M4READER_3GP, 14740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char*)"M4_VideoStreamHandler"); 14750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pVideoStreamHandler) { 14760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 14770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 14780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pVideoStreamHandler->m_structSize=sizeof(M4_VideoStreamHandler); 14790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi meta->findInt32(kKeyWidth, 14810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (int32_t*)&(pVideoStreamHandler->m_videoWidth)); 14820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi meta->findInt32(kKeyHeight, 14830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (int32_t*)&(pVideoStreamHandler->m_videoHeight)); 14840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler) = (M4_StreamHandler*)(pVideoStreamHandler); 14860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi meta->findInt64(kKeyDuration, 14870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (int64_t*)&(Duration)); 14880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ((*pStreamHandler)->m_duration) = 14890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (int32_t)((Duration)/1000); // conversion to mS 14900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mMaxDuration = ((*pStreamHandler)->m_duration); 14910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStreamHandler m_duration %d", 14920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_duration); 14930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1494413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury off64_t fileSize = 0; 1495413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury pC->mDataSource->getSize(&fileSize); 1496413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury pC->mFileSize = fileSize; 1497413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 1498413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury LOGV("VideoEditor3gpReader_getNextStreamHandler m_fileSize %d", 1499413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury pC->mFileSize); 15000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi meta->findInt32(kKeyMaxInputSize, (int32_t*)&(maxAUSize)); 15020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(maxAUSize == 0) { 15030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxAUSize = 70000; 15040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_maxAUSize = maxAUSize; 15060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("<<<<<<<<<< video: mMaxAUSize from MP4 extractor: %d", 15070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_maxAUSize); 15080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1509413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury ((M4_StreamHandler*)pVideoStreamHandler)->m_averageBitRate = 1510413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury (pC->mFileSize * 8000)/pC->mMaxDuration; 1511413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury LOGV("VideoEditor3gpReader_getNextStreamHandler m_averageBitrate %d", 1512413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury ((M4_StreamHandler*)pVideoStreamHandler)->m_averageBitRate); 1513413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 1514dab5839386270b4ec08db02ce9f8fa87bc96ca03Basavapatna Dattaguru 1515dab5839386270b4ec08db02ce9f8fa87bc96ca03Basavapatna Dattaguru meta->findInt32(kKeyFrameRate, 1516dab5839386270b4ec08db02ce9f8fa87bc96ca03Basavapatna Dattaguru (int32_t*)&(avgFPS)); 1517dab5839386270b4ec08db02ce9f8fa87bc96ca03Basavapatna Dattaguru LOGV("<<<<<<<<<< video: Average FPS from MP4 extractor: %d", 1518dab5839386270b4ec08db02ce9f8fa87bc96ca03Basavapatna Dattaguru avgFPS); 1519dab5839386270b4ec08db02ce9f8fa87bc96ca03Basavapatna Dattaguru 1520dab5839386270b4ec08db02ce9f8fa87bc96ca03Basavapatna Dattaguru pVideoStreamHandler->m_averageFrameRate =(M4OSA_Float) avgFPS; 1521dab5839386270b4ec08db02ce9f8fa87bc96ca03Basavapatna Dattaguru LOGV("<<<<<<<<<< video: Average FPS from MP4 extractor in FLOAT: %f", 1522dab5839386270b4ec08db02ce9f8fa87bc96ca03Basavapatna Dattaguru pVideoStreamHandler->m_averageFrameRate); 1523dab5839386270b4ec08db02ce9f8fa87bc96ca03Basavapatna Dattaguru 152416757d256453f0c765c13ca9d97ca89fc5565420Rajneesh Chowdury // Get the video rotation degree 152516757d256453f0c765c13ca9d97ca89fc5565420Rajneesh Chowdury int32_t rotationDegree; 152616757d256453f0c765c13ca9d97ca89fc5565420Rajneesh Chowdury if(!meta->findInt32(kKeyRotation, &rotationDegree)) { 152716757d256453f0c765c13ca9d97ca89fc5565420Rajneesh Chowdury rotationDegree = 0; 152816757d256453f0c765c13ca9d97ca89fc5565420Rajneesh Chowdury } 152916757d256453f0c765c13ca9d97ca89fc5565420Rajneesh Chowdury pVideoStreamHandler->videoRotationDegrees = rotationDegree; 153016757d256453f0c765c13ca9d97ca89fc5565420Rajneesh Chowdury 15310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mVideoStreamHandler = 15320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler*)(pVideoStreamHandler); 15330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Get the DSI info */ 15350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(M4DA_StreamTypeVideoH263 == streamType) { 15365fcff590d602457aa16fad5e13344b67e516bef3Danny Fernandes if (meta->findData(kKeyD263, &type, &data, &size)) { 15375fcff590d602457aa16fad5e13344b67e516bef3Danny Fernandes (*pStreamHandler)->m_decoderSpecificInfoSize = size; 15380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if ((*pStreamHandler)->m_decoderSpecificInfoSize != 0) { 15392ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu DecoderSpecific = (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc( 15400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize, 15410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_3GP,(M4OSA_Char*)"H263 DSI"); 15420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == DecoderSpecific) { 15430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 15440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15459d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)DecoderSpecific, 15469d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)data, size); 15470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = 15480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecoderSpecific; 15490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else { 15510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = 15520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_NULL; 15535fcff590d602457aa16fad5e13344b67e516bef3Danny Fernandes (*pStreamHandler)->m_decoderSpecificInfoSize = 0; 15540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15555fcff590d602457aa16fad5e13344b67e516bef3Danny Fernandes (*pStreamHandler)->m_pESDSInfo = M4OSA_NULL; 15565fcff590d602457aa16fad5e13344b67e516bef3Danny Fernandes (*pStreamHandler)->m_ESDSInfoSize = 0; 15575fcff590d602457aa16fad5e13344b67e516bef3Danny Fernandes (*pStreamHandler)->m_pH264DecoderSpecificInfo = M4OSA_NULL; 15585fcff590d602457aa16fad5e13344b67e516bef3Danny Fernandes (*pStreamHandler)->m_H264decoderSpecificInfoSize = 0; 15590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 15600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VE_getNextStreamHandler: H263 dsi not found"); 15610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = M4OSA_NULL; 15620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize = 0; 15630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_H264decoderSpecificInfoSize = 0; 15640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pH264DecoderSpecificInfo = 15650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_NULL; 15660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pESDSInfo = M4OSA_NULL; 15670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_ESDSInfoSize = 0; 15680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if(M4DA_StreamTypeVideoMpeg4Avc == streamType) { 15710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(meta->findData(kKeyAVCC, &type, &data, &size)) { 15720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi decoderSpecificInfoSize = size; 15730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (decoderSpecificInfoSize != 0) { 15742ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu DecoderSpecificInfo = (M4OSA_Int8*)M4OSA_32bitAlignedMalloc( 15750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi decoderSpecificInfoSize, M4READER_3GP, 15760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char*)"H264 DecoderSpecific" ); 15770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == DecoderSpecificInfo) { 15780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gp_getNextStream is NULL "); 15790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 15800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15819d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)DecoderSpecificInfo, 15829d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)data, decoderSpecificInfoSize); 15830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 15840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("DSI Size %d", decoderSpecificInfoSize); 15850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecoderSpecificInfo = M4OSA_NULL; 15860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pESDSInfo = M4OSA_NULL; 15890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_ESDSInfoSize = 0; 15900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = VideoEditor3gpReader_AnalyseAvcDsi(*pStreamHandler, 15920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Int32*)DecoderSpecificInfo, decoderSpecificInfoSize); 15930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4NO_ERROR != err) { 15950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 15960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("decsize %d, h264decsize %d: %d", (*pStreamHandler)->\ 15980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_decoderSpecificInfoSize, (*pStreamHandler)->\ 15990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_H264decoderSpecificInfoSize); 16000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(M4OSA_NULL != DecoderSpecificInfo) { 16022ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(DecoderSpecificInfo); 16030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecoderSpecificInfo = M4OSA_NULL; 16040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else if( (M4DA_StreamTypeVideoMpeg4 == streamType) ) { 16060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (meta->findData(kKeyESDS, &type, &data, &size)) { 16070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ESDS esds((const char *)data, size); 16080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi CHECK_EQ(esds.InitCheck(), OK); 16090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_ESDSInfoSize = size; 16110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pESDSInfo = (M4OSA_UInt8*)\ 16122ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu M4OSA_32bitAlignedMalloc((*pStreamHandler)->m_ESDSInfoSize, 161303ee95fbc29c9fe39c8eb74ee18daf7060e97bc5James Dong M4READER_3GP, (M4OSA_Char*)"M4V DecoderSpecific" ); 16140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == (*pStreamHandler)->m_pESDSInfo) { 16150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 16160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16179d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)(*pStreamHandler)->\ 16189d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu m_pESDSInfo, (void *)data, size); 16190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi esds.getCodecSpecificInfo(&codec_specific_data, 16210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &codec_specific_data_size); 16220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VE MP4 dsisize: %d, %x", codec_specific_data_size, 16230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi codec_specific_data); 16240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize = 16260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi codec_specific_data_size; 16270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if ((*pStreamHandler)->m_decoderSpecificInfoSize != 0) { 16282ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu DecoderSpecific = (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc( 16290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize, 16300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_3GP, (M4OSA_Char*)" DecoderSpecific" ); 16310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == DecoderSpecific) { 16320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 16330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16349d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)DecoderSpecific, 16359d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)codec_specific_data, 16360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi codec_specific_data_size); 16370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = 16380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecoderSpecific; 16390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else { 16410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = 16420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_NULL; 16430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pH264DecoderSpecificInfo = 16450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_NULL; 16460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_H264decoderSpecificInfoSize = 0; 16470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 16490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStream NO video stream"); 16500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_READER_UNKNOWN_STREAM_TYPE; 16510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else { 16540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStream NO video stream"); 16550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_READER_UNKNOWN_STREAM_TYPE; 16560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else if (!haveAudio && !strncasecmp(mime, "audio/", 6)) { 16590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStream audio getTrack called"); 16600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioSource = pC->mExtractor->getTrack(pC->mCurrTrack); 16610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioSource->start(); 16620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pMediaFamily = M4READER_kMediaFamilyAudio; 16630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AMR_NB)) { 16650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamType = M4DA_StreamTypeAudioAmrNarrowBand; 16660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else if(!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AMR_WB)) { 16670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamType = M4DA_StreamTypeAudioAmrWideBand; 16680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if(!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AAC)) { 16700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamType = M4DA_StreamTypeAudioAac; 16710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 16720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStrea streamtype Unknown "); 16730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(streamType != M4DA_StreamTypeUnknown) { 16750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mStreamType = streamType; 16760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mStreamId = pC->mCurrTrack; 16770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VE streamtype %d ,id %d", streamType, pC->mCurrTrack); 16790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16802ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu pAudioStreamHandler = (M4_AudioStreamHandler*)M4OSA_32bitAlignedMalloc 16810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (sizeof(M4_AudioStreamHandler), M4READER_3GP, 16820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char*)"M4_AudioStreamHandler"); 16830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pAudioStreamHandler) { 16840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 16850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAudioStreamHandler->m_structSize=sizeof(M4_AudioStreamHandler); 16870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAudioStreamHandler->m_byteSampleSize = 0; 16880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAudioStreamHandler->m_nbChannels = 0; 16890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAudioStreamHandler->m_samplingFrequency= 0; 16900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAudioStreamHandler->m_byteFrameLength = 0; 16910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler) = (M4_StreamHandler*)(pAudioStreamHandler); 16930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioStreamHandler = 16940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler*)(pAudioStreamHandler); 16950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_averageBitRate = 0; 16960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi haveAudio = true; 16970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioStreamHandler=(M4_StreamHandler*)pAudioStreamHandler; 16980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioStreamHandler->m_pESDSInfo = M4OSA_NULL; 16990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mAudioStreamHandler->m_ESDSInfoSize = 0; 17000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi meta->findInt32(kKeyMaxInputSize, (int32_t*)&(maxAUSize)); 17020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(maxAUSize == 0) { 17030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxAUSize = 70000; 17040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_maxAUSize = maxAUSize; 17060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VE Audio mMaxAUSize from MP4 extractor: %d", maxAUSize); 17070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if((M4DA_StreamTypeAudioAmrNarrowBand == streamType) || 17090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4DA_StreamTypeAudioAmrWideBand == streamType)) { 17100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 freqIndex = 0; /**< AMR NB */ 17110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 modeSet; 17120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 i; 17130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Context pBitParserContext = M4OSA_NULL; 17140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(M4DA_StreamTypeAudioAmrWideBand == streamType) { 17160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi freqIndex = 1; /**< AMR WB */ 17170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (meta->findData(kKeyESDS, &type, &data, &size)) { 17200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ESDS esds((const char *)data, size); 17210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi CHECK_EQ(esds.InitCheck(), OK); 17220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi esds.getCodecSpecificInfo(&codec_specific_data, 17240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &codec_specific_data_size); 17250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize = 17260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi codec_specific_data_size; 17270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if ((*pStreamHandler)->m_decoderSpecificInfoSize != 0) { 17292ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu DecoderSpecific = (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc( 17300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize, 173103ee95fbc29c9fe39c8eb74ee18daf7060e97bc5James Dong M4READER_3GP, (M4OSA_Char*)"AMR DecoderSpecific" ); 17320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == DecoderSpecific) { 17330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 17340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17359d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)DecoderSpecific, 17369d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)codec_specific_data, 17370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi codec_specific_data_size); 17380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = 17390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecoderSpecific; 17400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 17410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = M4OSA_NULL; 17420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 17440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UChar AmrDsi[] = 17450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi {'P','H','L','P',0x00, 0x00, 0x80, 0x00, 0x01,}; 17460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize = 9; 17472ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu DecoderSpecific = (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc( 17480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize, 174903ee95fbc29c9fe39c8eb74ee18daf7060e97bc5James Dong M4READER_3GP, (M4OSA_Char*)"PHLP DecoderSpecific" ); 17500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == DecoderSpecific) { 17510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 17520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(freqIndex ==0) { 17540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi AmrDsi[8] = 0x01; 17550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 17560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi AmrDsi[8] = 0x02; 17570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for(i = 0; i< 9; i++) { 17590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecoderSpecific[i] = AmrDsi[i]; 17600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = DecoderSpecific; 17620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_averageBitRate = 17640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_AmrBitRate[freqIndex][7]; 17650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else if((M4DA_StreamTypeAudioAac == streamType)) { 17660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (meta->findData(kKeyESDS, &type, &data, &size)) { 17670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ESDS esds((const char *)data, size); 17680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi CHECK_EQ(esds.InitCheck(), OK); 17690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_ESDSInfoSize = size; 17712ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (*pStreamHandler)->m_pESDSInfo = (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc( 17720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_ESDSInfoSize, M4READER_3GP, 177303ee95fbc29c9fe39c8eb74ee18daf7060e97bc5James Dong (M4OSA_Char*)"AAC DecoderSpecific" ); 17740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == (*pStreamHandler)->m_pESDSInfo) { 17750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 17760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17779d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)(*pStreamHandler)->m_pESDSInfo, 17789d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)data, size); 17790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi esds.getCodecSpecificInfo(&codec_specific_data, 17800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &codec_specific_data_size); 17810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VEdsi %d,%x",codec_specific_data_size, 17830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi codec_specific_data); 17840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize = 17860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi codec_specific_data_size; 17870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if ((*pStreamHandler)->m_decoderSpecificInfoSize != 0) { 17882ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu DecoderSpecific = (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc( 17890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize, 179003ee95fbc29c9fe39c8eb74ee18daf7060e97bc5James Dong M4READER_3GP, (M4OSA_Char*)"AAC DecoderSpecific" ); 17910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == DecoderSpecific) { 17920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 17930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17949d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)DecoderSpecific, 17959d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)codec_specific_data, 17960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi codec_specific_data_size); 17970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = 17980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecoderSpecific; 17990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 18000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = M4OSA_NULL; 18010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 18040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStream mStreamType: none "); 18050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_READER_UNKNOWN_STREAM_TYPE; 18060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 18080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VE noaudio-video stream:pC->mCurrTrack = %d ",pC->mCurrTrack); 18090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mCurrTrack++; //Increment current track to get the next track 18100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_READER_UNKNOWN_STREAM_TYPE; 18110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VE StreamType: %d, stremhandler %x",streamType, *pStreamHandler ); 18130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_streamType = streamType; 18140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_streamId = pC->mStreamId; 18150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pUserData = M4OSA_NULL; 18160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_structSize = sizeof(M4_StreamHandler); 18170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_bStreamIsOK = M4OSA_TRUE; 18180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi meta->findInt64(kKeyDuration, 18200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (int64_t*)&(Duration)); 18210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_duration = (int32_t)(Duration / 1000); 18230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mMaxDuration = ((*pStreamHandler)->m_duration); 18250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VE str duration duration: %d ", (*pStreamHandler)->m_duration); 18260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* In AAC case: Put the first AU in pAudioStreamHandler->m_pUserData 18280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *since decoder has to know if stream contains SBR data(Implicit sig) */ 18290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(M4DA_StreamTypeAudioAac == (*pStreamHandler)->m_streamType) { 18300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_AudioSbrUserdata* pAudioSbrUserdata; 18310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18322ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu pAudioSbrUserdata = (M4READER_AudioSbrUserdata*)M4OSA_32bitAlignedMalloc( 18330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeof(M4READER_AudioSbrUserdata),M4READER_3GP, 18340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char*)"M4READER_AudioSbrUserdata"); 18350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pAudioSbrUserdata) { 18360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4ERR_ALLOC; 18370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto Error; 18380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pStreamHandler)->m_pUserData = pAudioSbrUserdata; 18400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAudioSbrUserdata->m_bIsSbrEnabled = M4OSA_FALSE; 18410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18422ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu pAudioSbrUserdata->m_pFirstAU = (M4_AccessUnit*)M4OSA_32bitAlignedMalloc( 18430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeof(M4_AccessUnit),M4READER_3GP, (M4OSA_Char*)"1st AAC AU"); 18440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pAudioSbrUserdata->m_pFirstAU) { 18450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAudioSbrUserdata->m_pAacDecoderUserConfig = M4OSA_NULL; 18460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4ERR_ALLOC; 18470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto Error; 18480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAudioSbrUserdata->m_pAacDecoderUserConfig = (M4_AacDecoderConfig*)\ 18502ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu M4OSA_32bitAlignedMalloc(sizeof(M4_AacDecoderConfig),M4READER_3GP, 18510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char*)"m_pAacDecoderUserConfig"); 18520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pAudioSbrUserdata->m_pAacDecoderUserConfig) { 18530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4ERR_ALLOC; 18540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto Error; 18550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(M4DA_StreamTypeAudioAac == (*pStreamHandler)->m_streamType) { 18580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_AudioStreamHandler* pAudioStreamHandler = 18590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_AudioStreamHandler*)(*pStreamHandler); 18600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_AudioSbrUserdata* pUserData = (M4READER_AudioSbrUserdata*)\ 18610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pAudioStreamHandler->m_basicProperties.m_pUserData); 18620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = VideoEditor3gpReader_fillAuStruct(pC, (*pStreamHandler), 18640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_AccessUnit*)pUserData->m_pFirstAU); 18650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4NO_ERROR != err) { 18660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto Error; 18670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = VideoEditor3gpReader_getNextAu(pC, (*pStreamHandler), 18690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_AccessUnit*)pUserData->m_pFirstAU); 18700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4NO_ERROR != err) { 18710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto Error; 18720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = VideoEditor3gpReader_reset(pC, (*pStreamHandler)); 18740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4NO_ERROR != err) { 18750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto Error; 18760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->mCurrTrack++; //Increment the current track to get next track 18800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("pC->mCurrTrack = %d",pC->mCurrTrack); 18810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (!haveAudio && !haveVideo) { 18830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pMediaFamily=M4READER_kMediaFamilyUnknown; 18840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_READER_UNKNOWN_STREAM_TYPE; 18850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiError: 18870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStreamHandler end error = %d",err); 18880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 18890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 18900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_getPrevRapTime(M4OSA_Context context, 18920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_StreamHandler *pStreamHandler, M4OSA_Int32* pTime) 18930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 18940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_Context *pC = (VideoEditor3gpReader_Context*)context; 18950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 18960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi MediaBuffer *mMediaBuffer = M4OSA_NULL; 18970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi MediaSource::ReadOptions options; 18980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Time time64; 18990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi int64_t tempTime64 = 0; 19000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi status_t error; 19010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getPrevRapTime begin"); 19030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, 19050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_getPrevRapTime: invalid context"); 19060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 19070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_getPrevRapTime invalid pointer to StreamHandler"); 19080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF1((pTime == 0), M4ERR_PARAMETER, 19090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_getPrevRapTime: invalid time pointer"); 19100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (*pTime == (pStreamHandler->m_duration)) { 191125d6699c194a9719997c79dfb95bd66673825b7bSantosh Madhava *pTime -= 1; 191225d6699c194a9719997c79dfb95bd66673825b7bSantosh Madhava } 1913c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng 1914c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng time64 = (M4OSA_Time)*pTime * 1000; 19150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getPrevRapTime seek time: %ld",time64); 19170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi options.setSeekTo(time64, MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC); 19180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi error = pC->mVideoSource->read(&mMediaBuffer, &options); 19190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (error != OK) { 19200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //Can not get the previous Sync. 19210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //Must be end of stream. 192225d6699c194a9719997c79dfb95bd66673825b7bSantosh Madhava return M4WAR_NO_MORE_AU; 19230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer->meta_data()->findInt64(kKeyTime, (int64_t*)&tempTime64); 19260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getPrevRapTime read time %ld, %x", tempTime64, 19270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer); 19280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1929c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng *pTime = (M4OSA_Int32)(tempTime64 / 1000); 19300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(mMediaBuffer != M4OSA_NULL) { 19320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV(" mMediaBuffer size = %d length %d", mMediaBuffer->size(), 19330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer->range_length()); 19340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer->release(); 19350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mMediaBuffer = M4OSA_NULL; 19360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi options.clearSeekTo(); 19380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(error != OK) { 19400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getPrevRapTime end \ 19410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WAR_READER_INFORMATION_NOT_PRESENT"); 19420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4WAR_READER_INFORMATION_NOT_PRESENT; 19430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 19440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getPrevRapTime end: err %x", err); 19450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4NO_ERROR; 19460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 19470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 19490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargiextern "C" { 19510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_getInterface(M4READER_MediaType *pMediaType, 19520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_GlobalInterface **pRdrGlobalInterface, 19530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_DataInterface **pRdrDataInterface) { 19540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 19560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pMediaType, M4ERR_PARAMETER); 19580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pRdrGlobalInterface, M4ERR_PARAMETER); 19590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pRdrDataInterface, M4ERR_PARAMETER); 19600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getInterface begin"); 19620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getInterface %d 0x%x 0x%x", *pMediaType, 19630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pRdrGlobalInterface,*pRdrDataInterface); 19640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi SAFE_MALLOC(*pRdrGlobalInterface, M4READER_GlobalInterface, 1, 19660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_getInterface"); 19670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi SAFE_MALLOC(*pRdrDataInterface, M4READER_DataInterface, 1, 19680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "VideoEditor3gpReader_getInterface"); 19690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pMediaType = M4READER_kMediaType3GPP; 19710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctCreate = VideoEditor3gpReader_create; 19730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctDestroy = VideoEditor3gpReader_destroy; 19740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctOpen = VideoEditor3gpReader_open; 19750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctClose = VideoEditor3gpReader_close; 19760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctGetOption = VideoEditor3gpReader_getOption; 19770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctSetOption = VideoEditor3gpReader_setOption; 19780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctGetNextStream = 19790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_getNextStreamHandler; 19800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctFillAuStruct = 19810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_fillAuStruct; 19820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctStart = M4OSA_NULL; 19830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctStop = M4OSA_NULL; 19840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctJump = VideoEditor3gpReader_jump; 19850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctReset = VideoEditor3gpReader_reset; 19860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctGetPrevRapTime = 19870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VideoEditor3gpReader_getPrevRapTime; 19880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrDataInterface)->m_pFctGetNextAu = VideoEditor3gpReader_getNextAu; 19890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (*pRdrDataInterface)->m_readerContext = M4OSA_NULL; 19900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargicleanUp: 19920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR == err ) { 19930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getInterface no error"); 19940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } else { 19950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi SAFE_FREE(*pRdrGlobalInterface); 19960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi SAFE_FREE(*pRdrDataInterface); 19970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getInterface ERROR 0x%X", err); 19990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 20000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LOGV("VideoEditor3gpReader_getInterface end"); 20010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 20020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 20030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} /* extern "C" */ 20050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} /* namespace android */ 20070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2009