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