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