16e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/*
26e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * Copyright (C) 2011 The Android Open Source Project
36e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
46e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * Licensed under the Apache License, Version 2.0 (the "License");
56e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * you may not use this file except in compliance with the License.
66e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * You may obtain a copy of the License at
76e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
86e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *      http://www.apache.org/licenses/LICENSE-2.0
96e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
106e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * Unless required by applicable law or agreed to in writing, software
116e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * distributed under the License is distributed on an "AS IS" BASIS,
126e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * See the License for the specific language governing permissions and
146e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * limitations under the License.
156e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury */
166e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/**
176e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*************************************************************************
186e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @file    M4DECODER_Null.c
196e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief   Implementation of the Null decoder public interface
206e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @note    This file implements a "null" video decoder, i.e. a decoder
216e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *          that does nothing
226e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*************************************************************************
236e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/
246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury#include "NXPSW_CompilerSwitches.h"
256e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
266e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury#include "M4OSA_Types.h"
276e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury#include "M4OSA_Debug.h"
286e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury#include "M4TOOL_VersionInfo.h"
296e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury#include "M4DA_Types.h"
306e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury#include "M4DECODER_Common.h"
316e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury#include "M4DECODER_Null.h"
326e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
336e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/**
346e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
356e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * NULL Video Decoder version information
366e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
376e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/
386e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/* CHANGE_VERSION_HERE */
396e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury#define M4DECODER_NULL_MAJOR    1
406e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury#define M4DECODER_NULL_MINOR    0
416e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury#define M4DECODER_NULL_REVISION 0
426e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
436e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/**
446e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
456e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * structure    M4_VideoHandler_Context
466e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief       Defines the internal context of a video decoder instance
476e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @note        The context is allocated and freed by the video decoder
486e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
496e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/
506e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdurytypedef struct {
516e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    void*                    m_pLibrary;            // Core library identifier
526e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4OSA_Int32              m_DecoderId;           // Core decoder identifier
536e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4OSA_Int32              m_RendererId;          // Core renderer identifier
546e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4_VideoStreamHandler*   m_pVideoStreamhandler; // Video stream description
556e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4_AccessUnit*           m_pNextAccessUnitToDecode; // Access unit used to
566e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                                                        // read and decode one frame
576e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    void*                    m_pUserData;           // Pointer to any user data
586e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4READER_DataInterface*  m_pReader;             // Reader data interface
596e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4OSA_Bool               m_bDoRendering;        // Decides if render required
606e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4OSA_Int32              m_structSize;          // Size of the structure
616e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
626e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4DECODER_OutputFilter* m_pVideoFilter;         // Color conversion filter
636e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4VIFI_ImagePlane       *pDecYuvData;           // Pointer to Yuv data plane
646e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4VIFI_ImagePlane       *pDecYuvWithEffect;     // Pointer to Yuv plane with color effect
656e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4OSA_Bool               bYuvWithEffectSet;     // Original Yuv data OR Yuv with color effect
666e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
676e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury} M4_VideoHandler_Context;
686e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
696e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/***********************************************************************/
706e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/************** M4DECODER_VideoInterface implementation ****************/
716e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/***********************************************************************/
726e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
736e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/**
746e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
756e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief   Creates an instance of the decoder
766e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @note    Allocates the context
776e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
786e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   pContext:       (OUT)   Context of the decoder
796e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   pStreamHandler: (IN)    Pointer to a video stream description
806e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   pSrcInterface:  (IN)    Pointer to the M4READER_DataInterface
816e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                                  structure that must be used by the
826e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                                  decoder to read data from the stream
836e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   pAccessUnit     (IN)    Pointer to an access unit
846e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                                  (allocated by the caller) where decoded data
856e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                                  are stored
866e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
876e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4NO_ERROR              There is no error
886e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_STATE             State automaton is not applied
896e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_ALLOC             A memory allocation has failed
906e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_PARAMETER         At least one input parameter is not proper
916e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
926e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/
936e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh ChowduryM4OSA_ERR M4DECODER_NULL_create(M4OSA_Context *pContext,
946e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                                M4_StreamHandler *pStreamHandler,
95b3626dda1df18de2398d6c91647c9d544dd5f6dcChih-Chung Chang                                M4READER_GlobalInterface *pReaderGlobalInterface,
966e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                                M4READER_DataInterface *pReaderDataInterface,
976e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                                M4_AccessUnit* pAccessUnit,
986e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                                M4OSA_Void* pUserData) {
996e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1006e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4_VideoHandler_Context* pStreamContext = M4OSA_NULL;
1016e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1026e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    *pContext = M4OSA_NULL;
1036e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pStreamContext = (M4_VideoHandler_Context*)M4OSA_32bitAlignedMalloc (
1046e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                        sizeof(M4_VideoHandler_Context), M4DECODER_MPEG4,
1056e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                        (M4OSA_Char *)"M4_VideoHandler_Context");
1066e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    if (pStreamContext == 0) {
1076e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        return M4ERR_ALLOC;
1086e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    }
1096e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1106e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pStreamContext->m_structSize = sizeof(M4_VideoHandler_Context);
1116e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pStreamContext->m_pNextAccessUnitToDecode = M4OSA_NULL;
1126e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pStreamContext->m_pLibrary              = M4OSA_NULL;
1136e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pStreamContext->m_pVideoStreamhandler   = M4OSA_NULL;
1146e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pStreamContext->m_DecoderId             = -1;
1156e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pStreamContext->m_RendererId            = -1;
1166e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1176e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pStreamContext->m_pUserData = M4OSA_NULL;
1186e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pStreamContext->m_bDoRendering = M4OSA_TRUE;
1196e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pStreamContext->m_pVideoFilter = M4OSA_NULL;
1206e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pStreamContext->bYuvWithEffectSet = M4OSA_FALSE;
1216e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1226e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    *pContext=pStreamContext;
1236e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    return M4NO_ERROR;
1246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury}
1256e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1266e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/**
1276e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
1286e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief   Destroy the instance of the decoder
1296e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @note    After this call the context is invalid
1306e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
1316e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   context:    (IN)    Context of the decoder
1326e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
1336e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4NO_ERROR          There is no error
1346e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_PARAMETER     The context is invalid
1356e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
1366e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/
1376e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh ChowduryM4OSA_ERR M4DECODER_NULL_destroy(M4OSA_Context pContext) {
1386e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1396e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4_VideoHandler_Context* pStreamContext = (M4_VideoHandler_Context*)pContext;
1406e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1416e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4OSA_DEBUG_IF1((M4OSA_NULL == pStreamContext),
1426e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        M4ERR_PARAMETER, "M4DECODER_NULL_destroy: invalid context pointer");
1436e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1446e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    free(pStreamContext);
1456e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1466e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    return M4NO_ERROR;
1476e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury}
1486e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1496e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/**
1506e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
1516e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief   Get an option value from the decoder
1526e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @note    This function allows the caller to retrieve a property value:
1536e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
1546e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   context:    (IN)        Context of the decoder
1556e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   optionId:   (IN)        Indicates the option to get
1566e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   pValue:     (IN/OUT)    Pointer to structure or value where
1576e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                                  option is stored
1586e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
1596e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4NO_ERROR              There is no error
1606e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_PARAMETER         The context is invalid (in DEBUG only)
1616e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_BAD_OPTION_ID     When the option ID is not a valid one
1626e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_STATE             State automaton is not applied
1636e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_NOT_IMPLEMENTED   Function not implemented
1646e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
1656e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/
1666e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh ChowduryM4OSA_ERR M4DECODER_NULL_getOption(M4OSA_Context context,
1676e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                                   M4OSA_OptionID optionId,
1686e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                                   M4OSA_DataOption  pValue) {
1696e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1706e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    return M4ERR_NOT_IMPLEMENTED;
1716e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury}
1726e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1736e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/**
1746e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
1756e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief   Set an option value of the decoder
1766e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @note    Allows the caller to set a property value:
1776e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
1786e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   context:    (IN)        Context of the decoder
1796e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   optionId:   (IN)        Identifier indicating the option to set
1806e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   pValue:     (IN)        Pointer to structure or value
1816e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                                  where option is stored
1826e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
1836e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4NO_ERROR              There is no error
1846e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_BAD_OPTION_ID     The option ID is not a valid one
1856e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_STATE             State automaton is not applied
1866e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_PARAMETER         The option parameter is invalid
1876e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
1886e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/
1896e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh ChowduryM4OSA_ERR M4DECODER_NULL_setOption(M4OSA_Context context,
1906e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                                   M4OSA_OptionID optionId,
1916e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                                   M4OSA_DataOption pValue) {
1926e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1936e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4DECODER_OutputFilter *pFilterOption;
1946e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1956e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4_VideoHandler_Context *pStreamContext =
1966e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        (M4_VideoHandler_Context*)context;
1976e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
1986e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4OSA_ERR err = M4NO_ERROR;
1996e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4OSA_UInt32 height = 0;
2006e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4OSA_UInt8 *p_src,*p_des;
2016e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4VIFI_ImagePlane* pTempDecYuvData = M4OSA_NULL;
2026e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2036e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    switch (optionId) {
2046e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4DECODER_kOptionID_DecYuvData:
2056e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pStreamContext->pDecYuvData = (M4VIFI_ImagePlane *)pValue;
2066e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
2076e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2086e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4DECODER_kOptionID_YuvWithEffectContiguous:
2096e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pStreamContext->pDecYuvWithEffect = (M4VIFI_ImagePlane *)pValue;
2106e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
2116e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2126e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4DECODER_kOptionID_EnableYuvWithEffect:
2136e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pStreamContext->bYuvWithEffectSet = (M4OSA_Bool)pValue;
2146e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
2156e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2166e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4DECODER_kOptionID_YuvWithEffectNonContiguous:
2176e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pTempDecYuvData =  (M4VIFI_ImagePlane *)pValue;
2186e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2196e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_des = pStreamContext->pDecYuvWithEffect[0].pac_data +
2206e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pStreamContext->pDecYuvWithEffect[0].u_topleft;
2216e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_src = pTempDecYuvData[0].pac_data +
2226e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pTempDecYuvData[0].u_topleft;
2236e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            for (height = 0; height<pStreamContext->pDecYuvWithEffect[0].u_height;
2256e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             height++) {
2266e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                memcpy((void *)p_des, (void *)p_src,
2276e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pStreamContext->pDecYuvWithEffect[0].u_width);
2286e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2296e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                p_des += pStreamContext->pDecYuvWithEffect[0].u_stride;
2306e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                p_src += pTempDecYuvData[0].u_stride;
2316e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            }
2326e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2336e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_des = pStreamContext->pDecYuvWithEffect[1].pac_data +
2346e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             pStreamContext->pDecYuvWithEffect[1].u_topleft;
2356e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_src = pTempDecYuvData[1].pac_data +
2366e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             pTempDecYuvData[1].u_topleft;
2376e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2386e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            for (height = 0; height<pStreamContext->pDecYuvWithEffect[1].u_height;
2396e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             height++) {
2406e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                memcpy((void *)p_des, (void *)p_src,
2416e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pStreamContext->pDecYuvWithEffect[1].u_width);
2426e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2436e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                p_des += pStreamContext->pDecYuvWithEffect[1].u_stride;
2446e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                p_src += pTempDecYuvData[1].u_stride;
2456e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            }
2466e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2476e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_des = pStreamContext->pDecYuvWithEffect[2].pac_data +
2486e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             pStreamContext->pDecYuvWithEffect[2].u_topleft;
2496e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_src = pTempDecYuvData[2].pac_data +
2506e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             pTempDecYuvData[2].u_topleft;
2516e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2526e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            for (height = 0; height<pStreamContext->pDecYuvWithEffect[2].u_height;
2536e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             height++) {
2546e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                memcpy((void *)p_des, (void *)p_src,
2556e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pStreamContext->pDecYuvWithEffect[2].u_width);
2566e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2576e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                p_des += pStreamContext->pDecYuvWithEffect[2].u_stride;
2586e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                p_src += pTempDecYuvData[2].u_stride;
2596e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            }
2606e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
2616e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2626e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4DECODER_kOptionID_OutputFilter:
2636e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pFilterOption = (M4DECODER_OutputFilter*)pValue;
2646e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
2656e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2666e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4DECODER_kOptionID_DeblockingFilter:
2676e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            err = M4ERR_BAD_OPTION_ID;
2686e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
2696e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2706e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        default:
2716e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            err = M4ERR_BAD_OPTION_ID;
2726e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
2736e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    }
2746e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    return err;
2756e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury}
2766e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
2776e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/**
2786e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
2796e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief   Decode video Access Units up to a target time
2806e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @note    Parse and decode the video until it can output a decoded image
2816e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *          for which the composition time is equal or greater to the
2826e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *          passed targeted time.
2836e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *          The data are read from the reader data interface passed to
2846e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *          M4DECODER_MPEG4_create.
2856e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
2866e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   context:    (IN)        Context of the decoder
2876e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   pTime:      (IN/OUT)    IN: Time to decode up to (in msec)
2886e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                                  OUT:Time of the last decoded frame (in msec)
2896e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   bJump:      (IN)        0 if no jump occured just before this call
2906e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                                  1 if a a jump has just been made
2916e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4NO_ERROR              there is no error
2926e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_PARAMETER         at least one parameter is not properly set
2936e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4WAR_NO_MORE_AU        there is no more access unit to decode (EOS)
2946e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
2956e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/
2966e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh ChowduryM4OSA_ERR M4DECODER_NULL_decode(M4OSA_Context context,
297b3626dda1df18de2398d6c91647c9d544dd5f6dcChih-Chung Chang                                M4_MediaTime* pTime, M4OSA_Bool bJump,
298b3626dda1df18de2398d6c91647c9d544dd5f6dcChih-Chung Chang                                M4OSA_UInt32 tolerance) {
2996e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3006e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    // Do nothing; input time stamp itself returned
3016e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    return M4NO_ERROR;
3026e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury}
3036e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3046e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/**
3056e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
3066e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief   Renders the video at the specified time.
3076e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @note
3086e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   context:     (IN)       Context of the decoder
3096e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   pTime:       (IN/OUT)   IN: Time to render to (in msecs)
3106e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                                  OUT:Time of the rendered frame (in ms)
3116e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   pOutputPlane:(OUT)      Output plane filled with decoded data
3126e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param   bForceRender:(IN)       1 if the image must be rendered even it
3136e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                                  has been rendered already
3146e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                                  0 if not
3156e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
3166e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4NO_ERROR              There is no error
3176e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_PARAMETER         At least one parameter is not properly set
3186e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_STATE             State automaton is not applied
3196e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4ERR_ALLOC             There is no more available memory
3206e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return  M4WAR_VIDEORENDERER_NO_NEW_FRAME    If the frame has already been rendered
3216e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
3226e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/
3236e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh ChowduryM4OSA_ERR M4DECODER_NULL_render(M4OSA_Context context, M4_MediaTime* pTime,
3246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                                M4VIFI_ImagePlane* pOutputPlane,
3256e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                                M4OSA_Bool bForceRender) {
3266e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3276e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4OSA_ERR err = M4NO_ERROR;
3286e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4OSA_UInt32 height;
3296e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4OSA_UInt8 *p_src,*p_des;
3306e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4_VideoHandler_Context*    pStreamContext =
3316e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        (M4_VideoHandler_Context*)context;
3326e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3336e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    if (pStreamContext->bYuvWithEffectSet == M4OSA_TRUE) {
3346e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3356e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        p_des = pOutputPlane[0].pac_data + pOutputPlane[0].u_topleft;
3366e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        p_src = pStreamContext->pDecYuvWithEffect[0].pac_data +
3376e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury         pStreamContext->pDecYuvWithEffect[0].u_topleft;
3386e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3396e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        for (height = 0; height<pOutputPlane[0].u_height; height++) {
3406e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            memcpy((void *)p_des, (void *)p_src, pOutputPlane[0].u_width);
3416e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_des += pOutputPlane[0].u_stride;
3426e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_src += pStreamContext->pDecYuvWithEffect[0].u_stride;
3436e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        }
3446e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3456e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        p_des = pOutputPlane[1].pac_data + pOutputPlane[1].u_topleft;
3466e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        p_src = pStreamContext->pDecYuvWithEffect[1].pac_data +
3476e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury         pStreamContext->pDecYuvWithEffect[1].u_topleft;
3486e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3496e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        for (height = 0; height<pOutputPlane[1].u_height; height++) {
3506e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            memcpy((void *)p_des, (void *)p_src, pOutputPlane[1].u_width);
3516e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_des += pOutputPlane[1].u_stride;
3526e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_src += pStreamContext->pDecYuvWithEffect[1].u_stride;
3536e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        }
3546e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3556e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        p_des = pOutputPlane[2].pac_data + pOutputPlane[2].u_topleft;
3566e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        p_src = pStreamContext->pDecYuvWithEffect[2].pac_data +
3576e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury         pStreamContext->pDecYuvWithEffect[2].u_topleft;
3586e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3596e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        for (height = 0; height<pOutputPlane[2].u_height; height++) {
3606e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            memcpy((void *)p_des, (void *)p_src, pOutputPlane[2].u_width);
3616e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_des += pOutputPlane[2].u_stride;
3626e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_src += pStreamContext->pDecYuvWithEffect[2].u_stride;
3636e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        }
3646e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    } else {
3656e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3666e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        p_des = pOutputPlane[0].pac_data + pOutputPlane[0].u_topleft;
3676e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        p_src = pStreamContext->pDecYuvData[0].pac_data +
3686e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury         pStreamContext->pDecYuvData[0].u_topleft;
3696e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3706e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        for (height = 0; height<pOutputPlane[0].u_height; height++) {
3716e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            memcpy((void *)p_des, (void *)p_src, pOutputPlane[0].u_width);
3726e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_des += pOutputPlane[0].u_stride;
3736e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_src += pStreamContext->pDecYuvData[0].u_stride;
3746e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        }
3756e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3766e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        p_des = pOutputPlane[1].pac_data + pOutputPlane[1].u_topleft;
3776e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        p_src = pStreamContext->pDecYuvData[1].pac_data +
3786e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury         pStreamContext->pDecYuvData[1].u_topleft;
3796e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3806e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        for (height = 0; height<pOutputPlane[1].u_height; height++) {
3816e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            memcpy((void *)p_des, (void *)p_src, pOutputPlane[1].u_width);
3826e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_des += pOutputPlane[1].u_stride;
3836e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_src += pStreamContext->pDecYuvData[1].u_stride;
3846e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        }
3856e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3866e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        p_des = pOutputPlane[2].pac_data + pOutputPlane[2].u_topleft;
3876e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        p_src = pStreamContext->pDecYuvData[2].pac_data +
3886e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury         pStreamContext->pDecYuvData[2].u_topleft;
3896e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3906e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        for (height = 0; height<pOutputPlane[2].u_height; height++) {
3916e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            memcpy((void *)p_des,(void *)p_src,pOutputPlane[2].u_width);
3926e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_des += pOutputPlane[2].u_stride;
3936e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            p_src += pStreamContext->pDecYuvData[2].u_stride;
3946e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        }
3956e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    }
3966e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    return err;
3976e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury}
3986e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
3996e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/**
4006e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
4016e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief Retrieves the interface implemented by the decoder
4026e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param pDecoderType        : Pointer to a M4DECODER_VideoType
4036e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                             (allocated by the caller)
4046e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                             that will be filled with the decoder type
4056e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param pDecoderInterface   : Address of a pointer that will be set to
4066e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                              the interface implemented by this decoder.
4076e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                              The interface is a structure allocated by
4086e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *                              this function and must be freed by the caller.
4096e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *
4106e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @returns : M4NO_ERROR  if OK
4116e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *            M4ERR_ALLOC if allocation failed
4126e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************
4136e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/
4146e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh ChowduryM4OSA_ERR M4DECODER_NULL_getInterface (M4DECODER_VideoType *pDecoderType,
4156e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                            M4DECODER_VideoInterface **pDecoderInterface) {
4166e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
4176e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    *pDecoderInterface =
4186e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        (M4DECODER_VideoInterface*)M4OSA_32bitAlignedMalloc(
4196e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury         sizeof(M4DECODER_VideoInterface),
4206e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury         M4DECODER_MPEG4, (M4OSA_Char *)"M4DECODER_VideoInterface");
4216e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
4226e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    if (M4OSA_NULL == *pDecoderInterface) {
4236e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        return M4ERR_ALLOC;
4246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    }
4256e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
4266e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    *pDecoderType = M4DECODER_kVideoTypeYUV420P;
4276e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
4286e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    (*pDecoderInterface)->m_pFctCreate    = M4DECODER_NULL_create;
4296e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    (*pDecoderInterface)->m_pFctDestroy   = M4DECODER_NULL_destroy;
4306e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    (*pDecoderInterface)->m_pFctGetOption = M4DECODER_NULL_getOption;
4316e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    (*pDecoderInterface)->m_pFctSetOption = M4DECODER_NULL_setOption;
4326e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    (*pDecoderInterface)->m_pFctDecode    = M4DECODER_NULL_decode;
4336e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    (*pDecoderInterface)->m_pFctRender    = M4DECODER_NULL_render;
4346e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
4356e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    return M4NO_ERROR;
4366e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury}
437