17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* 27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License. 67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at 77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and 147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License. 157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file M4READER_Amr.c 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Generic encapsulation of the core amr reader 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This file implements the generic M4READER interface 227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * on top of the AMR reader 237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Types.h" 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Error.h" 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Memory.h" 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h" 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_CoreID.h" 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4_Utils.h" 327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4AMRR_CoreReader.h" 347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4READER_Amr.h" 357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure M4READER_AMR_Context 397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This structure defines the internal context of a amr reader instance 407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note The context is allocated and de-allocated by the reader 417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct _M4READER_AMR_Context 447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Context m_pCoreContext; /**< core amr reader context */ 467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_AudioStreamHandler* m_pAudioStream; /**< pointer on the audio stream 477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi description returned by the core */ 487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit m_audioAu; /**< audio access unit to be filled by the core */ 497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time m_maxDuration; /**< duration of the audio stream */ 507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_FileReadPointer* m_pOsaFileReaderFcts; /**< OSAL file read functions */ 517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4READER_AMR_Context; 537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief create an instance of the reader 587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note allocates the context 597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (OUT) pointer on a reader context 607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC a memory allocation has failed 627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set (in DEBUG only) 637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_AMR_create(M4OSA_Context *pContext) 667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR_Context* pReaderContext; 687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Check function parameters */ 707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pContext == 0), M4ERR_PARAMETER, 717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_create: invalid context pointer"); 727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 73694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu pReaderContext = (M4READER_AMR_Context*)M4OSA_32bitAlignedMalloc(sizeof(M4READER_AMR_Context), 747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR, (M4OSA_Char *)"M4READER_AMR_Context"); 757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pReaderContext == M4OSA_NULL) 767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->m_pAudioStream = M4OSA_NULL; 817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->m_audioAu.dataAddress = M4OSA_NULL; 82aa382f3637a68361989d5b70e3184bddcc472d3dhongteng pReaderContext->m_maxDuration = 0; 837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->m_pCoreContext = M4OSA_NULL; 847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderContext->m_pOsaFileReaderFcts = M4OSA_NULL; 857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pContext = pReaderContext; 877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief destroy the instance of the reader 947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note after this call the context is invalid 957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_AMR_destroy(M4OSA_Context context) 1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR_Context* pC=(M4READER_AMR_Context*)context; 1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Check function parameters*/ 1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, 1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_destroy: invalid context pointer"); 1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameter */ 1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pC) 1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4READER_AMR_destroy(): M4READER_AMR_destroy: context is M4OSA_NULL,\ 1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning M4ERR_PARAMETER"); 1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 119694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC); 1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief open the reader and initializes its created instance 1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note this function opens the AMR file 1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFileDescriptor: (IN) Pointer to proprietary data identifying the media to open 1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER the context is NULL 1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_CONTEXT provided context is not a valid one 1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_AMR_open(M4OSA_Context context, M4OSA_Void* pFileDescriptor) 1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR_Context* pC = (M4READER_AMR_Context*)context; 1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Check function parameters*/ 1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, 1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_open: invalid context pointer"); 1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pFileDescriptor), M4ERR_PARAMETER, 1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_open: invalid pointer pFileDescriptor"); 1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_openRead( &pC->m_pCoreContext, pFileDescriptor, pC->m_pOsaFileReaderFcts); 1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief close the reader 1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER the context is NULL 1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_CONTEXT provided context is not a valid one 1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_AMR_close(M4OSA_Context context) 1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR_Context* pC = (M4READER_AMR_Context*)context; 1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AMRR_State State; 1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Check function parameters*/ 1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, 1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_close: invalid context pointer"); 1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameter */ 1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pC) 1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4READER_AMR_close(): M4READER_AMR_close: context is M4OSA_NULL,\ 1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning M4ERR_PARAMETER"); 1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pAudioStream) 1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_getState(pC->m_pCoreContext, &State, 1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4_StreamHandler*)pC->m_pAudioStream)->m_streamId); 1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4NO_ERROR != err) 1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4READER_AMR_close: error when calling M4AMRR_getState\n"); 1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4AMRR_kReading_nextAU == State) 1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_freeAU(pC->m_pCoreContext, 1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4_StreamHandler*)pC->m_pAudioStream)->m_streamId, &pC->m_audioAu); 1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4READER_AMR_close: error when freeing access unit\n"); 2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Delete the DSI if needed */ 2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != pC->m_pAudioStream->m_basicProperties.m_pDecoderSpecificInfo) 2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 207694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(\ 2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioStream->m_basicProperties.m_pDecoderSpecificInfo); 2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioStream->m_basicProperties.m_decoderSpecificInfoSize = 0; 2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioStream->m_basicProperties.m_pDecoderSpecificInfo = M4OSA_NULL; 2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Finally destroy the stream handler */ 215694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pAudioStream); 2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioStream = M4OSA_NULL; 2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pCoreContext) 2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_closeRead(pC->m_pCoreContext); 2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pCoreContext = M4OSA_NULL; 2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Get the next stream found in the media 2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note current version needs to translate M4SYS_Stream to M4_StreamHandler 2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pMediaFamily: (OUT) pointer to a user allocated M4READER_MediaFamily 2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * that will be filled with the media family of the found stream 2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler: (OUT) pointer to a stream handler that will be 2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * allocated and filled with the found stream description 2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4WAR_NO_MORE_STREAM no more available stream in the media (all streams found) 2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set (in DEBUG mode only) 2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_AMR_getNextStream(M4OSA_Context context, M4READER_MediaFamily *pMediaFamily, 2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler **pStreamHandlerParam) 2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR_Context* pC=(M4READER_AMR_Context*)context; 2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamID streamIdArray[2]; 2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamDescription streamDesc; 2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_AudioStreamHandler* pAudioStreamHandler; 2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler* pStreamHandler; 2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, 2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_getNextStream: invalid context"); 2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pMediaFamily == 0), M4ERR_PARAMETER, 2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_getNextStream: invalid pointer to MediaFamily"); 2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandlerParam == 0), M4ERR_PARAMETER, 2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_getNextStream: invalid pointer to StreamHandler"); 2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_getNextStream( pC->m_pCoreContext, &streamDesc); 2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err == M4WAR_NO_MORE_STREAM) 2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamIdArray[0] = 0; 2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamIdArray[1] = 0; 2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_startReading(pC->m_pCoreContext, streamIdArray); 2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((M4OSA_UInt32)M4ERR_ALLOC == err) 2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("M4READER_AMR_getNextStream: M4AMRR_startReading returns M4ERR_ALLOC!"); 2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4WAR_NO_MORE_STREAM; 2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if (err != M4NO_ERROR) 2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pMediaFamily = M4READER_kMediaFamilyAudio; 2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 281694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu pAudioStreamHandler = (M4_AudioStreamHandler*)M4OSA_32bitAlignedMalloc(sizeof(M4_AudioStreamHandler), 2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR, (M4OSA_Char *)"M4_AudioStreamHandler"); 2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pAudioStreamHandler == M4OSA_NULL) 2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler =(M4_StreamHandler*)(pAudioStreamHandler); 2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pStreamHandlerParam = pStreamHandler; 2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioStream = pAudioStreamHandler; 2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_structSize = sizeof(M4_AudioStreamHandler); 2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Audio stream handler fields are initialised with 0 value. 2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * They will be properly set by the AMR decoder 2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_samplingFrequency = 0; 2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_byteFrameLength = 0; 2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_byteSampleSize = 0; 3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioStreamHandler->m_nbChannels = 0; 3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_pDecoderSpecificInfo = (M4OSA_UInt8*)(streamDesc.decoderSpecificInfo); 3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_decoderSpecificInfoSize = streamDesc.decoderSpecificInfoSize; 3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_streamId = streamDesc.streamID; 3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_duration = streamDesc.duration; 3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_pUserData = (void*)streamDesc.timeScale; /*trick to change*/ 3077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 308aa382f3637a68361989d5b70e3184bddcc472d3dhongteng if (streamDesc.duration > pC->m_maxDuration) 3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 310aa382f3637a68361989d5b70e3184bddcc472d3dhongteng pC->m_maxDuration = streamDesc.duration; 3117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_averageBitRate = streamDesc.averageBitrate; 3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AMRR_getmaxAUsize(pC->m_pCoreContext, &pStreamHandler->m_maxAUSize); 3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (streamDesc.streamType) 3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4SYS_kAMR: 3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_streamType = M4DA_StreamTypeAudioAmrNarrowBand; 3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 3217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4SYS_kAMR_WB: 3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_streamType = M4DA_StreamTypeAudioAmrWideBand; 3237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 3247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 3297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 3307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 3327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 3337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief fill the access unit structure with initialization values 3347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 3357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 3367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler: (IN) pointer to the stream handler to 3377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * which the access unit will be associated 3387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pAccessUnit: (IN/OUT) pointer to the access unit (allocated by the caller) 3397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * to initialize 3407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 3417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 3427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 3437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 3447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 3457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_AMR_fillAuStruct(M4OSA_Context context, M4_StreamHandler *pStreamHandler, 3467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_AccessUnit *pAccessUnit) 3477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 3487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR_Context* pC = (M4READER_AMR_Context*)context; 3497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pAu; 3507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, 3527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_fillAuStruct: invalid context"); 3537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 3547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_fillAuStruct: invalid pointer to M4_StreamHandler"); 3557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pAccessUnit == 0), M4ERR_PARAMETER, 3567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_fillAuStruct: invalid pointer to M4_AccessUnit"); 3577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pStreamHandler == (M4_StreamHandler*)pC->m_pAudioStream) 3597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pC->m_audioAu; 3617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 3637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4READER_AMR_fillAuStruct: passed StreamHandler is not known\n"); 3657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 3667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->dataAddress = M4OSA_NULL; 3697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->size = 0; 3707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* JC: bug fix 1197 (set CTS to -20 in order the first AU CTS is 0) */ 3717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->CTS = -20; 3727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->DTS = -20; 3737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->attribute = 0; 3747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->nbFrag = 0; 3757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_size = 0; 3777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* JC: bug fix 1197 (set CTS to -20 in order the first AU CTS is 0) */ 3787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_CTS = -20; 3797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_DTS = -20; 3807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_attribute = 0; 3817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_dataAddress = M4OSA_NULL;/*pBuffer;*/ 3827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_maxsize = pStreamHandler->m_maxAUSize; 3837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_streamID = pStreamHandler->m_streamId; 3847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_structSize = sizeof(M4_AccessUnit); 3857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 3877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 3887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 3907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 3917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief get an option value from the reader 3927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note this function follows the set/get option mechanism described in OSAL 3.0 3937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * it allows the caller to retrieve a property value: 3947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * - the duration of the longest stream of the media 3957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * - the version number of the reader (not implemented yet) 3967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 3977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 3987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param optionId: (IN) indicates the option to get 3997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pValue: (OUT) pointer to structure or value (allocated by user) 4007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * where option is stored 4017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 4027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 4037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 4047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_OPTION_ID when the option ID is not a valid one 4057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 4067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 4077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_AMR_getOption(M4OSA_Context context, M4OSA_OptionID optionId, 4087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DataOption pValue) 4097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 4117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR_Context* pC = (M4READER_AMR_Context*)context; 4127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 4137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Check function parameters */ 4157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 4167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pValue), M4ERR_PARAMETER, "invalid value pointer"); 4177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(optionId) 4197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_Duration : 4217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 422aa382f3637a68361989d5b70e3184bddcc472d3dhongteng *(M4OSA_Time*)pValue = pC->m_maxDuration; 4237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_Bitrate: 4277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32* pBitrate = (M4OSA_UInt32*)pValue; 4297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pAudioStream) 4307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pBitrate = pC->m_pAudioStream->m_basicProperties.m_averageBitRate; 4327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 4347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBitrate = 0; 4367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_PARAMETER; 4377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_Version: 4427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_getVersion((M4_VersionInfo*)pValue); 4447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default : 4487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_PARAMETER; 4507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 4557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 4577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 4587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief set en option value of the readder 4597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note this function follows the set/get option mechanism described in OSAL 3.0 4607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * it allows the caller to set a property value: 4617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * - the OSAL file read functions 4627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 4637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the decoder 4647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param optionId: (IN) Identifier indicating the option to set 4657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pValue: (IN) Pointer to structure or value (allocated by user) 4667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * where option is stored 4677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 4687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR There is no error 4697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_OPTION_ID The option ID is not a valid one 4707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_STATE State automaton is not applied 4717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER The option parameter is invalid 4727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 4737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 4747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_AMR_setOption(M4OSA_Context context, M4OSA_OptionID optionId, 4757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DataOption pValue) 4767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 4777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR_Context* pC = (M4READER_AMR_Context*)context; 4787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 4797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Check function parameters */ 4817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 4827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pValue), M4ERR_PARAMETER, "invalid value pointer"); 4837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(optionId) 4857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4READER_kOptionID_SetOsaFileReaderFctsPtr : 4877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pOsaFileReaderFcts = (M4OSA_FileReadPointer*)pValue; 4897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default : 4927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_PARAMETER; 4947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 4997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 5017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 5027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief reset the stream, that is seek it to beginning and make it ready to be read 5037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note this function is to be deprecated in next versions 5047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 5057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 5067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler (IN) The stream handler of the stream to reset 5077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 5087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 5097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 5107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC there is no more memory available 5117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_STREAM_ID the streamID does not exist 5127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_STATE this function cannot be called now 5137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_CONTEXT provided context is not a valid one 5147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4WAR_INVALID_TIME beginning of the stream can not be reached 5157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 5167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 5177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_AMR_reset(M4OSA_Context context, M4_StreamHandler *pStreamHandler) 5187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 5197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR_Context* pC = (M4READER_AMR_Context*)context; 5207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamID streamIdArray[2]; 5217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 5227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pAu; 523aa382f3637a68361989d5b70e3184bddcc472d3dhongteng M4OSA_Time time64 = 0; 5247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AMRR_State State; 5257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, "M4READER_AMR_reset: invalid context"); 5277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 5287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_reset: invalid pointer to M4_StreamHandler"); 5297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pStreamHandler == (M4_StreamHandler*)pC->m_pAudioStream) 5317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pC->m_audioAu; 5337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 5357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4READER_AMR_reset: passed StreamHandler is not known\n"); 5377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 5387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_getState(pC->m_pCoreContext, &State, pStreamHandler->m_streamId); 5417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4AMRR_kReading_nextAU == State) 5427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_freeAU(pC->m_pCoreContext, pStreamHandler->m_streamId, pAu); 5447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 5457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4READER_AMR_reset: error when freeing access unit\n"); 5477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 5487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->dataAddress = M4OSA_NULL; 5507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamIdArray[0] = pStreamHandler->m_streamId; 5537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamIdArray[1] = 0; 5547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4NO_ERROR; 5567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* for reset during playback */ 5587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* (set CTS to -20 in order the first AU CTS is 0) */ 5597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->CTS = -20; 5607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->DTS = -20; 5617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_seek(pC->m_pCoreContext, streamIdArray, time64, M4SYS_kBeginning, &time64); 5637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 5647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4READER_AMR_reset: error when calling M4AMRR_seek()\n"); 5667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 5677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 5707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 5717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 5737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 5747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief jump into the stream at the specified time 5757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 5767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 5777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler (IN) the stream description of the stream to make jump 5787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pTime (IN/OUT) IN: the time to jump to (in ms) 5797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * OUT: the time to which the stream really jumped 5807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 5817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_CONTEXT provided context is not a valid one 5827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 5837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC there is no more memory available 5847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4WAR_INVALID_TIME the time can not be reached 5857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 5867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 5877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_AMR_jump(M4OSA_Context context, M4_StreamHandler *pStreamHandler, 5887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32* pTime) 5897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 5907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR_Context* pC = (M4READER_AMR_Context*)context; 5917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamID streamIdArray[2]; 5927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 5937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pAu; 594aa382f3637a68361989d5b70e3184bddcc472d3dhongteng M4OSA_Time time64 = (M4OSA_Time)*pTime; 5957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AMRR_State State; 5967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, "M4READER_AMR_reset: invalid context"); 5987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 5997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_reset: invalid pointer to M4_StreamHandler"); 6007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pTime == 0), M4ERR_PARAMETER, "M4READER_3GP_jump: invalid time pointer"); 6017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pStreamHandler == (M4_StreamHandler*)pC->m_pAudioStream) 6037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pC->m_audioAu; 6057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 6077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4READER_AMR_jump: passed StreamHandler is not known\n"); 6097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 6107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_getState(pC->m_pCoreContext, &State, pStreamHandler->m_streamId); 6137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4AMRR_kReading_nextAU == State) 6147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_freeAU(pC->m_pCoreContext, pStreamHandler->m_streamId, pAu); 6167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 6177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4READER_AMR_jump: error when freeing access unit\n"); 6197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 6207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->dataAddress = M4OSA_NULL; 6227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamIdArray[0] = pStreamHandler->m_streamId; 6257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamIdArray[1] = 0; 6267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->CTS = time64; 6287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->DTS = time64; 6297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_seek(pC->m_pCoreContext, streamIdArray, time64, M4SYS_kNoRAPprevious, &time64); 6307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 6317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4READER_AMR_jump: error when calling M4AMRR_seek()\n"); 6337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 6347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 636aa382f3637a68361989d5b70e3184bddcc472d3dhongteng *pTime = (M4OSA_Int32)time64; 6377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 6397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 6407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 6427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 6437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Gets an access unit (AU) from the stream handler source. 6447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note An AU is the smallest possible amount of data to be decoded by a decoder (audio/video). 6457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * In the current version, we need to translate M4OSA_AccessUnit to M4_AccessUnit 6467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 6477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context: (IN) Context of the reader 6487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler (IN) The stream handler of the stream to make jump 6497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pAccessUnit (IN/OUT) Pointer to an access unit to fill with read data (the au 6507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi structure is allocated by the user, and must be 6517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi initialized by calling M4READER_fillAuStruct_fct after 6527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi creation) 6537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR there is no error 6547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_CONTEXT provided context is not a valid one 6557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER at least one parameter is not properly set 6567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC memory allocation failed 6577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_STREAM_ID at least one of the stream Id. does not exist. 6587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4WAR_NO_MORE_AU there are no more access unit in the stream (end of stream) 6597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 6607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 6617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_AMR_getNextAu(M4OSA_Context context, M4_StreamHandler *pStreamHandler, 6627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_AccessUnit *pAccessUnit) 6637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 6647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR_Context* pC = (M4READER_AMR_Context*)context; 6657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 6667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pAu; 6677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_MediaTime timeScale; 6687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AMRR_State State; 6697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pC == 0), M4ERR_PARAMETER, 6717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_getNextAu: invalid context"); 6727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 6737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_getNextAu: invalid pointer to M4_StreamHandler"); 6747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pAccessUnit == 0), M4ERR_PARAMETER, 6757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_getNextAu: invalid pointer to M4_AccessUnit"); 6767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* keep trace of the allocated buffers in AU to be able to free them at destroy() 6787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi but be aware that system is risky and would need upgrade if more than 6797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi one video and one audio AU is needed */ 6807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pStreamHandler == (M4_StreamHandler*)pC->m_pAudioStream) 6817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu = &pC->m_audioAu; 6837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 6857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4READER_AMR_getNextAu: passed StreamHandler is not known\n"); 6877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 6887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_getState(pC->m_pCoreContext, &State, pStreamHandler->m_streamId); 6917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4AMRR_kReading_nextAU == State) 6927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_freeAU(pC->m_pCoreContext, pStreamHandler->m_streamId, pAu); 6947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 6957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4READER_AVI_getNextAu: error when freeing access unit\n"); 6977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 6987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->dataAddress = M4OSA_NULL; 7007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAu->nbFrag = 0; 7037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AMRR_nextAU(pC->m_pCoreContext, pStreamHandler->m_streamId, pAu); 7047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err == M4NO_ERROR) 7067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi timeScale = (M4OSA_Float)(M4OSA_Int32)(pStreamHandler->m_pUserData)/1000; 7087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_dataAddress = (M4OSA_MemAddr8)pAu->dataAddress; 7097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_size = pAu->size; 7107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_CTS = (M4_MediaTime)pAu->CTS/*/timeScale*/; 7117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_DTS = (M4_MediaTime)pAu->DTS/*/timeScale*/; 7127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_attribute = pAu->attribute; 7137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 7157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAccessUnit->m_size=0; 7177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 7207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 7217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 7237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************* 7247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief Retrieves the generic interfaces implemented by the reader 7257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* 7267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pMediaType : Pointer on a M4READER_MediaType (allocated by the caller) 7277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* that will be filled with the media type supported by this reader 7287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pRdrGlobalInterface : Address of a pointer that will be set to the global interface implemented 7297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* by this reader. The interface is a structure allocated by the function and must 7307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* be un-allocated by the caller. 7317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pRdrDataInterface : Address of a pointer that will be set to the data interface implemented 7327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* by this reader. The interface is a structure allocated by the function and must 7337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* be un-allocated by the caller. 7347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* 7357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @returns : M4NO_ERROR if OK 7367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* ERR_ALLOC if an allocation failed 7377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* ERR_PARAMETER at least one parameter is not properly set (in DEBUG only) 7387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************* 7397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 7407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_AMR_getInterfaces(M4READER_MediaType *pMediaType, 7417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_GlobalInterface **pRdrGlobalInterface, 7427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_DataInterface **pRdrDataInterface) 7437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 7447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pMediaType == 0), M4ERR_PARAMETER, 7457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_getInterfaces: invalid pointer to MediaType"); 7467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pRdrGlobalInterface == 0), M4ERR_PARAMETER, 7477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_getInterfaces: invalid pointer to M4READER_GlobalInterface"); 7487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((pRdrDataInterface == 0), M4ERR_PARAMETER, 7497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4READER_AMR_getInterfaces: invalid pointer to M4READER_DataInterface"); 7507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pRdrGlobalInterface = 752694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu (M4READER_GlobalInterface*)M4OSA_32bitAlignedMalloc( sizeof(M4READER_GlobalInterface), 7537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR, (M4OSA_Char *)"M4READER_GlobalInterface" ); 7547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == *pRdrGlobalInterface) 7557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pRdrDataInterface = M4OSA_NULL; 7577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 7587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 759694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu *pRdrDataInterface = (M4READER_DataInterface*)M4OSA_32bitAlignedMalloc( sizeof(M4READER_DataInterface), 7607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_AMR, (M4OSA_Char *)"M4READER_DataInterface"); 7617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == *pRdrDataInterface) 7627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 763694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(*pRdrGlobalInterface); 7647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pRdrGlobalInterface = M4OSA_NULL; 7657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 7667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pMediaType = M4READER_kMediaTypeAMR; 7697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctCreate = M4READER_AMR_create; 7717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctDestroy = M4READER_AMR_destroy; 7727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctOpen = M4READER_AMR_open; 7737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctClose = M4READER_AMR_close; 7747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctGetOption = M4READER_AMR_getOption; 7757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctSetOption = M4READER_AMR_setOption; 7767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctGetNextStream = M4READER_AMR_getNextStream; 7777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctFillAuStruct = M4READER_AMR_fillAuStruct; 7787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctStart = M4OSA_NULL; 7797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctStop = M4OSA_NULL; 7807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctJump = M4READER_AMR_jump; 7817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctReset = M4READER_AMR_reset; 7827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrGlobalInterface)->m_pFctGetPrevRapTime = M4OSA_NULL; /*all AUs are RAP*/ 7837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrDataInterface)->m_pFctGetNextAu = M4READER_AMR_getNextAu; 7857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*pRdrDataInterface)->m_readerContext = M4OSA_NULL; 7877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 7897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 7907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 791