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