17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* 27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License. 67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at 77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and 147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License. 157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************* 187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @file VideoEditorMp3Reader.cpp 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief StageFright shell MP3 Reader 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************* 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define LOG_NDEBUG 1 237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define LOG_TAG "VIDEOEDITOR_MP3READER" 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * HEADERS 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h" 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4SYS_AccessUnit.h" 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "VideoEditorMp3Reader.h" 327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "VideoEditorUtils.h" 337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "utils/Log.h" 35c4689fae1bdb8d1c94eb28af1b2a1f30d2b1a3daJames Dong#include <media/stagefright/foundation/ADebug.h> 367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaBufferGroup.h> 377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/DataSource.h> 387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/FileSource.h> 397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaBuffer.h> 407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaDefs.h> 417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaExtractor.h> 427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaSource.h> 437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MetaData.h> 447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * SOURCE CLASS 477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundarginamespace android { 507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * ENGINE INTERFACE 527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************** 567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure VideoEditorMp3Reader_Context 577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This structure defines the context of the SF MP3 reader shell. 587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************** 597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct { 617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sp<DataSource> mDataSource; 627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sp<MediaExtractor> mExtractor; 637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sp<MediaSource> mMediaSource; 647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_AudioStreamHandler* mAudioStreamHandler; 657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit mAudioAu; 667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time mMaxDuration; 677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 mStreamNumber; 687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Bool mSeeking; 697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time mSeekTime; 707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi uint32_t mExtractorFlags; 717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} VideoEditorMp3Reader_Context; 727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi **************************************************************************** 757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief create an instance of the MP3 reader 767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note allocates the context 777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (OUT) pointer on a reader context 797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC a memory allocation has failed 827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not valid 837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi **************************************************************************** 847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_create(M4OSA_Context *pContext) { 867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditorMp3Reader_Context *pReaderContext = M4OSA_NULL; 887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pContext, M4ERR_PARAMETER); 907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 912703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_create begin"); 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Context allocation & initialization */ 947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_MALLOC(pReaderContext, VideoEditorMp3Reader_Context, 1, 957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader"); 967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mAudioStreamHandler = M4OSA_NULL; 987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mAudioAu.dataAddress = M4OSA_NULL; 99aa382f3637a68361989d5b70e3184bddcc472d3dhongteng pReaderContext->mMaxDuration = 0; 1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pContext = pReaderContext; 1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargicleanUp: 1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR == err) { 1042703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_create no error"); 1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 1062703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_create ERROR 0x%X", err); 1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1082703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_create end"); 1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief destroy the instance of the MP3 reader 1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note after this call the context is invalid 1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER The input parameter is not properly set 1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_destroy(M4OSA_Context pContext) { 1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditorMp3Reader_Context *pReaderContext = 1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditorMp3Reader_Context*)pContext; 1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pReaderContext, M4ERR_PARAMETER); 1272703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_destroy begin"); 1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_FREE(pReaderContext); 1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargicleanUp: 1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR == err) { 1322703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_destroy no error"); 1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 1342703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_destroy ERROR 0x%X", err); 1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1362703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_destroy end"); 1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief open the reader and initializes its created instance 1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note this function opens the MP3 file 1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFileDescriptor: (IN) Pointer to proprietary data identifying 1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the media to open 1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER the context is NULL 1491dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava * @return M4ERR_BAD_CONTEXT provided context is not a valid one 1501dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava * @return M4ERR_UNSUPPORTED_MEDIA_TYPE the media is DRM protected 1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_open(M4OSA_Context context, 1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Void* pFileDescriptor){ 1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditorMp3Reader_Context *pReaderContext = 1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditorMp3Reader_Context*)context; 1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1592703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_open begin"); 1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Check function parameters*/ 1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pReaderContext), M4ERR_PARAMETER, 1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_open: invalid context pointer"); 1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pFileDescriptor), M4ERR_PARAMETER, 1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_open: invalid pointer pFileDescriptor"); 1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1662703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_open Datasource start %s", 1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (char*)pFileDescriptor); 168eab39fb973444f2c03b0e92d4df263b83c31f71bDheeraj Sharma pReaderContext->mDataSource = new FileSource ((char*)pFileDescriptor); 1692703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_open Datasource end"); 1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pReaderContext->mDataSource == NULL) { 1722703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_open Datasource error"); 1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return UNKNOWN_ERROR; 1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1762703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_open extractor start"); 1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mExtractor = MediaExtractor::Create( 1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mDataSource,MEDIA_MIMETYPE_AUDIO_MPEG); 1792703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_open extractor end"); 1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pReaderContext->mExtractor == NULL) { 1822703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_open extractor error"); 1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return UNKNOWN_ERROR; 1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mStreamNumber = 0; 1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1871dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava int32_t isDRMProtected = 0; 1881dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava sp<MetaData> meta = pReaderContext->mExtractor->getMetaData(); 1891dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava meta->findInt32(kKeyIsDRM, &isDRMProtected); 1901dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava if (isDRMProtected) { 1912703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_open error - DRM Protected"); 1921dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava return M4ERR_UNSUPPORTED_MEDIA_TYPE; 1931dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava } 1941dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava 1952703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_open end"); 1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************** 2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief close the reader 2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note this function closes the MP3 reader 2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER the context is NULL 2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************** 2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_close(M4OSA_Context context) { 2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditorMp3Reader_Context *pReaderContext = 2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditorMp3Reader_Context*)context; 2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2122703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_close begin"); 2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Check function parameters */ 2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pReaderContext), M4ERR_PARAMETER, 2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_close: invalid context pointer"); 2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pReaderContext->mAudioStreamHandler != NULL) { 2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pReaderContext->mAudioStreamHandler->\ 2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_basicProperties.m_pDecoderSpecificInfo) { 220694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pReaderContext->mAudioStreamHandler->\ 2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_basicProperties.m_pDecoderSpecificInfo); 2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mAudioStreamHandler->m_basicProperties.\ 2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_decoderSpecificInfoSize = 0; 2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mAudioStreamHandler->m_basicProperties.\ 2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_pDecoderSpecificInfo = M4OSA_NULL; 2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Finally destroy the stream handler */ 229694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pReaderContext->mAudioStreamHandler); 2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mAudioStreamHandler = M4OSA_NULL; 2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pReaderContext->mAudioAu.dataAddress != NULL) { 233694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pReaderContext->mAudioAu.dataAddress); 2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mAudioAu.dataAddress = NULL; 2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mMediaSource->stop(); 2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mMediaSource.clear(); 240eab39fb973444f2c03b0e92d4df263b83c31f71bDheeraj Sharma pReaderContext->mExtractor.clear(); 2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mDataSource.clear(); 2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2432703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_close end "); 2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief get an option value from the reader 2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * it allows the caller to retrieve a property value: 2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param optionId: (IN) indicates the option to get 2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pValue: (OUT) pointer to structure or value (allocated 2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * by user) where option is stored 2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_OPTION_ID when the option ID is not a valid one 2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_getOption(M4OSA_Context context, 2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_OptionID optionId, M4OSA_DataOption pValue) { 2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditorMp3Reader_Context *pReaderContext = 2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditorMp3Reader_Context*)context; 2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2682703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getOption begin: optionId= %d ",(int)optionId); 2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pReaderContext), M4ERR_PARAMETER, 2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "invalid value pointer"); 2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pValue), M4ERR_PARAMETER, 2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "invalid value pointer"); 2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(optionId) { 2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_Duration: 2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2782703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("Mp3Reader duration=%ld",pReaderContext->mMaxDuration); 279aa382f3637a68361989d5b70e3184bddcc472d3dhongteng *(M4OSA_Time*)pValue = pReaderContext->mMaxDuration; 2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_Bitrate: 2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32* pBitrate = (M4OSA_UInt32*)pValue; 2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pReaderContext->mAudioStreamHandler) { 2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pBitrate = pReaderContext->mAudioStreamHandler->\ 2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_basicProperties.m_averageBitRate; 2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitrate = 0; 2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_PARAMETER; 2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_Mp3Id3v1Tag: 2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_Mp3Id3v2Tag: 3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_GetMetadata: 3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default : 3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3072703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getOption: M4ERR_BAD_OPTION_ID"); 3087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_BAD_OPTION_ID; 3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3112703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getOption end "); 3127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 3147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief set an option value of the reader 3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 3187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * it allows the caller to set a property value: 3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 3217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param optionId: (IN) Identifier indicating the option to set 3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pValue: (IN) Pointer to structure or value (allocated 3237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * by user) where option is stored 3247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR There is no error 3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_OPTION_ID The option ID is not a valid one 3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_STATE State automaton is not applied 3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER The option parameter is invalid 3297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 3307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 3317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_setOption(M4OSA_Context context, 3327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_OptionID optionId, M4OSA_DataOption pValue) { 3337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditorMp3Reader_Context *pReaderContext = 3347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditorMp3Reader_Context*)context; 3357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 3367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3372703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_Context begin: optionId: %d Value: %d ", 3387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (int)optionId,(int)pValue); 3397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pReaderContext), M4ERR_PARAMETER, 3417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "invalid context pointer"); 3427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pValue), M4ERR_PARAMETER, 3437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "invalid value pointer"); 3447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(optionId) { 3467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_SetOsaFileReaderFctsPtr: 3477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default : 3487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4NO_ERROR; 3507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3522703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_Context end "); 3537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 3547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 3557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 3567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 3577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief jump into the stream at the specified time 3587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 3597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 3607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler(IN) stream description of the stream to make jump 3617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pTime (I/O)IN:the time to jump to (in ms) 3627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * OUT: the time to which the stream really jumped 3637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 3647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 3657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 3667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 3677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_jump(M4OSA_Context context, 3687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler *pStreamHandler, M4OSA_Int32* pTime) { 3697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditorMp3Reader_Context *pReaderContext = 3707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditorMp3Reader_Context*)context; 3717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamID streamIdArray[2]; 3727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 3737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pAu; 374aa382f3637a68361989d5b70e3184bddcc472d3dhongteng M4OSA_Time time64 = (M4OSA_Time)*pTime; 3757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3762703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_jump begin"); 3777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pReaderContext == 0), M4ERR_PARAMETER, 3787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_jump: invalid context"); 3797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 3807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_jump: invalid pointer to M4_StreamHandler"); 3817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pTime == 0), M4ERR_PARAMETER, 3827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_jump: invalid time pointer"); 3837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pStreamHandler == (M4_StreamHandler*)pReaderContext->\ 3857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mAudioStreamHandler){ 3867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pReaderContext->mAudioAu; 3877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 3882703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_jump: passed StreamHandler is not known"); 3897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 3907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamIdArray[0] = pStreamHandler->m_streamId; 3937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamIdArray[1] = 0; 3947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3952703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_jump time ms %ld ", time64); 3967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->CTS = time64; 3987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->DTS = time64; 3997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi time64 = time64 * 1000; /* Convert the time into micro sec */ 4012703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_jump time us %ld ", time64); 4027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mSeeking = M4OSA_TRUE; 4047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mSeekTime = time64; 4057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi time64 = time64 / 1000; /* Convert the time into milli sec */ 407aa382f3637a68361989d5b70e3184bddcc472d3dhongteng *pTime = (M4OSA_Int32)time64; 4082703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_jump end "); 4097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 4117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 4127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 4137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Get the next stream found in the media file 4147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 4157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 4167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pMediaFamily: (OUT) pointer to a user allocated 4177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4READER_MediaFamily that will be filled with 4187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the media family of the found stream 4197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler: (OUT) pointer to a stream handler that will be 4207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * allocated and filled with stream description 4217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 4227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 4237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4WAR_NO_MORE_STREAM no more available stream in the media 4247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 4257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 4267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 4277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_getNextStream(M4OSA_Context context, 4287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_MediaFamily *pMediaFamily, 4297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler **pStreamHandlerParam) { 4307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditorMp3Reader_Context *pReaderContext = 4317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditorMp3Reader_Context*)context; 4327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 4337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamID streamIdArray[2]; 4347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamDescription streamDesc; 4357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_AudioStreamHandler* pAudioStreamHandler; 4367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler* pStreamHandler; 4377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 type, temp; 4387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Bool haveAudio = M4OSA_FALSE; 4397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sp<MetaData> meta = NULL; 4407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi int64_t Duration; 4417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4422703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextStream begin"); 4437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pReaderContext == 0), M4ERR_PARAMETER, 4447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_getNextStream: invalid context"); 4457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pMediaFamily == 0), M4ERR_PARAMETER, 4467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_getNextStream: invalid pointer to MediaFamily"); 4477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandlerParam == 0), M4ERR_PARAMETER, 4487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_getNextStream: invalid pointer to StreamHandler"); 4497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4502703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextStream stream number = %d", 4517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mStreamNumber); 4527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pReaderContext->mStreamNumber >= 1) { 4532703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextStream max number of stream reached"); 4547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4WAR_NO_MORE_STREAM; 4557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mStreamNumber = pReaderContext->mStreamNumber + 1; 4572703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextStream number of Tracks%d", 4587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mExtractor->countTracks()); 4597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (temp = 0; temp < pReaderContext->mExtractor->countTracks(); temp++) { 4607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi meta = pReaderContext->mExtractor->getTrackMetaData(temp); 4617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi const char *mime; 4627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi CHECK(meta->findCString(kKeyMIMEType, &mime)); 4637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (!haveAudio && !strncasecmp(mime, "audio/", 6)) { 4657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mMediaSource = 4667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mExtractor->getTrack(temp); 4677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mMediaSource->start(); 4687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi haveAudio = true; 4697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (haveAudio) { 4727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (!haveAudio) { 4772703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextStream no more stream "); 4787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mDataSource.clear(); 4797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4WAR_NO_MORE_STREAM; 4807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mExtractorFlags = pReaderContext->mExtractor->flags(); 4837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pMediaFamily = M4READER_kMediaFamilyAudio; 4847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamDesc.duration = meta->findInt64(kKeyDuration, &Duration); 4867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamDesc.duration = (M4OSA_Time)Duration/1000; 4877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi meta->findInt32(kKeyBitRate, (int32_t*)&streamDesc.averageBitrate); 4897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi meta->findInt32(kKeySampleRate, (int32_t*)&streamDesc.timeScale); 4902703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("Bitrate = %d, SampleRate = %d duration = %lld", 4917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamDesc.averageBitrate,streamDesc.timeScale,Duration/1000); 4927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamDesc.streamType = M4SYS_kMP3; 4947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamDesc.profileLevel = 0xFF ; 4957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamDesc.streamID = pReaderContext->mStreamNumber; 4967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamDesc.decoderSpecificInfo = M4OSA_NULL; 4977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamDesc.decoderSpecificInfoSize = 0; 4987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamDesc.maxBitrate = streamDesc.averageBitrate; 4997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Allocate the audio stream handler and set its parameters */ 501694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu pAudioStreamHandler = (M4_AudioStreamHandler*)M4OSA_32bitAlignedMalloc( 5027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeof(M4_AudioStreamHandler), M4READER_MP3, 5037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)"M4_AudioStreamHandler"); 5047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pAudioStreamHandler == M4OSA_NULL) { 5062703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextStream malloc failed"); 5077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mMediaSource->stop(); 5087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mMediaSource.clear(); 5097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mDataSource.clear(); 5107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 5127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler =(M4_StreamHandler*)(pAudioStreamHandler); 5147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pStreamHandlerParam = pStreamHandler; 5157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mAudioStreamHandler = pAudioStreamHandler; 5167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_structSize = sizeof(M4_AudioStreamHandler); 5187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (meta == NULL) { 5202703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextStream meta is NULL"); 5217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_samplingFrequency = streamDesc.timeScale; 5247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_pDecoderSpecificInfo = 5257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt8*)(streamDesc.decoderSpecificInfo); 5267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_decoderSpecificInfoSize = 5277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamDesc.decoderSpecificInfoSize; 5287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi meta->findInt32(kKeyChannelCount, 5307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (int32_t*)&pAudioStreamHandler->m_nbChannels); 5317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_byteFrameLength = 1152; 5327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_byteSampleSize = 2; 5337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_pUserData = NULL; 5357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_streamId = streamDesc.streamID; 5367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_duration = streamDesc.duration; 5377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mMaxDuration = streamDesc.duration; 5387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_averageBitRate = streamDesc.averageBitrate; 5397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_maxAUSize = 0; 5417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_streamType = M4DA_StreamTypeAudioMp3; 5427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5432703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextStream end "); 5447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 5457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 5467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 5487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 5497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief fill the access unit structure with initialization values 5507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 5517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler: (IN) pointer to the stream handler to which 5527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the access unit will be associated 5537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pAccessUnit: (IN/OUT) pointer to the access unit (allocated by 5547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the caller) to initialize 5557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 5567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 5577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 5587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 5597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_fillAuStruct(M4OSA_Context context, 5607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler *pStreamHandler, M4_AccessUnit *pAccessUnit) { 5617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditorMp3Reader_Context *pReaderContext = 5627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditorMp3Reader_Context*)context; 5637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit *pAu; 5647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pReaderContext == 0), M4ERR_PARAMETER, 5667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_fillAuStruct: invalid context"); 5677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 5687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_fillAuStruct invalid pointer to StreamHandler"); 5697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pAccessUnit == 0), M4ERR_PARAMETER, 5707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_fillAuStruct: invalid pointer to M4_AccessUnit"); 5717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5722703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_fillAuStruct start "); 5737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pStreamHandler == (M4_StreamHandler*)pReaderContext->\ 5747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mAudioStreamHandler){ 5757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pReaderContext->mAudioAu; 5767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 5772703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_fillAuStruct StreamHandler is not known"); 5787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 5797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Initialize pAu structure */ 5827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->dataAddress = M4OSA_NULL; 5837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->size = 0; 5847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->CTS = 0; 5857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->DTS = 0; 5867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->attribute = 0; 5877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->nbFrag = 0; 5887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Initialize pAccessUnit structure */ 5907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_size = 0; 5917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_CTS = 0; 5927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_DTS = 0; 5937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_attribute = 0; 5947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_dataAddress = M4OSA_NULL; 5957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_maxsize = pStreamHandler->m_maxAUSize; 5967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_streamID = pStreamHandler->m_streamId; 5977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_structSize = sizeof(M4_AccessUnit); 5987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5992703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_fillAuStruct end"); 6007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 6017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 6027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 6047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 6057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief reset the stream, i.e seek it to the beginning 6067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 6077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 6087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler (IN) The stream handler of the stream to reset 6097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 6107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 6117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 6127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 6137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_reset(M4OSA_Context context, 6147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler *pStreamHandler) { 6157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditorMp3Reader_Context *pReaderContext = 6167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditorMp3Reader_Context*)context; 6177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 6197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamID streamIdArray[2]; 6207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pAu; 621aa382f3637a68361989d5b70e3184bddcc472d3dhongteng M4OSA_Time time64 = 0; 6227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6232703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_reset start"); 6247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pReaderContext == 0), M4ERR_PARAMETER, 6257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_reset: invalid context"); 6267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 6277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_reset: invalid pointer to M4_StreamHandler"); 6287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pStreamHandler == (M4_StreamHandler*)pReaderContext->\ 6307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mAudioStreamHandler) { 6317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pReaderContext->mAudioAu; 6327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 6332703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_reset StreamHandler is not known"); 6347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 6357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamIdArray[0] = pStreamHandler->m_streamId; 6377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamIdArray[1] = 0; 6387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->CTS = time64; 6397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->DTS = time64; 6407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mSeeking = M4OSA_TRUE; 6427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mSeekTime = time64; 6437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6442703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_reset end"); 6457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 6467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 6477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 6487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 6497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Gets an access unit (AU) from the stream handler source. 6507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note AU is the smallest possible amount of data to be decoded by decoder 6517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 6527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 6537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler (IN) The stream handler of the stream to make jump 6547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pAccessUnit (I/O)Pointer to an access unit to fill with read data 6557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 6567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 6577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @returns M4ERR_ALLOC memory allocation failed 6587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @returns M4WAR_NO_MORE_AU there are no more access unit in the stream 6597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************* 6607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 6617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_getNextAu(M4OSA_Context context, 6627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler *pStreamHandler, M4_AccessUnit *pAccessUnit) { 6637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditorMp3Reader_Context *pReaderContext = 6647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (VideoEditorMp3Reader_Context*)context; 6657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 6667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pAu; 6677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi MediaBuffer *mAudioBuffer; 6687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi MediaSource::ReadOptions options; 6697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6702703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextAu start"); 6717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pReaderContext == 0), M4ERR_PARAMETER, 6727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_getNextAu: invalid context"); 6737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 6747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_getNextAu: invalid pointer to M4_StreamHandler"); 6757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pAccessUnit == 0), M4ERR_PARAMETER, 6767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_getNextAu: invalid pointer to M4_AccessUnit"); 6777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pStreamHandler == (M4_StreamHandler*)pReaderContext->\ 6797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mAudioStreamHandler) { 6807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pReaderContext->mAudioAu; 6817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 6822703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextAu: StreamHandler is not known\n"); 6837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 6847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pReaderContext->mSeeking) { 6877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi options.setSeekTo(pReaderContext->mSeekTime); 6887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mMediaSource->read(&mAudioBuffer, &options); 6917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (mAudioBuffer != NULL) { 6937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((pAu->dataAddress == NULL) || 6947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pAu->size < mAudioBuffer->range_length())) { 6957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pAu->dataAddress != NULL) { 696694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((M4OSA_Int32*)pAu->dataAddress); 6977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->dataAddress = NULL; 6987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 699694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu pAu->dataAddress = (M4OSA_Int32*)M4OSA_32bitAlignedMalloc( 7007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (mAudioBuffer->range_length() + 3) & ~0x3, 7017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_MP3, (M4OSA_Char*)"pAccessUnit->m_dataAddress" ); 7027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pAu->dataAddress == NULL) { 7042703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextAu malloc failed"); 7057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mMediaSource->stop(); 7067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mMediaSource.clear(); 7077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mDataSource.clear(); 7087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 7107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->size = mAudioBuffer->range_length(); 7137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi memcpy((M4OSA_MemAddr8)pAu->dataAddress, 7147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (const char *)mAudioBuffer->data() + mAudioBuffer->range_offset(), 7157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mAudioBuffer->range_length()); 7167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mAudioBuffer->meta_data()->findInt64(kKeyTime, (int64_t*)&pAu->CTS); 7187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->CTS = pAu->CTS / 1000; /*converting the microsec to millisec */ 7217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->DTS = pAu->CTS; 7227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->attribute = M4SYS_kFragAttrOk; 7237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mAudioBuffer->release(); 7247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7252703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextAu AU CTS = %ld",pAu->CTS); 7267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_dataAddress = (M4OSA_Int8*) pAu->dataAddress; 7287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_size = pAu->size; 7297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_CTS = pAu->CTS; 7307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_DTS = pAu->DTS; 7317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_attribute = pAu->attribute; 7327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } else { 7332703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextAu EOS reached."); 7347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_size=0; 7357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4WAR_NO_MORE_AU; 7367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->nbFrag = 0; 7387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi options.clearSeekTo(); 7407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->mSeeking = M4OSA_FALSE; 7417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mAudioBuffer = NULL; 7422703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getNextAu end"); 7437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 7457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 7467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern "C" { 7487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_getInterface( 7507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_MediaType *pMediaType, 7517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_GlobalInterface **pRdrGlobalInterface, 7527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_DataInterface **pRdrDataInterface) { 7537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 7547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7552703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getInterface: begin"); 7567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Input parameters check */ 7577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pMediaType, M4ERR_PARAMETER); 7587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pRdrGlobalInterface, M4ERR_PARAMETER); 7597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_CHECK(M4OSA_NULL != pRdrDataInterface, M4ERR_PARAMETER); 7607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_MALLOC(*pRdrGlobalInterface, M4READER_GlobalInterface, 1, 7627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_getInterface"); 7637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_MALLOC(*pRdrDataInterface, M4READER_DataInterface, 1, 7647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "VideoEditorMp3Reader_getInterface"); 7657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pMediaType = M4READER_kMediaTypeMP3; 7677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctCreate = VideoEditorMp3Reader_create; 7697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctDestroy = VideoEditorMp3Reader_destroy; 7707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctOpen = VideoEditorMp3Reader_open; 7717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctClose = VideoEditorMp3Reader_close; 7727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctGetOption = VideoEditorMp3Reader_getOption; 7737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctSetOption = VideoEditorMp3Reader_setOption; 7747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctGetNextStream = 7757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditorMp3Reader_getNextStream; 7767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctFillAuStruct = 7777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VideoEditorMp3Reader_fillAuStruct; 7787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctStart = M4OSA_NULL; 7797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctStop = M4OSA_NULL; 7807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctJump = VideoEditorMp3Reader_jump; 7817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctReset = VideoEditorMp3Reader_reset; 7827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctGetPrevRapTime = M4OSA_NULL; 7837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrDataInterface)->m_pFctGetNextAu = VideoEditorMp3Reader_getNextAu; 7857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrDataInterface)->m_readerContext = M4OSA_NULL; 7867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargicleanUp: 7887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( M4NO_ERROR == err ) 7897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7902703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getInterface no error"); 7917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 7937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_FREE(*pRdrGlobalInterface); 7957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_FREE(*pRdrDataInterface); 7967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7972703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getInterface ERROR 0x%X", err); 7987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7992703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VideoEditorMp3Reader_getInterface: end"); 8007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 8017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 8027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} /* extern "C" */ 8037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} /* namespace android */ 804