M4AD_Null.c revision 694816d7291f17364502ac5d3319684a0b180860
165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/* 265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Copyright (C) 2004-2011 NXP Software 365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Copyright (C) 2011 The Android Open Source Project 465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Licensed under the Apache License, Version 2.0 (the "License"); 665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * you may not use this file except in compliance with the License. 765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * You may obtain a copy of the License at 865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * http://www.apache.org/licenses/LICENSE-2.0 1065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 1165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Unless required by applicable law or agreed to in writing, software 1265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * distributed under the License is distributed on an "AS IS" BASIS, 1365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * See the License for the specific language governing permissions and 1565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * limitations under the License. 1665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 1765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/** 1865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn************************************************************************* 1965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @file M4AD_Null.c 2065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @brief Implementation of the MP3 decoder public interface 2165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @note This file implements a "null" audio decoder, that is a decoder 2265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * that do nothing except getting AU from the reader 2365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn************************************************************************* 2465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn*/ 2565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "M4OSA_Debug.h" 2665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "M4OSA_Error.h" 2765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "M4OSA_Debug.h" 2865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "M4TOOL_VersionInfo.h" 2965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "M4AD_Common.h" 3065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "M4AD_Null.h" 3165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 3265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define M4AD_FORCE_16BITS 3365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 3465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/** 3565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 3665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * NULL Audio Decoder version information 3765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 3865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn*/ 3965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/* CHANGE_VERSION_HERE */ 4065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define M4AD_NULL_MAJOR 1 4165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define M4AD_NULL_MINOR 1 4265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define M4AD_NULL_REVISION 4 4365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 4465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/** 4565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 4665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * structure M4AD_NullContext 4765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @brief Internal null decoder context 4865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 4965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn*/ 5065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntypedef struct 5165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn{ 5265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /**< Pointer to the stream handler provided by the user */ 5365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4_AudioStreamHandler* m_pAudioStreamhandler; 5465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} M4AD_NullContext; 5565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/** 5865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 5965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * NXP MP3 decoder functions definition 6065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 6165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn*/ 6265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 6365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/** 6465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 6565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @brief Creates an instance of the null decoder 6665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @note Allocates the context 6765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 6865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @param pContext: (OUT) Context of the decoder 6965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @param pStreamHandler: (IN) Pointer to an audio stream description 7065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @param pUserData: (IN) Pointer to User data 7165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 7265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @return M4NO_ERROR there is no error 7365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @return M4ERR_STATE State automaton is not applied 7465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @return M4ERR_ALLOC a memory allocation has failed 7565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @return M4ERR_PARAMETER at least one parameter is not properly set (in DEBUG only) 7665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 7765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn*/ 7865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennM4OSA_ERR M4AD_NULL_create( M4AD_Context* pContext, 7965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4_AudioStreamHandler *pStreamHandler, 8065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn void* pUserData) 8165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn{ 8265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4AD_NullContext* pC; 8365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 8465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4OSA_DEBUG_IF1((pContext == 0), M4ERR_PARAMETER, 8565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn "M4AD_NULL_create: invalid context pointer"); 8665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER, 8765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn "M4AD_NULL_create: invalid pointer pStreamHandler"); 8865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 8965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn pC = (M4AD_NullContext*)M4OSA_32bitAlignedMalloc(sizeof(M4AD_NullContext), 9065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4DECODER_AUDIO, (M4OSA_Char *)"M4AD_NullContext"); 9165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (pC == (M4AD_NullContext*)0) 9265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn { 9365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4OSA_TRACE1_0("Can not allocate null decoder context"); 9465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return M4ERR_ALLOC; 9565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 9665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 9765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *pContext = pC; 9865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 9965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn pC->m_pAudioStreamhandler = pStreamHandler; 10065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 10165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return M4NO_ERROR; 10265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 10365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 10465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/** 10565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 10665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @brief Destroys the instance of the null decoder 10765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @note After this call the context is invalid 10865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 10965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @param context: (IN) Context of the decoder 11065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 11165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @return M4NO_ERROR There is no error 11265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @return M4ERR_PARAMETER The context is invalid (in DEBUG only) 11365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 11465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn*/ 11565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennM4OSA_ERR M4AD_NULL_destroy(M4AD_Context context) 11665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn{ 11765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4AD_NullContext* pC = (M4AD_NullContext*)context; 11865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 11965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4OSA_DEBUG_IF1((context == M4OSA_NULL), M4ERR_PARAMETER, "M4AD_NULL_destroy: invalid context"); 12065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 12165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn free(pC); 12265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 12365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return M4NO_ERROR; 12465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 12565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 12665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/** 12765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 12865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @brief Simply output the given audio data 12965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @note 13065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 13165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @param context: (IN) Context of the decoder 13265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @param pInputBuffer: (IN/OUT)Input Data buffer. It contains at least one audio frame. 13365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * The size of the buffer must be updated inside the function 13465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * to reflect the size of the actually decoded data. 13565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * (e.g. the first frame in pInputBuffer) 13665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @param pDecodedPCMBuffer: (OUT) Output PCM buffer (decoded data). 13765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @param jumping: (IN) M4OSA_TRUE if a jump was just done, M4OSA_FALSE otherwise. 13865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @return M4NO_ERROR there is no error 13965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @return M4ERR_PARAMETER at least one parameter is not properly set 14065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 14165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn*/ 14265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennM4OSA_ERR M4AD_NULL_step(M4AD_Context context, M4AD_Buffer *pInputBuffer, 14365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4AD_Buffer *pDecodedPCMBuffer, M4OSA_Bool jumping) 14465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn{ 14565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4AD_NullContext* pC = (M4AD_NullContext*)context; 14665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 14765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /*The VPS sends a zero buffer at the end*/ 14865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (0 == pInputBuffer->m_bufferSize) 14965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn { 15065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return M4WAR_NO_MORE_AU; 15165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 15265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 15365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (pInputBuffer->m_bufferSize > pDecodedPCMBuffer->m_bufferSize) 15465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn { 15565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return M4ERR_PARAMETER; 15665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 15765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#ifdef M4AD_FORCE_16BITS 15865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /*if read samples are 8 bits, complete them to 16 bits*/ 15965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (pC->m_pAudioStreamhandler->m_byteSampleSize == 1) 16065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn { 16165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4OSA_UInt32 i; 16265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4OSA_Int16 val; 16365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 16465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn for (i = 0; i < pInputBuffer->m_bufferSize; i++) 16565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn { 16665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn val = (M4OSA_Int16)((M4OSA_UInt8)(pInputBuffer->m_dataAddress[i]) - 128); 16765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 16865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn pDecodedPCMBuffer->m_dataAddress[i*2] = (M4OSA_Int8)(val>>8); 16965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn pDecodedPCMBuffer->m_dataAddress[i*2+1] = (M4OSA_Int8)(val&0x00ff); 17065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 17165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 17265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn else 17365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn { 17465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn memcpy((void *)pDecodedPCMBuffer->m_dataAddress, (void *)pInputBuffer->m_dataAddress, 17565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn pInputBuffer->m_bufferSize ); 17665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 17765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#else /*M4AD_FORCE_16BITS*/ 17865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn memcpy((void *)pDecodedPCMBuffer->m_dataAddress, (void *)pInputBuffer->m_dataAddress, 17965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn pInputBuffer->m_bufferSize ); 18065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#endif /*M4AD_FORCE_16BITS*/ 18165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 18265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return M4NO_ERROR; 18365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 18465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 18565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/** 18665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 18765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @brief Gets the decoder version 18865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @note The version is given in a M4_VersionInfo structure 18965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 19065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @param pValue: (OUT) Pointer to the version structure 19165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 19265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @return M4NO_ERROR there is no error 19365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @return M4ERR_PARAMETER pVersionInfo pointer is null (in DEBUG only) 19465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 19565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn*/ 19665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennM4OSA_ERR M4AD_NULL_getVersion(M4_VersionInfo* pVersionInfo) 19765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn{ 19865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4OSA_ERR err = M4NO_ERROR; 19965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4OSA_DEBUG_IF1((pVersionInfo == 0), M4ERR_PARAMETER, 20065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn "M4AD_NULL_getVersion: invalid pointer pVersionInfo"); 20165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 20265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /* Up until now, the null decoder version is not available */ 20365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 20465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /* CHANGE_VERSION_HERE */ 20565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn pVersionInfo->m_major = M4AD_NULL_MAJOR; /*major version of the component*/ 20665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn pVersionInfo->m_minor = M4AD_NULL_MINOR; /*minor version of the component*/ 20765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn pVersionInfo->m_revision = M4AD_NULL_REVISION; /*revision version of the component*/ 20865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn pVersionInfo->m_structSize=sizeof(M4_VersionInfo); 20965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 21065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return err; 21165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 21265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 21365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 21465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/** 21565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 21665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * getInterface function definitions of NXP MP3 decoder 21765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 21865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn*/ 21965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 22065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/** 22165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 22265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @brief Retrieves the interface implemented by the decoder 22365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @param pDecoderType : pointer on an M4AD_Type (allocated by the caller) 22465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * that will be filled with the decoder type supported by 22565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * this decoder 22665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @param pDecoderInterface : address of a pointer that will be set to the interface 22765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * implemented by this decoder. The interface is a structure 22865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * allocated by the function and must be un-allocated by the 22965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * caller. 23065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 23165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @return M4NO_ERROR if OK 23265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @return M4ERR_ALLOC if allocation failed 23365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ************************************************************************ 23465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn*/ 23565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennM4OSA_ERR M4AD_NULL_getInterface( M4AD_Type *pDecoderType, M4AD_Interface **pDecoderInterface) 23665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn{ 23765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *pDecoderInterface = ( M4AD_Interface*)M4OSA_32bitAlignedMalloc( sizeof(M4AD_Interface), 23865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn M4DECODER_AUDIO, (M4OSA_Char *)"M4AD_Interface" ); 23965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (M4OSA_NULL == *pDecoderInterface) 24065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn { 24165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return M4ERR_ALLOC; 24265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 24365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 24465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *pDecoderType = M4AD_kTypePCM; 24565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 24665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn (*pDecoderInterface)->m_pFctCreateAudioDec = M4AD_NULL_create; 24765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn (*pDecoderInterface)->m_pFctDestroyAudioDec = M4AD_NULL_destroy; 248 (*pDecoderInterface)->m_pFctStepAudioDec = M4AD_NULL_step; 249 (*pDecoderInterface)->m_pFctGetVersionAudioDec = M4AD_NULL_getVersion; 250 (*pDecoderInterface)->m_pFctStartAudioDec = M4OSA_NULL; 251 (*pDecoderInterface)->m_pFctResetAudioDec = M4OSA_NULL; 252 (*pDecoderInterface)->m_pFctSetOptionAudioDec = M4OSA_NULL; 253 (*pDecoderInterface)->m_pFctGetOptionAudioDec = M4OSA_NULL; 254 255 return M4NO_ERROR; 256} 257 258