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