17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*
27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License.
67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at
77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and
147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License.
157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*************************************************************************
187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file    M4AD_Null.c
197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Implementation of the MP3 decoder public interface
207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    This file implements a "null" audio decoder, that is a decoder
217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          that do nothing except getting AU from the reader
227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*************************************************************************
237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h"
257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Error.h"
267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h"
277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4TOOL_VersionInfo.h"
287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4AD_Common.h"
297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4AD_Null.h"
307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4AD_FORCE_16BITS
327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * NULL Audio Decoder version information
367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* CHANGE_VERSION_HERE */
397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4AD_NULL_MAJOR    1
407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4AD_NULL_MINOR    1
417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4AD_NULL_REVISION 4
427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure    M4AD_NullContext
467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief        Internal null decoder context
477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct
507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**< Pointer to the stream handler provided by the user */
527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_AudioStreamHandler*    m_pAudioStreamhandler;
537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4AD_NullContext;
547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * NXP MP3 decoder functions definition
597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Creates an instance of the null decoder
657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    Allocates the context
667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext:        (OUT)    Context of the decoder
687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pStreamHandler: (IN)    Pointer to an audio stream description
697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pUserData:        (IN)    Pointer to User data
707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR              there is no error
727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_STATE             State automaton is not applied
737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_ALLOC             a memory allocation has failed
747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER         at least one parameter is not properly set (in DEBUG only)
757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR    M4AD_NULL_create(  M4AD_Context* pContext,
787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                M4_AudioStreamHandler *pStreamHandler,
797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                void* pUserData)
807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4AD_NullContext* pC;
827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pContext == 0), M4ERR_PARAMETER,
847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4AD_NULL_create: invalid context pointer");
857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER,
867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4AD_NULL_create: invalid pointer pStreamHandler");
877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
88694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    pC = (M4AD_NullContext*)M4OSA_32bitAlignedMalloc(sizeof(M4AD_NullContext),
897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                 M4DECODER_AUDIO, (M4OSA_Char *)"M4AD_NullContext");
907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (pC == (M4AD_NullContext*)0)
917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0("Can not allocate null decoder context");
937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_ALLOC;
947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *pContext = pC;
977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pAudioStreamhandler = pStreamHandler;
997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Destroys the instance of the null decoder
1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note     After this call the context is invalid
1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    context:    (IN)    Context of the decoder
1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return   M4NO_ERROR            There is no error
1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return   M4ERR_PARAMETER     The context is invalid (in DEBUG only)
1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR    M4AD_NULL_destroy(M4AD_Context context)
1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4AD_NullContext* pC = (M4AD_NullContext*)context;
1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((context == M4OSA_NULL), M4ERR_PARAMETER, "M4AD_NULL_destroy: invalid context");
1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
120694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    free(pC);
1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Simply output the given audio data
1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   context:          (IN)    Context of the decoder
1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pInputBuffer:     (IN/OUT)Input Data buffer. It contains at least one audio frame.
1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                    The size of the buffer must be updated inside the function
1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                    to reflect the size of the actually decoded data.
1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                    (e.g. the first frame in pInputBuffer)
1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pDecodedPCMBuffer: (OUT)  Output PCM buffer (decoded data).
1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   jumping:           (IN)   M4OSA_TRUE if a jump was just done, M4OSA_FALSE otherwise.
1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR              there is no error
1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER         at least one parameter is not properly set
1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR    M4AD_NULL_step(M4AD_Context context, M4AD_Buffer *pInputBuffer,
1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            M4AD_Buffer *pDecodedPCMBuffer, M4OSA_Bool jumping)
1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4AD_NullContext* pC = (M4AD_NullContext*)context;
1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*The VPS sends a zero buffer at the end*/
1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (0 == pInputBuffer->m_bufferSize)
1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4WAR_NO_MORE_AU;
1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (pInputBuffer->m_bufferSize > pDecodedPCMBuffer->m_bufferSize)
1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_PARAMETER;
1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4AD_FORCE_16BITS
1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*if read samples are 8 bits, complete them to 16 bits*/
1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (pC->m_pAudioStreamhandler->m_byteSampleSize == 1)
1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_UInt32 i;
1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_Int16  val;
1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        for (i = 0; i < pInputBuffer->m_bufferSize; i++)
1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            val = (M4OSA_Int16)((M4OSA_UInt8)(pInputBuffer->m_dataAddress[i]) - 128);
1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pDecodedPCMBuffer->m_dataAddress[i*2]   = (M4OSA_Int8)(val>>8);
1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pDecodedPCMBuffer->m_dataAddress[i*2+1] = (M4OSA_Int8)(val&0x00ff);
1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17332ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu        memcpy((void *)pDecodedPCMBuffer->m_dataAddress, (void *)pInputBuffer->m_dataAddress,
1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pInputBuffer->m_bufferSize );
1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else /*M4AD_FORCE_16BITS*/
17732ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu    memcpy((void *)pDecodedPCMBuffer->m_dataAddress, (void *)pInputBuffer->m_dataAddress,
1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pInputBuffer->m_bufferSize );
1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*M4AD_FORCE_16BITS*/
1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Gets the decoder version
1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    The version is given in a M4_VersionInfo structure
1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pValue:     (OUT)       Pointer to the version structure
1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR              there is no error
1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_PARAMETER         pVersionInfo pointer is null (in DEBUG only)
1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR    M4AD_NULL_getVersion(M4_VersionInfo* pVersionInfo)
1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pVersionInfo == 0), M4ERR_PARAMETER,
1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4AD_NULL_getVersion: invalid pointer pVersionInfo");
2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Up until now, the null decoder version is not available */
2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* CHANGE_VERSION_HERE */
2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pVersionInfo->m_major        = M4AD_NULL_MAJOR;      /*major version of the component*/
2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pVersionInfo->m_minor        = M4AD_NULL_MINOR;      /*minor version of the component*/
2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pVersionInfo->m_revision    = M4AD_NULL_REVISION;    /*revision version of the component*/
2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pVersionInfo->m_structSize=sizeof(M4_VersionInfo);
2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * getInterface function definitions of NXP MP3 decoder
2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Retrieves the interface implemented by the decoder
2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pDecoderType        : pointer on an M4AD_Type (allocated by the caller)
2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                              that will be filled with the decoder type supported by
2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                              this decoder
2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pDecoderInterface   : address of a pointer that will be set to the interface
2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                              implemented by this decoder. The interface is a structure
2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                              allocated by the function and must be un-allocated by the
2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                              caller.
2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR  if OK
2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_ALLOC if allocation failed
2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4AD_NULL_getInterface( M4AD_Type *pDecoderType, M4AD_Interface **pDecoderInterface)
2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
236694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    *pDecoderInterface = (  M4AD_Interface*)M4OSA_32bitAlignedMalloc( sizeof(M4AD_Interface),
2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            M4DECODER_AUDIO, (M4OSA_Char *)"M4AD_Interface" );
2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL == *pDecoderInterface)
2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_ALLOC;
2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *pDecoderType = M4AD_kTypePCM;
2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pDecoderInterface)->m_pFctCreateAudioDec       = M4AD_NULL_create;
2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pDecoderInterface)->m_pFctDestroyAudioDec      = M4AD_NULL_destroy;
2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pDecoderInterface)->m_pFctStepAudioDec         = M4AD_NULL_step;
2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pDecoderInterface)->m_pFctGetVersionAudioDec   = M4AD_NULL_getVersion;
2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pDecoderInterface)->m_pFctStartAudioDec        = M4OSA_NULL;
2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pDecoderInterface)->m_pFctResetAudioDec        = M4OSA_NULL;
2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pDecoderInterface)->m_pFctSetOptionAudioDec    = M4OSA_NULL;
2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pDecoderInterface)->m_pFctGetOptionAudioDec    = M4OSA_NULL;
2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
257