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