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