M4DECODER_Null.c revision 6e779fda8a4f6258f9b910290b2f296d18fb2585
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, 956e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4READER_DataInterface *pReaderDataInterface, 966e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4_AccessUnit* pAccessUnit, 976e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4OSA_Void* pUserData) { 986e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 996e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4_VideoHandler_Context* pStreamContext = M4OSA_NULL; 1006e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1016e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *pContext = M4OSA_NULL; 1026e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext = (M4_VideoHandler_Context*)M4OSA_32bitAlignedMalloc ( 1036e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury sizeof(M4_VideoHandler_Context), M4DECODER_MPEG4, 1046e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury (M4OSA_Char *)"M4_VideoHandler_Context"); 1056e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury if (pStreamContext == 0) { 1066e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury return M4ERR_ALLOC; 1076e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } 1086e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1096e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->m_structSize = sizeof(M4_VideoHandler_Context); 1106e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->m_pNextAccessUnitToDecode = M4OSA_NULL; 1116e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->m_pLibrary = M4OSA_NULL; 1126e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->m_pVideoStreamhandler = M4OSA_NULL; 1136e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->m_DecoderId = -1; 1146e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->m_RendererId = -1; 1156e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1166e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->m_pUserData = M4OSA_NULL; 1176e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->m_bDoRendering = M4OSA_TRUE; 1186e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->m_pVideoFilter = M4OSA_NULL; 1196e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->bYuvWithEffectSet = M4OSA_FALSE; 1206e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1216e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *pContext=pStreamContext; 1226e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury return M4NO_ERROR; 1236e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury} 1246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1256e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/** 1266e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************ 1276e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief Destroy the instance of the decoder 1286e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @note After this call the context is invalid 1296e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * 1306e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param context: (IN) Context of the decoder 1316e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * 1326e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4NO_ERROR There is no error 1336e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4ERR_PARAMETER The context is invalid 1346e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************ 1356e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/ 1366e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh ChowduryM4OSA_ERR M4DECODER_NULL_destroy(M4OSA_Context pContext) { 1376e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1386e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4_VideoHandler_Context* pStreamContext = (M4_VideoHandler_Context*)pContext; 1396e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1406e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4OSA_DEBUG_IF1((M4OSA_NULL == pStreamContext), 1416e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4ERR_PARAMETER, "M4DECODER_NULL_destroy: invalid context pointer"); 1426e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1436e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury free(pStreamContext); 1446e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1456e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury return M4NO_ERROR; 1466e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury} 1476e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1486e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/** 1496e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************ 1506e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief Get an option value from the decoder 1516e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @note This function allows the caller to retrieve a property value: 1526e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * 1536e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param context: (IN) Context of the decoder 1546e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param optionId: (IN) Indicates the option to get 1556e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param pValue: (IN/OUT) Pointer to structure or value where 1566e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * option is stored 1576e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * 1586e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4NO_ERROR There is no error 1596e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4ERR_PARAMETER The context is invalid (in DEBUG only) 1606e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4ERR_BAD_OPTION_ID When the option ID is not a valid one 1616e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4ERR_STATE State automaton is not applied 1626e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4ERR_NOT_IMPLEMENTED Function not implemented 1636e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************ 1646e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/ 1656e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh ChowduryM4OSA_ERR M4DECODER_NULL_getOption(M4OSA_Context context, 1666e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4OSA_OptionID optionId, 1676e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4OSA_DataOption pValue) { 1686e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1696e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury return M4ERR_NOT_IMPLEMENTED; 1706e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury} 1716e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1726e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/** 1736e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************ 1746e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief Set an option value of the decoder 1756e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @note Allows the caller to set a property value: 1766e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * 1776e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param context: (IN) Context of the decoder 1786e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param optionId: (IN) Identifier indicating the option to set 1796e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param pValue: (IN) Pointer to structure or value 1806e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * where option is stored 1816e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * 1826e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4NO_ERROR There is no error 1836e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4ERR_BAD_OPTION_ID The option ID is not a valid one 1846e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4ERR_STATE State automaton is not applied 1856e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4ERR_PARAMETER The option parameter is invalid 1866e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************ 1876e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/ 1886e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh ChowduryM4OSA_ERR M4DECODER_NULL_setOption(M4OSA_Context context, 1896e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4OSA_OptionID optionId, 1906e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4OSA_DataOption pValue) { 1916e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1926e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4DECODER_OutputFilter *pFilterOption; 1936e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1946e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4_VideoHandler_Context *pStreamContext = 1956e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury (M4_VideoHandler_Context*)context; 1966e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 1976e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4OSA_ERR err = M4NO_ERROR; 1986e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4OSA_UInt32 height = 0; 1996e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4OSA_UInt8 *p_src,*p_des; 2006e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4VIFI_ImagePlane* pTempDecYuvData = M4OSA_NULL; 2016e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2026e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury switch (optionId) { 2036e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury case M4DECODER_kOptionID_DecYuvData: 2046e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvData = (M4VIFI_ImagePlane *)pValue; 2056e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury break; 2066e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2076e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury case M4DECODER_kOptionID_YuvWithEffectContiguous: 2086e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvWithEffect = (M4VIFI_ImagePlane *)pValue; 2096e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury break; 2106e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2116e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury case M4DECODER_kOptionID_EnableYuvWithEffect: 2126e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->bYuvWithEffectSet = (M4OSA_Bool)pValue; 2136e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury break; 2146e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2156e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury case M4DECODER_kOptionID_YuvWithEffectNonContiguous: 2166e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pTempDecYuvData = (M4VIFI_ImagePlane *)pValue; 2176e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2186e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des = pStreamContext->pDecYuvWithEffect[0].pac_data + 2196e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvWithEffect[0].u_topleft; 2206e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src = pTempDecYuvData[0].pac_data + 2216e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pTempDecYuvData[0].u_topleft; 2226e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2236e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury for (height = 0; height<pStreamContext->pDecYuvWithEffect[0].u_height; 2246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury height++) { 2256e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury memcpy((void *)p_des, (void *)p_src, 2266e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvWithEffect[0].u_width); 2276e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2286e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des += pStreamContext->pDecYuvWithEffect[0].u_stride; 2296e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src += pTempDecYuvData[0].u_stride; 2306e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } 2316e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2326e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des = pStreamContext->pDecYuvWithEffect[1].pac_data + 2336e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvWithEffect[1].u_topleft; 2346e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src = pTempDecYuvData[1].pac_data + 2356e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pTempDecYuvData[1].u_topleft; 2366e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2376e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury for (height = 0; height<pStreamContext->pDecYuvWithEffect[1].u_height; 2386e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury height++) { 2396e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury memcpy((void *)p_des, (void *)p_src, 2406e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvWithEffect[1].u_width); 2416e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2426e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des += pStreamContext->pDecYuvWithEffect[1].u_stride; 2436e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src += pTempDecYuvData[1].u_stride; 2446e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } 2456e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2466e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des = pStreamContext->pDecYuvWithEffect[2].pac_data + 2476e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvWithEffect[2].u_topleft; 2486e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src = pTempDecYuvData[2].pac_data + 2496e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pTempDecYuvData[2].u_topleft; 2506e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2516e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury for (height = 0; height<pStreamContext->pDecYuvWithEffect[2].u_height; 2526e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury height++) { 2536e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury memcpy((void *)p_des, (void *)p_src, 2546e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvWithEffect[2].u_width); 2556e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2566e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des += pStreamContext->pDecYuvWithEffect[2].u_stride; 2576e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src += pTempDecYuvData[2].u_stride; 2586e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } 2596e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury break; 2606e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2616e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury case M4DECODER_kOptionID_OutputFilter: 2626e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pFilterOption = (M4DECODER_OutputFilter*)pValue; 2636e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury break; 2646e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2656e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury case M4DECODER_kOptionID_DeblockingFilter: 2666e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury err = M4ERR_BAD_OPTION_ID; 2676e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury break; 2686e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2696e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury default: 2706e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury err = M4ERR_BAD_OPTION_ID; 2716e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury break; 2726e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } 2736e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury return err; 2746e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury} 2756e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2766e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/** 2776e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************ 2786e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief Decode video Access Units up to a target time 2796e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @note Parse and decode the video until it can output a decoded image 2806e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * for which the composition time is equal or greater to the 2816e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * passed targeted time. 2826e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * The data are read from the reader data interface passed to 2836e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * M4DECODER_MPEG4_create. 2846e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * 2856e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param context: (IN) Context of the decoder 2866e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param pTime: (IN/OUT) IN: Time to decode up to (in msec) 2876e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * OUT:Time of the last decoded frame (in msec) 2886e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param bJump: (IN) 0 if no jump occured just before this call 2896e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * 1 if a a jump has just been made 2906e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4NO_ERROR there is no error 2916e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4ERR_PARAMETER at least one parameter is not properly set 2926e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4WAR_NO_MORE_AU there is no more access unit to decode (EOS) 2936e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************ 2946e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/ 2956e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh ChowduryM4OSA_ERR M4DECODER_NULL_decode(M4OSA_Context context, 2966e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4_MediaTime* pTime, M4OSA_Bool bJump) { 2976e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 2986e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury // Do nothing; input time stamp itself returned 2996e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury return M4NO_ERROR; 3006e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury} 3016e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3026e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/** 3036e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************ 3046e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief Renders the video at the specified time. 3056e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @note 3066e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param context: (IN) Context of the decoder 3076e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param pTime: (IN/OUT) IN: Time to render to (in msecs) 3086e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * OUT:Time of the rendered frame (in ms) 3096e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param pOutputPlane:(OUT) Output plane filled with decoded data 3106e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param bForceRender:(IN) 1 if the image must be rendered even it 3116e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * has been rendered already 3126e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * 0 if not 3136e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * 3146e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4NO_ERROR There is no error 3156e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4ERR_PARAMETER At least one parameter is not properly set 3166e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4ERR_STATE State automaton is not applied 3176e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4ERR_ALLOC There is no more available memory 3186e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @return M4WAR_VIDEORENDERER_NO_NEW_FRAME If the frame has already been rendered 3196e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************ 3206e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/ 3216e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh ChowduryM4OSA_ERR M4DECODER_NULL_render(M4OSA_Context context, M4_MediaTime* pTime, 3226e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4VIFI_ImagePlane* pOutputPlane, 3236e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4OSA_Bool bForceRender) { 3246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3256e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4OSA_ERR err = M4NO_ERROR; 3266e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4OSA_UInt32 height; 3276e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4OSA_UInt8 *p_src,*p_des; 3286e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4_VideoHandler_Context* pStreamContext = 3296e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury (M4_VideoHandler_Context*)context; 3306e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3316e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury if (pStreamContext->bYuvWithEffectSet == M4OSA_TRUE) { 3326e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3336e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des = pOutputPlane[0].pac_data + pOutputPlane[0].u_topleft; 3346e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src = pStreamContext->pDecYuvWithEffect[0].pac_data + 3356e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvWithEffect[0].u_topleft; 3366e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3376e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury for (height = 0; height<pOutputPlane[0].u_height; height++) { 3386e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury memcpy((void *)p_des, (void *)p_src, pOutputPlane[0].u_width); 3396e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des += pOutputPlane[0].u_stride; 3406e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src += pStreamContext->pDecYuvWithEffect[0].u_stride; 3416e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } 3426e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3436e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des = pOutputPlane[1].pac_data + pOutputPlane[1].u_topleft; 3446e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src = pStreamContext->pDecYuvWithEffect[1].pac_data + 3456e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvWithEffect[1].u_topleft; 3466e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3476e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury for (height = 0; height<pOutputPlane[1].u_height; height++) { 3486e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury memcpy((void *)p_des, (void *)p_src, pOutputPlane[1].u_width); 3496e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des += pOutputPlane[1].u_stride; 3506e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src += pStreamContext->pDecYuvWithEffect[1].u_stride; 3516e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } 3526e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3536e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des = pOutputPlane[2].pac_data + pOutputPlane[2].u_topleft; 3546e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src = pStreamContext->pDecYuvWithEffect[2].pac_data + 3556e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvWithEffect[2].u_topleft; 3566e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3576e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury for (height = 0; height<pOutputPlane[2].u_height; height++) { 3586e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury memcpy((void *)p_des, (void *)p_src, pOutputPlane[2].u_width); 3596e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des += pOutputPlane[2].u_stride; 3606e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src += pStreamContext->pDecYuvWithEffect[2].u_stride; 3616e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } 3626e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } else { 3636e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3646e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des = pOutputPlane[0].pac_data + pOutputPlane[0].u_topleft; 3656e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src = pStreamContext->pDecYuvData[0].pac_data + 3666e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvData[0].u_topleft; 3676e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3686e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury for (height = 0; height<pOutputPlane[0].u_height; height++) { 3696e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury memcpy((void *)p_des, (void *)p_src, pOutputPlane[0].u_width); 3706e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des += pOutputPlane[0].u_stride; 3716e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src += pStreamContext->pDecYuvData[0].u_stride; 3726e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } 3736e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3746e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des = pOutputPlane[1].pac_data + pOutputPlane[1].u_topleft; 3756e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src = pStreamContext->pDecYuvData[1].pac_data + 3766e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvData[1].u_topleft; 3776e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3786e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury for (height = 0; height<pOutputPlane[1].u_height; height++) { 3796e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury memcpy((void *)p_des, (void *)p_src, pOutputPlane[1].u_width); 3806e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des += pOutputPlane[1].u_stride; 3816e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src += pStreamContext->pDecYuvData[1].u_stride; 3826e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } 3836e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3846e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des = pOutputPlane[2].pac_data + pOutputPlane[2].u_topleft; 3856e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src = pStreamContext->pDecYuvData[2].pac_data + 3866e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pStreamContext->pDecYuvData[2].u_topleft; 3876e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3886e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury for (height = 0; height<pOutputPlane[2].u_height; height++) { 3896e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury memcpy((void *)p_des,(void *)p_src,pOutputPlane[2].u_width); 3906e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_des += pOutputPlane[2].u_stride; 3916e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury p_src += pStreamContext->pDecYuvData[2].u_stride; 3926e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } 3936e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } 3946e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury return err; 3956e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury} 3966e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 3976e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury/** 3986e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************ 3996e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @brief Retrieves the interface implemented by the decoder 4006e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param pDecoderType : Pointer to a M4DECODER_VideoType 4016e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * (allocated by the caller) 4026e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * that will be filled with the decoder type 4036e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @param pDecoderInterface : Address of a pointer that will be set to 4046e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * the interface implemented by this decoder. 4056e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * The interface is a structure allocated by 4066e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * this function and must be freed by the caller. 4076e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * 4086e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * @returns : M4NO_ERROR if OK 4096e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury * M4ERR_ALLOC if allocation failed 4106e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury ************************************************************************ 4116e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury*/ 4126e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh ChowduryM4OSA_ERR M4DECODER_NULL_getInterface (M4DECODER_VideoType *pDecoderType, 4136e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4DECODER_VideoInterface **pDecoderInterface) { 4146e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 4156e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *pDecoderInterface = 4166e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury (M4DECODER_VideoInterface*)M4OSA_32bitAlignedMalloc( 4176e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury sizeof(M4DECODER_VideoInterface), 4186e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4DECODER_MPEG4, (M4OSA_Char *)"M4DECODER_VideoInterface"); 4196e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 4206e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury if (M4OSA_NULL == *pDecoderInterface) { 4216e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury return M4ERR_ALLOC; 4226e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury } 4236e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 4246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury *pDecoderType = M4DECODER_kVideoTypeYUV420P; 4256e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 4266e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury (*pDecoderInterface)->m_pFctCreate = M4DECODER_NULL_create; 4276e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury (*pDecoderInterface)->m_pFctDestroy = M4DECODER_NULL_destroy; 4286e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury (*pDecoderInterface)->m_pFctGetOption = M4DECODER_NULL_getOption; 4296e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury (*pDecoderInterface)->m_pFctSetOption = M4DECODER_NULL_setOption; 4306e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury (*pDecoderInterface)->m_pFctDecode = M4DECODER_NULL_decode; 4316e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury (*pDecoderInterface)->m_pFctRender = M4DECODER_NULL_render; 4326e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury 4336e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury return M4NO_ERROR; 4346e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury} 435