VideoEditor3gpReader.cpp revision 733100524deb5d2da77ac52a2ff89b2cde242934
17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* 27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 NXP Software 37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 43ad01762633531957174c5b27e71ca4aac45e554Santosh Madhava * 57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License. 77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at 87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and 157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License. 167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************* 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @file VideoEditor3gpReader.cpp 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief StageFright shell 3GP Reader 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************* 227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define LOG_NDEBUG 1 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define LOG_TAG "VIDEOEDITOR_3GPREADER" 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * HEADERS 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define VIDEOEDITOR_BITSTREAM_PARSER 327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h" 347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "VideoEditor3gpReader.h" 357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4SYS_AccessUnit.h" 367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "VideoEditorUtils.h" 377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4READER_3gpCom.h" 387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4_Common.h" 397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_FileWriter.h" 407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef VIDEOEDITOR_BITSTREAM_PARSER 427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_CoreID.h" 437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Error.h" 447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Memory.h" 457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4_Utils.h" 467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif 477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "ESDS.h" 497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "utils/Log.h" 507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaBufferGroup.h> 517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/DataSource.h> 527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/FileSource.h> 537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaBuffer.h> 547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaDefs.h> 557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaExtractor.h> 567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaDebug.h> 577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaSource.h> 587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MetaData.h> 597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * SOURCE CLASS 627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundarginamespace android { 647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * ENGINE INTERFACE 667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Array of AMR NB/WB bitrates 717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note Array to match the mode and the bit rate 727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiconst M4OSA_UInt32 VideoEditor3gpReader_AmrBitRate [2 /* 8kHz / 16kHz */] 757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi [9 /* the bitrate mode */] = 767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi {4750, 5150, 5900, 6700, 7400, 7950, 10200, 12200, 0}, 787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi {6600, 8850, 12650, 14250, 15850, 18250, 19850, 23050, 23850} 797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}; 807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure VideoEditor3gpReader_Context 847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief:This structure defines the context of the StageFright 3GP shell Reader 857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct { 887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sp<DataSource> mDataSource; 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sp<MediaExtractor> mExtractor; 907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sp<MediaSource> mAudioSource; 917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sp<MediaSource> mVideoSource; 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler* mAudioStreamHandler; 937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler* mVideoStreamHandler; 947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit mAudioAu; 957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit mVideoAu; 967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time mMaxDuration; 977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi int32_t mFileSize; 987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamType mStreamType; 997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 mStreamId; 1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi int32_t mTracks; 1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi int32_t mCurrTrack; 1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Bool mAudioSeeking; 1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time mAudioSeekTime; 1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Bool mVideoSeeking; 1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time mVideoSeekTime; 1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} VideoEditor3gpReader_Context; 1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef VIDEOEDITOR_BITSTREAM_PARSER 1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure VideoEditor3gpReader_BitStreamParserContext 1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Internal BitStreamParser context 1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct { 1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32* mPbitStream; /**< bitstream pointer (32bits aligned) */ 1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 mSize; /**< bitstream size in bytes */ 1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 mIndex; /**< byte index */ 1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 mBitIndex; /**< bit index */ 1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 mStructSize; /**< size of structure */ 1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} VideoEditor3gpReader_BitStreamParserContext; 1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Allocates the context and initializes internal data. 1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (OUT) Pointer to the BitStreamParser context to create. 1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param bitStream A pointer to the bitstream 1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param size The size of the bitstream in bytes 1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic void VideoEditor3gpReader_BitStreamParserInit(void** pContext, 1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi void* pBitStream, M4OSA_Int32 size) { 1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext; 1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pContext=M4OSA_NULL; 1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext = (VideoEditor3gpReader_BitStreamParserContext*)M4OSA_malloc( 1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeof(VideoEditor3gpReader_BitStreamParserContext), M4READER_3GP, 1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)"3GP BitStreamParser Context"); 1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pStreamContext) { 1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return; 1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mPbitStream=(M4OSA_UInt32*)pBitStream; 1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mSize=size; 1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mIndex=0; 1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mBitIndex=0; 1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mStructSize = 1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeof(VideoEditor3gpReader_BitStreamParserContext); 1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pContext=pStreamContext; 1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ********************************************************************** 1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Clean up context 1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) BitStreamParser context. 1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ********************************************************************** 1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic void VideoEditor3gpReader_BitStreamParserCleanUp(void* pContext) { 1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_Int32*)pContext); 1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ***************************************************************************** 1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Read the next <length> bits in the bitstream. 1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note The function does not update the bitstream pointer. 1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) BitStreamParser context. 1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param length (IN) The number of bits to extract from the bitstream 1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return the read bits 1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ***************************************************************************** 1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_UInt32 VideoEditor3gpReader_BitStreamParserShowBits(void* pContext, 1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 length) { 1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext = 1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditor3gpReader_BitStreamParserContext*)pContext; 1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 u_mask; 1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 retval; 1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 i_ovf; 1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL==pStreamContext), 0, 1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_BitStreamParserShowBits:invalid context pointer"); 1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi retval=(M4OSA_UInt32)GET_MEMORY32(pStreamContext->\ 1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mPbitStream[ pStreamContext->mIndex ]); 1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi i_ovf = pStreamContext->mBitIndex + length - 32; 1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi u_mask = (length >= 32) ? 0xffffffff: (1 << length) - 1; 1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* do we have enough bits availble in the current word(32bits)*/ 1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (i_ovf <= 0) { 1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi retval=(retval >> (- i_ovf)) & u_mask; 1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 u_nextword = (M4OSA_UInt32)GET_MEMORY32( 1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mPbitStream[ pStreamContext->mIndex + 1 ]); 1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 u_msb_mask, u_msb_value, u_lsb_mask, u_lsb_value; 1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi u_msb_mask = ((1 << (32 - pStreamContext->mBitIndex)) - 1) << i_ovf; 1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi u_msb_value = retval << i_ovf; 1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi u_lsb_mask = (1 << i_ovf) - 1; 1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi u_lsb_value = u_nextword >> (32 - i_ovf); 1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi retval= (u_msb_value & u_msb_mask ) | (u_lsb_value & u_lsb_mask); 2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* return the bits...*/ 2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return retval; 2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Increment the bitstream pointer of <length> bits. 2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) BitStreamParser context. 2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param length (IN) The number of bit to shift the bitstream 2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic void VideoEditor3gpReader_BitStreamParserFlushBits(void* pContext, 2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 length) { 2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext=( 2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext*)pContext; 2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 val; 2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pStreamContext) { 2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return; 2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi val=pStreamContext->mBitIndex + length; 2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* update the bits...*/ 2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mBitIndex += length; 2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (val - 32 >= 0) { 2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* update the bits...*/ 2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mBitIndex -= 32; 2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* update the words*/ 2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mIndex++; 2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_UInt32 VideoEditor3gpReader_BitStreamParserGetBits( 2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi void* pContext,M4OSA_Int32 bitPos, M4OSA_Int32 bitLength) { 2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext = 2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditor3gpReader_BitStreamParserContext*)pContext; 2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 bitLocation, bitIndex; 2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 retval=0; 2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL==pStreamContext), 0, 2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_BitStreamParserGetBits: invalid context pointer"); 2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* computes the word location*/ 2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi bitLocation=bitPos/32; 2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi bitIndex=(bitPos) % 32; 2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (bitLocation < pStreamContext->mSize) { 2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 u_mask; 2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 i_ovf = bitIndex + bitLength - 32; 2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi retval=(M4OSA_UInt32)GET_MEMORY32( 2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mPbitStream[ bitLocation ]); 2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi u_mask = (bitLength >= 32) ? 0xffffffff: (1 << bitLength) - 1; 2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (i_ovf <= 0) { 2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi retval=(retval >> (- i_ovf)) & u_mask; 2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 u_nextword = (M4OSA_UInt32)GET_MEMORY32( 2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mPbitStream[ bitLocation + 1 ]); 2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 u_msb_mask, u_msb_value, u_lsb_mask, u_lsb_value; 2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi u_msb_mask = ((1 << (32 - bitIndex)) - 1) << i_ovf; 2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi u_msb_value = retval << i_ovf; 2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi u_lsb_mask = (1 << i_ovf) - 1; 2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi u_lsb_value = u_nextword >> (32 - i_ovf); 2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi retval= (u_msb_value & u_msb_mask ) | (u_lsb_value & u_lsb_mask); 2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return retval; 2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic void VideoEditor3gpReader_BitStreamParserRestart(void* pContext) { 2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext = 2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditor3gpReader_BitStreamParserContext*)pContext; 2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pStreamContext) { 2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return; 2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* resets the bitstream pointers*/ 2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mIndex=0; 2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mBitIndex=0; 2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Get a pointer to the current byte pointed by the bitstream pointer. 2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note It should be used carefully as the pointer is in the bitstream itself 2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * and no copy is made. 2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) BitStreamParser context. 2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return Pointer to the current location in the bitstream 2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_UInt8* VideoEditor3gpReader_GetCurrentbitStreamPointer( 2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi void* pContext) { 2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext = 2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditor3gpReader_BitStreamParserContext*)pContext; 2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL==pStreamContext), 0, "invalid context pointer"); 2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return (M4OSA_UInt8*)((M4OSA_UInt8*)pStreamContext->mPbitStream + \ 2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mIndex * sizeof(M4OSA_UInt32) + \ 3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamContext->mBitIndex/8) ; 3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_Int32 VideoEditor3gpReader_BitStreamParserGetSize(void* pContext) { 3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserContext* pStreamContext = 3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditor3gpReader_BitStreamParserContext*)pContext; 3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL==pStreamContext), 0, "invalid context pointer"); 3077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return pStreamContext->mSize; 3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic void VideoEditor3gpReader_MPEG4BitStreamParserInit(void** pContext, 3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi void* pBitStream, M4OSA_Int32 size) { 3147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserInit(pContext, pBitStream, size); 3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_Int32 VideoEditor3gpReader_GetMpegLengthFromInteger(void* pContext, 3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 val) { 3187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 length=0; 3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 numBytes=0; 3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 b=0; 3217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL==pContext), 0, "invalid context pointer"); 3237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* the length is encoded as a sequence of bytes. The highest bit is used 3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi to indicate that the length continues on the next byte. 3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi The length can be: 0x80 0x80 0x80 0x22 3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi of just 0x22 (highest bit not set) 3297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 3317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi do { 3337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi b=(val & ((0xff)<< (8 * numBytes)))>> (8 * numBytes); 3347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi length=(length << 7) | (b & 0x7f); 3357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi numBytes++; 3367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } while ((b & 0x80) && numBytes < 4); 3377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return length; 3397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 3407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 3427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 3437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Decode an MPEG4 Systems descriptor size from an encoded SDL size data 3447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note The value is read from the current bitstream location. 3457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) BitStreamParser context. 3467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return Size in a human readable form 3477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 3487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 3497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_Int32 VideoEditor3gpReader_GetMpegLengthFromStream(void* pContext){ 3507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 length=0; 3517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 numBytes=0; 3527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 b=0; 3537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL==pContext), 0, "invalid context pointer"); 3557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* the length is encoded as a sequence of bytes. The highest bit is used 3577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi to indicate that the length continues on the next byte. 3587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi The length can be: 0x80 0x80 0x80 0x22 3607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi of just 0x22 (highest bit not set) 3617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 3627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi do { 3647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi b=VideoEditor3gpReader_BitStreamParserShowBits(pContext, 8); 3657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pContext, 8); 3667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi length=(length << 7) | (b & 0x7f); 3677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi numBytes++; 3687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } while ((b & 0x80) && numBytes < 4); 3697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return length; 3717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 3727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* VIDEOEDITOR_BITSTREAM_PARSER */ 3737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 3747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************ 3757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief create an instance of the 3gp reader 3767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note allocates the context 3777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 3787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (OUT) pointer on a reader context 3797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 3807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 3817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC a memory allocation has failed 3827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not valid 3837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************ 3847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 3857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_create(M4OSA_Context *pContext) { 3877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_Context* pC = NULL; 3887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 3897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pContext , M4ERR_PARAMETER); 3907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_create begin"); 3927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Context allocation & initialization */ 3947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_MALLOC(pC, VideoEditor3gpReader_Context, 1, "VideoEditor3gpReader"); 3957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi memset(pC, sizeof(VideoEditor3gpReader_Context), 0); 3977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioStreamHandler = M4OSA_NULL; 3997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioAu.dataAddress = M4OSA_NULL; 4007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoStreamHandler = M4OSA_NULL; 4017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoAu.dataAddress = M4OSA_NULL; 4027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioSeeking = M4OSA_FALSE; 4047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioSeekTime = 0; 4057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoSeeking = M4OSA_FALSE; 4077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoSeekTime = 0; 4087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_INT64_FROM_INT32(pC->mMaxDuration, 0); 4107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pContext=pC; 4117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargicleanUp: 4137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ( M4NO_ERROR == err ) { 4147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_create no error"); 4157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 4167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_create ERROR 0x%X", err); 4177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_create end "); 4197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 4217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 4237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************** 4247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief destroy the instance of the 3gp reader 4257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @note after this call the context is invalid 4267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param context: (IN) Context of the reader 4277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4NO_ERROR there is no error 4287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_PARAMETER pContext parameter is not properly set 4297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************** 4307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 4317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_destroy(M4OSA_Context pContext) { 4337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 4347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_Context* pC = M4OSA_NULL; 4357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_destroy begin"); 4377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pContext, M4ERR_PARAMETER); 4397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC = (VideoEditor3gpReader_Context*)pContext; 4407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_FREE(pC->mAudioAu.dataAddress); 4427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioAu.dataAddress = M4OSA_NULL; 4437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_FREE(pC->mVideoAu.dataAddress); 4447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoAu.dataAddress = M4OSA_NULL; 4457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_FREE(pC); 4467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pContext = M4OSA_NULL; 4477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargicleanUp: 4497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( M4NO_ERROR == err ) { 4507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_destroy no error"); 4517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 4537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_destroy ERROR 0x%X", err); 4557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_destroy end "); 4587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 4607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 4627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************ 4637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief open the reader and initializes its created instance 4647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @note this function open the media file 4657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param context: (IN) Context of the reader 4667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pFileDescriptor: (IN) Pointer to proprietary data identifying 4677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* the media to open 4687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4NO_ERROR there is no error 4697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_PARAMETER the context is NULL 4707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************ 4717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 4727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_open(M4OSA_Context pContext, 4747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Void* pFileDescriptor) { 4757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_Context* pC = (VideoEditor3gpReader_Context*)pContext; 4767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 4777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_open start "); 4797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, 4807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_open: invalid context pointer"); 4817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pFileDescriptor), M4ERR_PARAMETER, 4827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_open: invalid pointer pFileDescriptor"); 4837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_open Datasource start %s", 4857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (char*)pFileDescriptor); 4863ad01762633531957174c5b27e71ca4aac45e554Santosh Madhava //pC->mDataSource = DataSource::CreateFromURI((char*)pFileDescriptor); 4873ad01762633531957174c5b27e71ca4aac45e554Santosh Madhava pC->mDataSource = new FileSource ((char*)pFileDescriptor); 4887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->mDataSource == NULL) { 4907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_open Datasource error"); 4917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 4927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mExtractor = MediaExtractor::Create(pC->mDataSource, 4957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi MEDIA_MIMETYPE_CONTAINER_MPEG4); 4967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->mExtractor == NULL) { 4987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_open extractor error"); 4997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 5007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_open end "); 5037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 5047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 5057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 5077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************ 5087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief close the reader 5097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @note close the 3GP file 5107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param context: (IN) Context of the reader 5117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4NO_ERROR there is no error 5127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_PARAMETER the context is NULL 5137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_BAD_CONTEXT provided context is not a valid one 5147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************ 5157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 5167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_close(M4OSA_Context context) { 5177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_Context *pC = (VideoEditor3gpReader_Context*)context; 5187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AudioSbrUserdata *pAudioSbrUserData; 5197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_AccessUnit *pAU; 5207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 5217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_close begin"); 5237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, 5257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_close: invalid context pointer"); 5267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->mAudioStreamHandler) { 5287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_close Audio"); 5297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->mAudioStreamHandler->m_pDecoderSpecificInfo) { 5317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pC->mAudioStreamHandler->\ 5327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_pDecoderSpecificInfo); 5337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioStreamHandler->m_decoderSpecificInfoSize = 0; 5347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioStreamHandler->m_pDecoderSpecificInfo = M4OSA_NULL; 5357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((M4DA_StreamTypeAudioAac == pC->mAudioStreamHandler->m_streamType) 5387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && (M4OSA_NULL != pC->mAudioStreamHandler->m_pUserData)) { 5397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioSbrUserData = (M4READER_AudioSbrUserdata*)(\ 5407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioStreamHandler->m_pUserData); 5417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAU = (M4_AccessUnit*)pAudioSbrUserData->m_pFirstAU; 5437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pAU) { 5447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pAU); 5457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pAudioSbrUserData->m_pAacDecoderUserConfig) { 5487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pAudioSbrUserData->\ 5497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_pAacDecoderUserConfig); 5507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pAudioSbrUserData); 5527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioStreamHandler->m_pUserData = M4OSA_NULL; 5537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->mAudioStreamHandler->m_pESDSInfo != M4OSA_NULL) { 5567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pC->mAudioStreamHandler->m_pESDSInfo); 5577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioStreamHandler->m_pESDSInfo = M4OSA_NULL; 5587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioStreamHandler->m_ESDSInfoSize = 0; 5597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Finally destroy the stream handler */ 5617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pC->mAudioStreamHandler); 5627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioStreamHandler = M4OSA_NULL; 5637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioSource->stop(); 5657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioSource.clear(); 5667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->mVideoStreamHandler) { 5687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_close Video "); 5697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != pC->mVideoStreamHandler->m_pDecoderSpecificInfo) { 5717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pC->mVideoStreamHandler->\ 5727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_pDecoderSpecificInfo); 5737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoStreamHandler->m_decoderSpecificInfoSize = 0; 5747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoStreamHandler->m_pDecoderSpecificInfo = M4OSA_NULL; 5757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != pC->mVideoStreamHandler->m_pH264DecoderSpecificInfo) { 5787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pC->mVideoStreamHandler->\ 5797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_pH264DecoderSpecificInfo); 5807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoStreamHandler->m_H264decoderSpecificInfoSize = 0; 5817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoStreamHandler->m_pH264DecoderSpecificInfo = M4OSA_NULL; 5827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->mVideoStreamHandler->m_pESDSInfo != M4OSA_NULL) { 5857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pC->mVideoStreamHandler->m_pESDSInfo); 5867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoStreamHandler->m_pESDSInfo = M4OSA_NULL; 5877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoStreamHandler->m_ESDSInfoSize = 0; 5887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Finally destroy the stream handler */ 5917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pC->mVideoStreamHandler); 5927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoStreamHandler = M4OSA_NULL; 5937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoSource->stop(); 5957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoSource.clear(); 5967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5973ad01762633531957174c5b27e71ca4aac45e554Santosh Madhava pC->mExtractor.clear(); 5987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mDataSource.clear(); 5997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_close end"); 6017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 6027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 6037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 6057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************ 6067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief get an option from the 3gp reader 6077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @note it allows the caller to retrieve a property value: 6087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* 6097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param context: (IN) Context of the reader 6107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param optionId: (IN) indicates the option to get 6117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pValue: (OUT) pointer to structure or value (allocated 6127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* by user) where option is stored 6137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* 6147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4NO_ERROR there is no error 6157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_BAD_CONTEXT provided context is not a valid one 6167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_PARAMETER at least one parameter is not properly set 6177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_BAD_OPTION_ID when the option ID is not a valid one 6187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_VIDEO_NOT_H263 No video stream H263 in file. 6197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_NO_VIDEO_STREAM_RETRIEVED_YET 6207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* Function 3gpReader_getNextStreamHandler must be called before 6217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************ 6227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 6237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_getOption(M4OSA_Context context, 6247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_OptionID optionId, M4OSA_DataOption pValue) { 6257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_Context* pC = (VideoEditor3gpReader_Context*)context; 6267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 6277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption begin %d", optionId); 6297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, 6317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "invalid context pointer"); 6327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pValue), M4ERR_PARAMETER, 6337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_getOption: invalid pointer on value"); 6347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (optionId) { 6367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_Duration: 6377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption duration %d",pC->mMaxDuration); 6397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TIME_SET(*(M4OSA_Time*)pValue, pC->mMaxDuration); 6407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_Version: 6437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* not used */ 6447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption: M4READER_kOptionID_Version"); 6457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_Copyright: 6487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* not used */ 6497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV(">>>>>>> M4READER_kOptionID_Copyright"); 6507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_CreationTime: 6537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* not used */ 6547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption M4READER_kOptionID_CreationTime"); 6557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_Bitrate: 6587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32* pBitrate = (M4OSA_UInt32*)pValue; 6607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->mMaxDuration != 0) { 6627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 ui32Tmp = (M4OSA_UInt32)pC->mMaxDuration; 6637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pBitrate = (M4OSA_UInt32)((M4OSA_Double)pC->mFileSize * \ 6647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8000.0 / (M4OSA_Double)ui32Tmp); 6657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("3gpReader_getOption bitrate: %d", *pBitrate); 6667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pBitrate = 384000; //check 6687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption bitrate %ld", *pBitrate); 6697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_3GP_kOptionID_H263Properties: 6727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#if 0 6747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL == pC->mVideoStreamHandler) { 6757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption no videoStream retrieved"); 6767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_NO_VIDEO_STREAM_RETRIEVED_YET; 6787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((M4DA_StreamTypeVideoH263 != pC->mVideoStreamHandler->\ 6817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mStreamType) || (pC->mVideoStreamHandler->\ 6827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_decoderSpecificInfoSize < 7)) { 6837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption DSI Size %d", 6847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoStreamHandler->m_decoderSpecificInfoSize); 6857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_VIDEO_NOT_H263; 6877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* MAGICAL in the decoder confi H263: the 7th byte is the profile 6917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * number, 6th byte is the level number */ 6927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4READER_3GP_H263Properties *)pValue)->uiProfile = 6937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoStreamHandler->m_pDecoderSpecificInfo[6]; 6947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4READER_3GP_H263Properties *)pValue)->uiLevel = 6957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoStreamHandler->m_pDecoderSpecificInfo[5]; 6967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif 6977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption M4READER_3GP_kOptionID_\ 6987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi H263Properties end"); 6997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_3GP_kOptionID_PurpleLabsDrm: 7027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReaderOption M4READER_3GP_kOptionID_PurpleLabsDrm"); 7037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* not used */ 7047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_GetNumberOfAudioAu: 7077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* not used */ 7087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReadeOption M4READER_kOptionID_GetNumberOfAudioAu"); 7097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_GetNumberOfVideoAu: 7127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* not used */ 7137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption :GetNumberOfVideoAu"); 7147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_GetMetadata: 7177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* not used */ 7187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption M4READER_kOptionID_GetMetadata"); 7197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_3gpFtypBox: 7227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* used only for SEMC */ 7237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption M4READER_kOptionID_3gpFtypBox"); 7247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_BAD_OPTION_ID; //check this 7257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef OPTIONID_GET_NEXT_VIDEO_CTS 7287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_3GP_kOptionID_getNextVideoCTS: 7297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* not used */ 7307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption: getNextVideoCTS"); 7317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif 7337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 7347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_BAD_OPTION_ID; 7367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption M4ERR_BAD_OPTION_ID"); 7377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getOption end: optionID: x%x", optionId); 7417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 7427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 7437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 7447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************ 7457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief set an option on the 3gp reader 7467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @note No option can be set yet. 7477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param context: (IN) Context of the reader 7487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param optionId: (IN) indicates the option to set 7497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pValue: (IN) pointer to structure or value (allocated 7507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* by user) where option is stored 7517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4NO_ERROR there is no error 7527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_BAD_CONTEXT provided context is not a valid one 7537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_PARAMETER at least one parameter is not properly set 7547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_BAD_OPTION_ID when the option ID is not a valid one 7557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************ 7567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 7577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_setOption(M4OSA_Context context, 7587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_OptionID optionId, M4OSA_DataOption pValue) { 7597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_Context* pC = (VideoEditor3gpReader_Context*)context; 7607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 7617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Check function parameters */ 7637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, 7647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "invalid context pointer"); 7657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pValue), M4ERR_PARAMETER, 7667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "invalid value pointer"); 7677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_setOption begin %d",optionId); 7697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(optionId) { 7717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_SetOsaFileReaderFctsPtr: 7727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_3GP_kOptionID_AudioOnly: 7757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_3GP_kOptionID_VideoOnly: 7787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_3GP_kOptionID_FastOpenMode: 7817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_MaxMetadataSize: 7847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 7877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_setOption: returns M4ERR_BAD_OPTION_ID"); 7897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_BAD_OPTION_ID; 7907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_setOption end "); 7947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 7957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 7967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 7977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 7987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief fill the access unit structure with initialization values 7997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 8007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler: (IN) pointer to the stream handler to which 8017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the access unit will be associated 8027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pAccessUnit: (IN/OUT) pointer to the access unit (allocated 8037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * by the caller) to initialize 8047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 8057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 8067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 8077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 8087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_fillAuStruct(M4OSA_Context context, 8097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler *pStreamHandler, M4_AccessUnit *pAccessUnit) { 8107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_Context* pC = (VideoEditor3gpReader_Context*)context; 8117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err= M4NO_ERROR; 8127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, 8147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_fillAuStruct: invalid context"); 8157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 8167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_fillAuStruc invalid pointer to M4_StreamHandler"); 8177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pAccessUnit == 0), M4ERR_PARAMETER, 8187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_fillAuStruct: invalid pointer to M4_AccessUnit"); 8197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_fillAuStruct begin"); 8217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Initialize pAccessUnit structure */ 8237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_size = 0; 8247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_CTS = 0; 8257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_DTS = 0; 8267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_attribute = 0; 8277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_dataAddress = M4OSA_NULL; 8287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_maxsize = pStreamHandler->m_maxAUSize; 8297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_streamID = pStreamHandler->m_streamId; 8307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_structSize = sizeof(M4_AccessUnit); 8317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_fillAuStruct end"); 8337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 8347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 8357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 8377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi******************************************************************************** 8387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief jump into the stream at the specified time 8397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @note 8407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param context: (IN) Context of the reader 8417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pStreamHandler (IN) the stream handler of the stream to make jump 8427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pTime (I/O)IN the time to jump to (in ms) 8437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* OUT the time to which the stream really jumped 8447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4NO_ERROR there is no error 8457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_PARAMETER at least one parameter is not properly set 8467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi******************************************************************************** 8477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 8487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_jump(M4OSA_Context context, 8497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler *pStreamHandler, M4OSA_Int32* pTime) { 8507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_Context* pC = (VideoEditor3gpReader_Context*)context; 8517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 8527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pAu; 8537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time time64; 8547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Double timeDouble; 8557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, 8577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_jump: invalid context"); 8587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 8597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_jump: invalid pointer to M4_StreamHandler"); 8607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pTime == 0), M4ERR_PARAMETER, 8617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_jump: invalid time pointer"); 8627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump begin"); 8647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (*pTime == (pStreamHandler->m_duration)) { 86613ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru *pTime -= 1; 86713ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru } 8687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_INT64_FROM_INT32(time64, *pTime); 8697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump time us %ld ", time64); 8717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((pC->mAudioStreamHandler != M4OSA_NULL) && 8737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pStreamHandler->m_streamId == pC->mAudioStreamHandler->m_streamId)) 8747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pC->mAudioAu; 8767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->CTS = time64; 8777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->DTS = time64; 8787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi time64 = time64 * 1000; /* Convert the time into micro sec */ 8807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioSeeking = M4OSA_TRUE; 8817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioSeekTime = time64; 8827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump AUDIO time us %ld ", time64); 8837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else if ((pC->mVideoStreamHandler != M4OSA_NULL) && 8847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pStreamHandler->m_streamId == pC->mVideoStreamHandler->m_streamId)) 8857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pC->mVideoAu; 8877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->CTS = time64; 8887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->DTS = time64; 8897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi time64 = time64 * 1000; /* Convert the time into micro sec */ 8917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoSeeking = M4OSA_TRUE; 8927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoSeekTime = time64; 8937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump VIDEO time us %ld ", time64); 8947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 8957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump passed StreamHandler is not known\n"); 8967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 8977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi time64 = time64 / 1000; /* Convert the time into milli sec */ 8997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump time ms before seekset %ld ", time64); 9007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_INT64_TO_DOUBLE(timeDouble, time64); 9027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pTime = (M4OSA_Int32)timeDouble; 9037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_jump end"); 9057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4NO_ERROR; 9067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 9077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 9087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 9097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi******************************************************************************** 9107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief reset the stream, that is seek it to beginning and make it ready 9117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @note 9127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param context: (IN) Context of the reader 9137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pStreamHandler (IN) The stream handler of the stream to reset 9147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4NO_ERROR there is no error 9157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_PARAMETER at least one parameter is not properly set 9167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi******************************************************************************** 9177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 9187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_reset(M4OSA_Context context, 9197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler *pStreamHandler) { 9207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_Context* pC = (VideoEditor3gpReader_Context*)context; 9217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 9227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamID streamIdArray[2]; 9237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pAu; 9247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time time64; 9257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, 9277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_reset: invalid context"); 9287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 9297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_reset: invalid pointer to M4_StreamHandler"); 9307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_INT64_FROM_INT32(time64, 0); 9327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_reset begin"); 9347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pStreamHandler == (M4_StreamHandler*)pC->mAudioStreamHandler) { 9367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pC->mAudioAu; 9377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else if (pStreamHandler == (M4_StreamHandler*)pC->mVideoStreamHandler) { 9387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pC->mVideoAu; 9397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 9407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_reset passed StreamHandler is not known\n"); 9417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 9427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->CTS = time64; 9457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->DTS = time64; 9467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_reset end"); 9487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 9497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 9507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 9527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi******************************************************************************** 9537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief Gets an access unit (AU) from the stream handler source. 9547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @note An AU is the smallest possible amount of data to be decoded by decoder 9557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* 9567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param context: (IN) Context of the reader 9577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pStreamHandler (IN) The stream handler of the stream to make jump 9587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pAccessUnit (IO) Pointer to access unit to fill with read data 9597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4NO_ERROR there is no error 9607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_PARAMETER at least one parameter is not properly set 9617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @returns M4ERR_ALLOC memory allocation failed 9627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @returns M4WAR_NO_MORE_AU there are no more access unit in the stream 9637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi******************************************************************************** 9647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 9657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_getNextAu(M4OSA_Context context, 9667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler *pStreamHandler, M4_AccessUnit *pAccessUnit) { 9677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_Context* pC=(VideoEditor3gpReader_Context*)context; 9687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 9697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pAu; 9707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi int64_t tempTime64 = 0; 9717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi MediaBuffer *mMediaBuffer = NULL; 9727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi MediaSource::ReadOptions options; 9737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Bool flag = M4OSA_FALSE; 9747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi status_t error; 97513ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru int32_t i32Tmp = 0; 9767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pReaderContext == 0), M4ERR_PARAMETER, 9787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_getNextAu: invalid context"); 9797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 9807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_getNextAu: invalid pointer to M4_StreamHandler"); 9817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pAccessUnit == 0), M4ERR_PARAMETER, 9827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_getNextAu: invalid pointer to M4_AccessUnit"); 9837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu begin"); 9857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pStreamHandler == (M4_StreamHandler*)pC->mAudioStreamHandler) { 9877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu audio stream"); 9887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pC->mAudioAu; 9897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->mAudioSeeking == M4OSA_TRUE) { 9907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu audio seek time: %ld", 9917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioSeekTime); 9927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi options.setSeekTo(pC->mAudioSeekTime); 9937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioSource->read(&mMediaBuffer, &options); 9947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer->meta_data()->findInt64(kKeyTime, 9967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (int64_t*)&tempTime64); 9977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi options.clearSeekTo(); 9987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioSeeking = M4OSA_FALSE; 9997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi flag = M4OSA_TRUE; 10007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 10017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu audio no seek:"); 10027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioSource->read(&mMediaBuffer, &options); 10037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (mMediaBuffer != NULL) { 10047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer->meta_data()->findInt64(kKeyTime, 10057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (int64_t*)&tempTime64); 10067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else if (pStreamHandler == (M4_StreamHandler*)pC->mVideoStreamHandler) { 10097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu video steram "); 10107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pC->mVideoAu; 10117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->mVideoSeeking == M4OSA_TRUE) { 10127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi flag = M4OSA_TRUE; 10137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu seek: %ld",pC->mVideoSeekTime); 10147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi options.setSeekTo(pC->mVideoSeekTime, 10157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC); 10167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi do 10177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (mMediaBuffer != NULL) { 10197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu free the MediaBuffer"); 10207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer->release(); 10217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi error = pC->mVideoSource->read(&mMediaBuffer, &options); 10237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VE3gpReader_getNextAu MediaBuffer %x , error %d", 10247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer, error); 10257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (mMediaBuffer != NULL) 10267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 102713ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru if (mMediaBuffer->meta_data()->findInt32(kKeyIsSyncFrame, 102813ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru &i32Tmp) && i32Tmp) { 102913ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru LOGV("SYNC FRAME FOUND--%d", i32Tmp); 103013ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru pAu->attribute = AU_RAP; 103113ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru } 1032733100524deb5d2da77ac52a2ff89b2cde242934Dheeraj Sharma else { 1033733100524deb5d2da77ac52a2ff89b2cde242934Dheeraj Sharma pAu->attribute = AU_P_Frame; 1034733100524deb5d2da77ac52a2ff89b2cde242934Dheeraj Sharma } 10357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer->meta_data()->findInt64(kKeyTime, 10367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (int64_t*)&tempTime64); 10377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 10387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 10397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi options.clearSeekTo(); 10417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } while(tempTime64 < pC->mVideoSeekTime); 10427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VE3gpReader_getNextAu: video time with seek = %lld:", 10447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempTime64); 10457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoSeeking = M4OSA_FALSE; 10467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 10477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu video no seek:"); 10487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoSource->read(&mMediaBuffer, &options); 10497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(mMediaBuffer != NULL) { 105113ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru if (mMediaBuffer->meta_data()->findInt32(kKeyIsSyncFrame, 105213ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru &i32Tmp) && i32Tmp) { 105313ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru LOGV("SYNC FRAME FOUND--%d", i32Tmp); 105413ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru pAu->attribute = AU_RAP; 105513ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru } 1056733100524deb5d2da77ac52a2ff89b2cde242934Dheeraj Sharma else { 1057733100524deb5d2da77ac52a2ff89b2cde242934Dheeraj Sharma pAu->attribute = AU_P_Frame; 1058733100524deb5d2da77ac52a2ff89b2cde242934Dheeraj Sharma } 10597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer->meta_data()->findInt64(kKeyTime, 10607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (int64_t*)&tempTime64); 10617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VE3gpReader_getNextAu: video no seek time = %lld:", 10627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempTime64); 10637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi }else { 10647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VE3gpReader_getNextAu:video no seek time buffer is NULL"); 10657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 10687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu M4ERR_PARAMETER"); 10697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 10707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (mMediaBuffer != NULL) { 10737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( (pAu->dataAddress == NULL) || (pAu->size < \ 10747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer->range_length())) { 10757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pAu->dataAddress != NULL) { 10767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_Int32*)pAu->dataAddress); 10777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->dataAddress = NULL; 10787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("Buffer lenght = %d ,%d",(mMediaBuffer->range_length() +\ 10807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3) & ~0x3,(mMediaBuffer->range_length())); 10817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->dataAddress = (M4OSA_Int32*)M4OSA_malloc( 10837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (mMediaBuffer->range_length() + 3) & ~0x3,M4READER_3GP, 10847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)"pAccessUnit->m_dataAddress" ); 10857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pAu->dataAddress == NULL) { 10867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu malloc failed"); 10877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 10887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->size = mMediaBuffer->range_length(); 10917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi memcpy((M4OSA_MemAddr8)pAu->dataAddress, 10937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (const char *)mMediaBuffer->data() + mMediaBuffer->range_offset(), 10947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer->range_length()); 10957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( (pStreamHandler == (M4_StreamHandler*)pC->mVideoStreamHandler) && 10977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pStreamHandler->m_streamType == M4DA_StreamTypeVideoMpeg4Avc) ) { 10987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 size = mMediaBuffer->range_length(); 10997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 *lbuffer; 11007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi lbuffer = (M4OSA_UInt8 *) pAu->dataAddress; 11027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("pAccessUnit->m_dataAddress size = %x",size); 11037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi lbuffer[0] = (size >> 24) & 0xFF; 11057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi lbuffer[1] = (size >> 16) & 0xFF; 11067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi lbuffer[2] = (size >> 8) & 0xFF; 11077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi lbuffer[3] = (size) & 0xFF; 11087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->CTS = tempTime64; 11117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->CTS = pAu->CTS / 1000; //converting the microsec to millisec 11137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu CTS = %ld",pAu->CTS); 11147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->DTS = pAu->CTS; 111613ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru if (pStreamHandler == (M4_StreamHandler*)pC->mAudioStreamHandler) { 111713ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru pAu->attribute = M4SYS_kFragAttrOk; 111813ecfb62545e521f807239864dc74ca1c295e3faBasavapatna Dattaguru } 11197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer->release(); 11207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_dataAddress = (M4OSA_Int8*) pAu->dataAddress; 11227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_size = pAu->size; 11237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_maxsize = pAu->size; 11247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_CTS = pAu->CTS; 11257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_DTS = pAu->DTS; 11267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_attribute = pAu->attribute; 11277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 11297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu: M4WAR_NO_MORE_AU (EOS) reached"); 11307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_size = 0; 11317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4WAR_NO_MORE_AU; 11327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi options.clearSeekTo(); 11347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->nbFrag = 0; 11367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer = NULL; 11377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextAu end "); 11387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 11407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 11417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 11427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 11437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Split the AVC DSI in its different components and write it in 11447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * ONE memory buffer 11457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 11467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler: (IN/OUT) The MPEG4-AVC stream 11477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pDecoderConfigLocal: (IN) The DSI buffer 11487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param decoderConfigSizeLocal: (IN) The DSI buffer size 11497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 11507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return ERR_FILE_SYNTAX_ERROR pDecoderConfigLocal is NULL 11517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 11527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 11537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR VideoEditor3gpReader_AnalyseAvcDsi( 11547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler *pStreamHandler, M4OSA_Int32* pDecoderConfigLocal, 11557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 decoderConfigSizeLocal) { 11567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi struct _avcSpecificInfo *pAvcSpecInfo = M4OSA_NULL; 11577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiSpecInfoSize; 11587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Context pBitParserContext = M4OSA_NULL; 11597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_MemAddr8 pPos; 11607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 11627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * First parsing to get the total allocation size (we must not do 11637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * multiple malloc, but only one instead) */ 11647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 11657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 val; 11667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i,j; 11677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 nalUnitLength; 11687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 numOfSequenceParameterSets; 11697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiTotalSizeOfSPS = 0; 11707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 numOfPictureParameterSets; 11717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiTotalSizeOfPPS = 0; 11727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiSize; 11737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi struct _avcSpecificInfo avcSpIf; 11747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi avcSpIf.m_nalUnitLength = 0; 11767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pDecoderConfigLocal) { 11787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_READER3GP_DECODER_CONFIG_ERROR; 11797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_MPEG4BitStreamParserInit(&pBitParserContext, 11827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDecoderConfigLocal, decoderConfigSizeLocal); 11837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pBitParserContext) { 11857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 11867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 11897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 8 bits -- configuration version */ 11907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 11917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 8 bits -- avc profile indication*/ 11927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 11937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 8 bits -- profile compatibility */ 11947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 11957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 8 bits -- avc level indication*/ 11967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi val=VideoEditor3gpReader_BitStreamParserShowBits(pBitParserContext, 8); 11977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 6 bits reserved 111111b 2 bits length Size minus one*/ 11987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 11997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* m_nalUnitLength */ 12007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi nalUnitLength = (M4OSA_UInt8)((val & 0x03) + 1);/*0b11111100*/ 12027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (nalUnitLength > 4) { 12037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_decoderSpecificInfoSize = 0; 12047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_pDecoderSpecificInfo = M4OSA_NULL; 12057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserCleanUp(pBitParserContext); 12067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 12077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * SPS table */ 12097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi val=VideoEditor3gpReader_BitStreamParserShowBits(pBitParserContext, 12107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8);/* 3 bits-reserved 111b-5 bits number of sequence parameter set*/ 12117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi numOfSequenceParameterSets = val & 0x1F; 12127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*1F instead of E0*/ /*0b11100000*/ /*Number of seq parameter sets*/ 12137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 12147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i=0; i < numOfSequenceParameterSets; i++) { 12157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Get the size of this element */ 12177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi uiSize = 12187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)VideoEditor3gpReader_BitStreamParserShowBits( 12197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitParserContext, 16); 12207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi uiTotalSizeOfSPS += uiSize; 12217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits( 12227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitParserContext, 16); 12237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *Read the element(dont keep it, we only want size right now) */ 12257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (j=0; j<uiSize; j++) { 12267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits( 12277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitParserContext, 8); 12287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * SPS table */ 12337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi numOfPictureParameterSets=(M4OSA_UInt8)\ 12347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserShowBits(pBitParserContext, 12357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8); 12367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 12377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i=0; i < numOfPictureParameterSets; i++) { 12387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Get the size of this element */ 12407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi uiSize = (M4OSA_UInt32) 12417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserShowBits( 12427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitParserContext, 16); 12437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi uiTotalSizeOfPPS += uiSize; 12447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits( 12457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitParserContext, 16); 12467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *Read the element(dont keep it,we only want size right now)*/ 12487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (j=0; j<uiSize; j++) { 12497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits( 12507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitParserContext, 8); 12517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Compute the size of the full buffer */ 12567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi uiSpecInfoSize = sizeof(struct _avcSpecificInfo) + 12577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi numOfSequenceParameterSets * sizeof(struct _parameterSet) 12587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi + /**< size of the table of SPS elements */ 12597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi numOfPictureParameterSets * sizeof(struct _parameterSet) 12607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi + /**< size of the table of PPS elements */ 12617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi uiTotalSizeOfSPS + 12627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi uiTotalSizeOfPPS; 12637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Allocate the buffer */ 12657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAvcSpecInfo =(struct _avcSpecificInfo*)M4OSA_malloc(uiSpecInfoSize, 12667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_3GP, (M4OSA_Char*)"MPEG-4 AVC DecoderSpecific"); 12677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pAvcSpecInfo) { 12687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserCleanUp(pBitParserContext); 12697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 12707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set the pointers to the correct part of the buffer */ 12747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAvcSpecInfo->m_nalUnitLength = nalUnitLength; 12757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAvcSpecInfo->m_numOfSequenceParameterSets = 12767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi numOfSequenceParameterSets; 12777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAvcSpecInfo->m_numOfPictureParameterSets = 12787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi numOfPictureParameterSets; 12797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* We place the SPS param sets table after m_pPictureParameterSet */ 12817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAvcSpecInfo->m_pSequenceParameterSet= (struct _parameterSet*)( 12827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_MemAddr8)(&pAvcSpecInfo->m_pPictureParameterSet) + 12837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeof(pAvcSpecInfo->m_pPictureParameterSet)); 12847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*We place the PPS param sets table after the SPS param sets table*/ 12857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAvcSpecInfo->m_pPictureParameterSet = (struct _parameterSet*)( 12867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_MemAddr8)(pAvcSpecInfo->m_pSequenceParameterSet) + 12877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (numOfSequenceParameterSets * sizeof(struct _parameterSet))); 12887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< The data will be placed after the PPS param sets table */ 12897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pPos = (M4OSA_MemAddr8)pAvcSpecInfo->m_pPictureParameterSet + 12907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (numOfPictureParameterSets * sizeof(struct _parameterSet)); 12917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * reset the bit parser */ 12947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserCleanUp(pBitParserContext); 12957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Second parsing to copy the data */ 13007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pAvcSpecInfo) { 13017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 i,j; 13027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_MPEG4BitStreamParserInit(&pBitParserContext, 13047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDecoderConfigLocal, decoderConfigSizeLocal); 13057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pBitParserContext) { 13077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pAvcSpecInfo); 13087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 13097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 8 bits -- configuration version */ 13137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 8 bits -- avc profile indication*/ 13157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 8 bits -- profile compatibility */ 13177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 8 bits -- avc level indication*/ 13197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* m_nalUnitLength */ 13217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 3 bits -- reserved 111b -- 5 bits number of sequence parameter set*/ 13237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i=0; i < pAvcSpecInfo->m_numOfSequenceParameterSets; i++) { 13257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAvcSpecInfo->m_pSequenceParameterSet[i].m_length = 13267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt16)VideoEditor3gpReader_BitStreamParserShowBits( 13277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitParserContext, 16); 13287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext,16); 13297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAvcSpecInfo->m_pSequenceParameterSet[i].m_pParameterSetUnit = 13317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt8*)pPos; /**< current position in the buffer */ 13327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pPos += pAvcSpecInfo->m_pSequenceParameterSet[i].m_length; 13337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< increment the position in the buffer */ 13347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (j=0; j<pAvcSpecInfo->m_pSequenceParameterSet[i].m_length;j++){ 13357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAvcSpecInfo->m_pSequenceParameterSet[i].m_pParameterSetUnit[j]= 13367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt8)VideoEditor3gpReader_BitStreamParserShowBits( 13377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitParserContext, 8); 13387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits( 13397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitParserContext, 8); 13407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext, 8); 13447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* number of pîcture parameter set*/ 13457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i=0; i < pAvcSpecInfo->m_numOfPictureParameterSets; i++) { 13477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAvcSpecInfo->m_pPictureParameterSet[i].m_length = 13487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt16)VideoEditor3gpReader_BitStreamParserShowBits( 13497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitParserContext, 16); 13507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits(pBitParserContext,16); 13517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAvcSpecInfo->m_pPictureParameterSet[i].m_pParameterSetUnit = 13537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt8*)pPos; /**< current position in the buffer */ 13547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pPos += pAvcSpecInfo->m_pPictureParameterSet[i].m_length; 13557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< increment the position in the buffer */ 13567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (j=0; j<pAvcSpecInfo->m_pPictureParameterSet[i].m_length; j++) { 13577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAvcSpecInfo->m_pPictureParameterSet[i].m_pParameterSetUnit[j] = 13587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt8)VideoEditor3gpReader_BitStreamParserShowBits( 13597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitParserContext, 8); 13607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserFlushBits( 13617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitParserContext, 8); 13627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserCleanUp(pBitParserContext); 13657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_decoderSpecificInfoSize = uiSpecInfoSize; 13667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_pDecoderSpecificInfo = (M4OSA_UInt8*)pAvcSpecInfo; 13677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_H264decoderSpecificInfoSize = decoderConfigSizeLocal; 13697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_pH264DecoderSpecificInfo = (M4OSA_UInt8*)M4OSA_malloc( 13707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi decoderConfigSizeLocal, M4READER_3GP, 13717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)"MPEG-4 AVC DecoderSpecific"); 13727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pStreamHandler->m_pH264DecoderSpecificInfo) { 13737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi goto cleanup; 13747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_memcpy((M4OSA_MemAddr8 ) pStreamHandler->m_pH264DecoderSpecificInfo, 13777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_MemAddr8 )pDecoderConfigLocal, 13787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_H264decoderSpecificInfoSize); 13797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 13807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargicleanup: 13817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_BitStreamParserCleanUp(pBitParserContext); 13827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_READER3GP_DECODER_CONFIG_ERROR; 13837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 13847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 13857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi******************************************************************************** 13867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief Get the next stream found in the 3gp file 13877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @note 13887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param context: (IN) Context of the reader 13897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pMediaFamily: OUT) pointer to a user allocated 13907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* M4READER_MediaFamily that will be filled 13917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* with the media family of the found stream 13927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pStreamHandler:(OUT) pointer to StreamHandler that will be allocated 13937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* and filled with the found stream description 13947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4NO_ERROR there is no error 13957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_BAD_CONTEXT provided context is not a valid one 13967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4ERR_PARAMETER at least one parameter is not properly set 13977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @return M4WAR_NO_MORE_STREAM no more available stream in the media 13987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi******************************************************************************** 13997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 14007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_getNextStreamHandler(M4OSA_Context context, 14017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_MediaFamily *pMediaFamily, 14027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler **pStreamHandler) { 14037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_Context* pC=(VideoEditor3gpReader_Context*)context; 14047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 14057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamID streamIdArray[2]; 14067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamDescription streamDesc; 14077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_AudioStreamHandler* pAudioStreamHandler; 14087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_VideoStreamHandler* pVideoStreamHandler; 14097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int8 *DecoderSpecificInfo = M4OSA_NULL; 14107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 decoderSpecificInfoSize =0, maxAUSize = 0; 14117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamType streamType = M4DA_StreamTypeUnknown; 14137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 temp, i, trackCount; 14147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Bool haveAudio = M4OSA_FALSE; 14157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Bool haveVideo = M4OSA_FALSE; 14167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sp<MetaData> meta = NULL; 14177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi int64_t Duration = 0; 14187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8* DecoderSpecific = M4OSA_NULL ; 14197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi uint32_t type; 14207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi const void *data; 14217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi size_t size; 14227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi const void *codec_specific_data; 14237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi size_t codec_specific_data_size; 14247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 ptempTime; 1425d6dbc5850ca49d7c8b3bc8a6802fa7c85c5b1613Basavapatna Dattaguru M4OSA_Int32 avgFPS=0; 14267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStreamHandler begin"); 14287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, 14307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_getNextStreamHandler: invalid context"); 14317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pMediaFamily == 0), M4ERR_PARAMETER, 14327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "getNextStreamHandler: invalid pointer to MediaFamily"); 14337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 14347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "getNextStreamHandler: invalid pointer to StreamHandler"); 14357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi trackCount = pC->mExtractor->countTracks(); 14377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi temp = pC->mCurrTrack; 14387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(temp >= trackCount) { 14407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStreamHandler error = %d", 14417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WAR_NO_MORE_STREAM); 14427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return (M4WAR_NO_MORE_STREAM); 14437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 14447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi const char *mime; 14457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi meta = pC->mExtractor->getTrackMetaData(temp); 14467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi CHECK(meta->findCString(kKeyMIMEType, &mime)); 14477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (!haveVideo && !strncasecmp(mime, "video/", 6)) { 14497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoSource = pC->mExtractor->getTrack(temp); 14507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoSource->start(); 14517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pMediaFamily = M4READER_kMediaFamilyVideo; 14537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi haveVideo = true; 14547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStreamHandler getTrack called"); 14557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_AVC)) { 14567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamType = M4DA_StreamTypeVideoMpeg4Avc; 14577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_H263)) { 14587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamType = M4DA_StreamTypeVideoH263; 14597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_MPEG4)) { 14607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamType = M4DA_StreamTypeVideoMpeg4; 14617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 14627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReaderGetNextStreamHandler streamTypeNONE"); 14637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStreamHandler: stream type: %d ", 14657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamType); 14667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(streamType != M4DA_StreamTypeUnknown) { 14687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mStreamType = streamType; 14697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mStreamId = pC->mCurrTrack; 14707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVideoStreamHandler = (M4_VideoStreamHandler*)M4OSA_malloc 14727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (sizeof(M4_VideoStreamHandler), M4READER_3GP, 14737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)"M4_VideoStreamHandler"); 14747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pVideoStreamHandler) { 14757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 14767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVideoStreamHandler->m_structSize=sizeof(M4_VideoStreamHandler); 14787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi meta->findInt32(kKeyWidth, 14807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (int32_t*)&(pVideoStreamHandler->m_videoWidth)); 14817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi meta->findInt32(kKeyHeight, 14827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (int32_t*)&(pVideoStreamHandler->m_videoHeight)); 14837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler) = (M4_StreamHandler*)(pVideoStreamHandler); 14857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi meta->findInt64(kKeyDuration, 14867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (int64_t*)&(Duration)); 14877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((*pStreamHandler)->m_duration) = 14887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (int32_t)((Duration)/1000); // conversion to mS 14897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mMaxDuration = ((*pStreamHandler)->m_duration); 14907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStreamHandler m_duration %d", 14917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_duration); 14927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mFileSize = 0; 14947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi meta->findInt32(kKeyMaxInputSize, (int32_t*)&(maxAUSize)); 14967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(maxAUSize == 0) { 14977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi maxAUSize = 70000; 14987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_maxAUSize = maxAUSize; 15007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("<<<<<<<<<< video: mMaxAUSize from MP4 extractor: %d", 15017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_maxAUSize); 15027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( (M4DA_StreamTypeVideoH263 == streamType) || 15047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4DA_StreamTypeVideoMpeg4Avc == streamType)){ 15057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4_StreamHandler*)pVideoStreamHandler)->m_averageBitRate = 15067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 384000; 15077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1508d6dbc5850ca49d7c8b3bc8a6802fa7c85c5b1613Basavapatna Dattaguru 1509d6dbc5850ca49d7c8b3bc8a6802fa7c85c5b1613Basavapatna Dattaguru meta->findInt32(kKeyFrameRate, 1510d6dbc5850ca49d7c8b3bc8a6802fa7c85c5b1613Basavapatna Dattaguru (int32_t*)&(avgFPS)); 1511d6dbc5850ca49d7c8b3bc8a6802fa7c85c5b1613Basavapatna Dattaguru LOGV("<<<<<<<<<< video: Average FPS from MP4 extractor: %d", 1512d6dbc5850ca49d7c8b3bc8a6802fa7c85c5b1613Basavapatna Dattaguru avgFPS); 1513d6dbc5850ca49d7c8b3bc8a6802fa7c85c5b1613Basavapatna Dattaguru 1514d6dbc5850ca49d7c8b3bc8a6802fa7c85c5b1613Basavapatna Dattaguru pVideoStreamHandler->m_averageFrameRate =(M4OSA_Float) avgFPS; 1515d6dbc5850ca49d7c8b3bc8a6802fa7c85c5b1613Basavapatna Dattaguru LOGV("<<<<<<<<<< video: Average FPS from MP4 extractor in FLOAT: %f", 1516d6dbc5850ca49d7c8b3bc8a6802fa7c85c5b1613Basavapatna Dattaguru pVideoStreamHandler->m_averageFrameRate); 1517d6dbc5850ca49d7c8b3bc8a6802fa7c85c5b1613Basavapatna Dattaguru 15187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mVideoStreamHandler = 15197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4_StreamHandler*)(pVideoStreamHandler); 15207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Get the DSI info */ 15227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4DA_StreamTypeVideoH263 == streamType) { 15237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (meta->findData(kKeyESDS, &type, &data, &size)) { 15247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ESDS esds((const char *)data, size); 15257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi CHECK_EQ(esds.InitCheck(), OK); 15267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi esds.getCodecSpecificInfo( 15287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi &codec_specific_data, &codec_specific_data_size); 15297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize = 15307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi codec_specific_data_size; 15317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((*pStreamHandler)->m_decoderSpecificInfoSize != 0) { 15327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi DecoderSpecific = (M4OSA_UInt8*)M4OSA_malloc( 15337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize, 15347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_3GP,(M4OSA_Char*)"H263 DSI"); 15357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == DecoderSpecific) { 15367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 15377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_memcpy((M4OSA_MemAddr8)DecoderSpecific, 15397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_MemAddr8)codec_specific_data, 15407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi codec_specific_data_size); 15417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = 15427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi DecoderSpecific; 15437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else { 15457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = 15467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_NULL; 15477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 15497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VE_getNextStreamHandler: H263 dsi not found"); 15507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = M4OSA_NULL; 15517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize = 0; 15527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_H264decoderSpecificInfoSize = 0; 15537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pH264DecoderSpecificInfo = 15547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_NULL; 15557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pESDSInfo = M4OSA_NULL; 15567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_ESDSInfoSize = 0; 15577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(M4DA_StreamTypeVideoMpeg4Avc == streamType) { 15607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(meta->findData(kKeyAVCC, &type, &data, &size)) { 15617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi decoderSpecificInfoSize = size; 15627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (decoderSpecificInfoSize != 0) { 15637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi DecoderSpecificInfo = (M4OSA_Int8*)M4OSA_malloc( 15647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi decoderSpecificInfoSize, M4READER_3GP, 15657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)"H264 DecoderSpecific" ); 15667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == DecoderSpecificInfo) { 15677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gp_getNextStream is NULL "); 15687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 15697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_memcpy((M4OSA_MemAddr8)DecoderSpecificInfo, 15717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_MemAddr8)data, decoderSpecificInfoSize); 15727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 15737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("DSI Size %d", decoderSpecificInfoSize); 15747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi DecoderSpecificInfo = M4OSA_NULL; 15757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pESDSInfo = M4OSA_NULL; 15787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_ESDSInfoSize = 0; 15797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = VideoEditor3gpReader_AnalyseAvcDsi(*pStreamHandler, 15817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Int32*)DecoderSpecificInfo, decoderSpecificInfoSize); 15827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) { 15847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 15857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("decsize %d, h264decsize %d: %d", (*pStreamHandler)->\ 15877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_decoderSpecificInfoSize, (*pStreamHandler)->\ 15887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_H264decoderSpecificInfoSize); 15897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != DecoderSpecificInfo) { 15917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)DecoderSpecificInfo); 15927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi DecoderSpecificInfo = M4OSA_NULL; 15937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else if( (M4DA_StreamTypeVideoMpeg4 == streamType) ) { 15957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (meta->findData(kKeyESDS, &type, &data, &size)) { 15967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ESDS esds((const char *)data, size); 15977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi CHECK_EQ(esds.InitCheck(), OK); 15987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_ESDSInfoSize = size; 16007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pESDSInfo = (M4OSA_UInt8*)\ 16017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_malloc((*pStreamHandler)->m_ESDSInfoSize, 16027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_3GP, (M4OSA_Char*)"H263 DecoderSpecific" ); 16037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == (*pStreamHandler)->m_pESDSInfo) { 16047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 16057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_memcpy((M4OSA_MemAddr8)(*pStreamHandler)->\ 16077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_pESDSInfo, (M4OSA_MemAddr8)data, size); 16087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi esds.getCodecSpecificInfo(&codec_specific_data, 16107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi &codec_specific_data_size); 16117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VE MP4 dsisize: %d, %x", codec_specific_data_size, 16127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi codec_specific_data); 16137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize = 16157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi codec_specific_data_size; 16167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((*pStreamHandler)->m_decoderSpecificInfoSize != 0) { 16177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi DecoderSpecific = (M4OSA_UInt8*)M4OSA_malloc( 16187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize, 16197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_3GP, (M4OSA_Char*)" DecoderSpecific" ); 16207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == DecoderSpecific) { 16217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 16227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_memcpy((M4OSA_MemAddr8)DecoderSpecific, 16247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_MemAddr8)codec_specific_data, 16257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi codec_specific_data_size); 16267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = 16277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi DecoderSpecific; 16287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else { 16307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = 16317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_NULL; 16327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pH264DecoderSpecificInfo = 16347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_NULL; 16357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_H264decoderSpecificInfoSize = 0; 16367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 16387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStream NO video stream"); 16397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_READER_UNKNOWN_STREAM_TYPE; 16407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else { 16437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStream NO video stream"); 16447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_READER_UNKNOWN_STREAM_TYPE; 16457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else if (!haveAudio && !strncasecmp(mime, "audio/", 6)) { 16487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStream audio getTrack called"); 16497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioSource = pC->mExtractor->getTrack(pC->mCurrTrack); 16507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioSource->start(); 16517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pMediaFamily = M4READER_kMediaFamilyAudio; 16527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AMR_NB)) { 16547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamType = M4DA_StreamTypeAudioAmrNarrowBand; 16557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else if(!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AMR_WB)) { 16567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamType = M4DA_StreamTypeAudioAmrWideBand; 16577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AAC)) { 16597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamType = M4DA_StreamTypeAudioAac; 16607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 16617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStrea streamtype Unknown "); 16627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(streamType != M4DA_StreamTypeUnknown) { 16647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mStreamType = streamType; 16657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mStreamId = pC->mCurrTrack; 16667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VE streamtype %d ,id %d", streamType, pC->mCurrTrack); 16687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler = (M4_AudioStreamHandler*)M4OSA_malloc 16707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (sizeof(M4_AudioStreamHandler), M4READER_3GP, 16717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)"M4_AudioStreamHandler"); 16727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pAudioStreamHandler) { 16737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 16747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_structSize=sizeof(M4_AudioStreamHandler); 16767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_byteSampleSize = 0; 16777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_nbChannels = 0; 16787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_samplingFrequency= 0; 16797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_byteFrameLength = 0; 16807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler) = (M4_StreamHandler*)(pAudioStreamHandler); 16827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioStreamHandler = 16837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4_StreamHandler*)(pAudioStreamHandler); 16847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_averageBitRate = 0; 16857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi haveAudio = true; 16867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioStreamHandler=(M4_StreamHandler*)pAudioStreamHandler; 16877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioStreamHandler->m_pESDSInfo = M4OSA_NULL; 16887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mAudioStreamHandler->m_ESDSInfoSize = 0; 16897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi meta->findInt32(kKeyMaxInputSize, (int32_t*)&(maxAUSize)); 16917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(maxAUSize == 0) { 16927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi maxAUSize = 70000; 16937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_maxAUSize = maxAUSize; 16957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VE Audio mMaxAUSize from MP4 extractor: %d", maxAUSize); 16967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((M4DA_StreamTypeAudioAmrNarrowBand == streamType) || 16987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4DA_StreamTypeAudioAmrWideBand == streamType)) { 16997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 freqIndex = 0; /**< AMR NB */ 17007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 modeSet; 17017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i; 17027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Context pBitParserContext = M4OSA_NULL; 17037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4DA_StreamTypeAudioAmrWideBand == streamType) { 17057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi freqIndex = 1; /**< AMR WB */ 17067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (meta->findData(kKeyESDS, &type, &data, &size)) { 17097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ESDS esds((const char *)data, size); 17107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi CHECK_EQ(esds.InitCheck(), OK); 17117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi esds.getCodecSpecificInfo(&codec_specific_data, 17137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi &codec_specific_data_size); 17147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize = 17157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi codec_specific_data_size; 17167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((*pStreamHandler)->m_decoderSpecificInfoSize != 0) { 17187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi DecoderSpecific = (M4OSA_UInt8*)M4OSA_malloc( 17197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize, 17207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_3GP, (M4OSA_Char*)"H263 DecoderSpecific" ); 17217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == DecoderSpecific) { 17227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 17237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_memcpy((M4OSA_MemAddr8)DecoderSpecific, 17257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_MemAddr8)codec_specific_data, 17267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi codec_specific_data_size); 17277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = 17287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi DecoderSpecific; 17297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 17307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = M4OSA_NULL; 17317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 17337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UChar AmrDsi[] = 17347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi {'P','H','L','P',0x00, 0x00, 0x80, 0x00, 0x01,}; 17357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize = 9; 17367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi DecoderSpecific = (M4OSA_UInt8*)M4OSA_malloc( 17377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize, 17387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_3GP, (M4OSA_Char*)"H263 DecoderSpecific" ); 17397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == DecoderSpecific) { 17407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 17417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(freqIndex ==0) { 17437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi AmrDsi[8] = 0x01; 17447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 17457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi AmrDsi[8] = 0x02; 17467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i = 0; i< 9; i++) { 17487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi DecoderSpecific[i] = AmrDsi[i]; 17497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = DecoderSpecific; 17517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_averageBitRate = 17537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_AmrBitRate[freqIndex][7]; 17547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else if((M4DA_StreamTypeAudioAac == streamType)) { 17557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (meta->findData(kKeyESDS, &type, &data, &size)) { 17567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ESDS esds((const char *)data, size); 17577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi CHECK_EQ(esds.InitCheck(), OK); 17587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_ESDSInfoSize = size; 17607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pESDSInfo = (M4OSA_UInt8*)M4OSA_malloc( 17617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_ESDSInfoSize, M4READER_3GP, 17627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)"H263 DecoderSpecific" ); 17637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == (*pStreamHandler)->m_pESDSInfo) { 17647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 17657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_memcpy((M4OSA_MemAddr8)(*pStreamHandler)->m_pESDSInfo, 17677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_MemAddr8)data, size); 17687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi esds.getCodecSpecificInfo(&codec_specific_data, 17697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi &codec_specific_data_size); 17707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VEdsi %d,%x",codec_specific_data_size, 17727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi codec_specific_data); 17737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize = 17757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi codec_specific_data_size; 17767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((*pStreamHandler)->m_decoderSpecificInfoSize != 0) { 17777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi DecoderSpecific = (M4OSA_UInt8*)M4OSA_malloc( 17787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_decoderSpecificInfoSize, 17797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_3GP, (M4OSA_Char*)"H263 DecoderSpecific" ); 17807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == DecoderSpecific) { 17817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 17827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_memcpy((M4OSA_MemAddr8)DecoderSpecific, 17847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_MemAddr8)codec_specific_data, 17857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi codec_specific_data_size); 17867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = 17877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi DecoderSpecific; 17887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 17897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pDecoderSpecificInfo = M4OSA_NULL; 17907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 17937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStream mStreamType: none "); 17947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_READER_UNKNOWN_STREAM_TYPE; 17957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 17977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VE noaudio-video stream:pC->mCurrTrack = %d ",pC->mCurrTrack); 17987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mCurrTrack++; //Increment current track to get the next track 17997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_READER_UNKNOWN_STREAM_TYPE; 18007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VE StreamType: %d, stremhandler %x",streamType, *pStreamHandler ); 18027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_streamType = streamType; 18037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_streamId = pC->mStreamId; 18047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pUserData = M4OSA_NULL; 18057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_structSize = sizeof(M4_StreamHandler); 18067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_bStreamIsOK = M4OSA_TRUE; 18077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi meta->findInt64(kKeyDuration, 18097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (int64_t*)&(Duration)); 18107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_duration = (int32_t)(Duration / 1000); 18127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mMaxDuration = ((*pStreamHandler)->m_duration); 18147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VE str duration duration: %d ", (*pStreamHandler)->m_duration); 18157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* In AAC case: Put the first AU in pAudioStreamHandler->m_pUserData 18177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *since decoder has to know if stream contains SBR data(Implicit sig) */ 18187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4DA_StreamTypeAudioAac == (*pStreamHandler)->m_streamType) { 18197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AudioSbrUserdata* pAudioSbrUserdata; 18207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioSbrUserdata = (M4READER_AudioSbrUserdata*)M4OSA_malloc( 18227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeof(M4READER_AudioSbrUserdata),M4READER_3GP, 18237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)"M4READER_AudioSbrUserdata"); 18247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pAudioSbrUserdata) { 18257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_ALLOC; 18267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi goto Error; 18277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pStreamHandler)->m_pUserData = pAudioSbrUserdata; 18297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioSbrUserdata->m_bIsSbrEnabled = M4OSA_FALSE; 18307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioSbrUserdata->m_pFirstAU = (M4_AccessUnit*)M4OSA_malloc( 18327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeof(M4_AccessUnit),M4READER_3GP, (M4OSA_Char*)"1st AAC AU"); 18337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pAudioSbrUserdata->m_pFirstAU) { 18347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioSbrUserdata->m_pAacDecoderUserConfig = M4OSA_NULL; 18357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_ALLOC; 18367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi goto Error; 18377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioSbrUserdata->m_pAacDecoderUserConfig = (M4_AacDecoderConfig*)\ 18397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_malloc(sizeof(M4_AacDecoderConfig),M4READER_3GP, 18407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)"m_pAacDecoderUserConfig"); 18417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pAudioSbrUserdata->m_pAacDecoderUserConfig) { 18427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_ALLOC; 18437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi goto Error; 18447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4DA_StreamTypeAudioAac == (*pStreamHandler)->m_streamType) { 18477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_AudioStreamHandler* pAudioStreamHandler = 18487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4_AudioStreamHandler*)(*pStreamHandler); 18497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AudioSbrUserdata* pUserData = (M4READER_AudioSbrUserdata*)\ 18507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pAudioStreamHandler->m_basicProperties.m_pUserData); 18517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = VideoEditor3gpReader_fillAuStruct(pC, (*pStreamHandler), 18537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4_AccessUnit*)pUserData->m_pFirstAU); 18547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) { 18557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi goto Error; 18567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = VideoEditor3gpReader_getNextAu(pC, (*pStreamHandler), 18587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4_AccessUnit*)pUserData->m_pFirstAU); 18597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) { 18607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi goto Error; 18617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = VideoEditor3gpReader_reset(pC, (*pStreamHandler)); 18637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) { 18647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi goto Error; 18657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->mCurrTrack++; //Increment the current track to get next track 18697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("pC->mCurrTrack = %d",pC->mCurrTrack); 18707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (!haveAudio && !haveVideo) { 18727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pMediaFamily=M4READER_kMediaFamilyUnknown; 18737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_READER_UNKNOWN_STREAM_TYPE; 18747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiError: 18767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getNextStreamHandler end error = %d",err); 18777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 18787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 18797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_getPrevRapTime(M4OSA_Context context, 18817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler *pStreamHandler, M4OSA_Int32* pTime) 18827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 18837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_Context *pC = (VideoEditor3gpReader_Context*)context; 18847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 18857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi MediaBuffer *mMediaBuffer = M4OSA_NULL; 18867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi MediaSource::ReadOptions options; 18877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time time64; 18887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi int64_t tempTime64 = 0; 18897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi status_t error; 18907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getPrevRapTime begin"); 18927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, 18947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_getPrevRapTime: invalid context"); 18957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 18967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_getPrevRapTime invalid pointer to StreamHandler"); 18977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pTime == 0), M4ERR_PARAMETER, 18987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_getPrevRapTime: invalid time pointer"); 18997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (*pTime == (pStreamHandler->m_duration)) { 19003ad01762633531957174c5b27e71ca4aac45e554Santosh Madhava *pTime -= 1; 19013ad01762633531957174c5b27e71ca4aac45e554Santosh Madhava } 19027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_INT64_FROM_INT32(time64, *pTime); 19037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi time64 = time64 * 1000; 19047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getPrevRapTime seek time: %ld",time64); 19067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi options.setSeekTo(time64, MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC); 19077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi error = pC->mVideoSource->read(&mMediaBuffer, &options); 19087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (error != OK) { 19097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //Can not get the previous Sync. 19107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //Must be end of stream. 19113ad01762633531957174c5b27e71ca4aac45e554Santosh Madhava return M4WAR_NO_MORE_AU; 19127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 19137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer->meta_data()->findInt64(kKeyTime, (int64_t*)&tempTime64); 19157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getPrevRapTime read time %ld, %x", tempTime64, 19167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer); 19177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pTime) = (tempTime64) / 1000; 19197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(mMediaBuffer != M4OSA_NULL) { 19217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV(" mMediaBuffer size = %d length %d", mMediaBuffer->size(), 19227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer->range_length()); 19237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer->release(); 19247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mMediaBuffer = M4OSA_NULL; 19257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 19267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi options.clearSeekTo(); 19277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(error != OK) { 19297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getPrevRapTime end \ 19307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WAR_READER_INFORMATION_NOT_PRESENT"); 19317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4WAR_READER_INFORMATION_NOT_PRESENT; 19327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 19337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getPrevRapTime end: err %x", err); 19347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4NO_ERROR; 19357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 19367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 19377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 19387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern "C" { 19407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditor3gpReader_getInterface(M4READER_MediaType *pMediaType, 19417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_GlobalInterface **pRdrGlobalInterface, 19427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_DataInterface **pRdrDataInterface) { 19437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 19457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pMediaType, M4ERR_PARAMETER); 19477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pRdrGlobalInterface, M4ERR_PARAMETER); 19487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pRdrDataInterface, M4ERR_PARAMETER); 19497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getInterface begin"); 19517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getInterface %d 0x%x 0x%x", *pMediaType, 19527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pRdrGlobalInterface,*pRdrDataInterface); 19537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_MALLOC(*pRdrGlobalInterface, M4READER_GlobalInterface, 1, 19557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_getInterface"); 19567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_MALLOC(*pRdrDataInterface, M4READER_DataInterface, 1, 19577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditor3gpReader_getInterface"); 19587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pMediaType = M4READER_kMediaType3GPP; 19607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctCreate = VideoEditor3gpReader_create; 19627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctDestroy = VideoEditor3gpReader_destroy; 19637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctOpen = VideoEditor3gpReader_open; 19647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctClose = VideoEditor3gpReader_close; 19657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctGetOption = VideoEditor3gpReader_getOption; 19667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctSetOption = VideoEditor3gpReader_setOption; 19677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctGetNextStream = 19687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_getNextStreamHandler; 19697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctFillAuStruct = 19707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_fillAuStruct; 19717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctStart = M4OSA_NULL; 19727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctStop = M4OSA_NULL; 19737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctJump = VideoEditor3gpReader_jump; 19747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctReset = VideoEditor3gpReader_reset; 19757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctGetPrevRapTime = 19767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditor3gpReader_getPrevRapTime; 19777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrDataInterface)->m_pFctGetNextAu = VideoEditor3gpReader_getNextAu; 19787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrDataInterface)->m_readerContext = M4OSA_NULL; 19797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargicleanUp: 19817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( M4NO_ERROR == err ) { 19827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getInterface no error"); 19837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 19847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_FREE(*pRdrGlobalInterface); 19857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_FREE(*pRdrDataInterface); 19867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getInterface ERROR 0x%X", err); 19887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 19897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi LOGV("VideoEditor3gpReader_getInterface end"); 19907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 19917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 19927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} /* extern "C" */ 19947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} /* namespace android */ 19967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1998