17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* 27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License. 67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at 77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and 147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License. 157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************* 187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file M4MCS_VideoPreProcessing.c 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief MCS implementation 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This file implements the encoder callback of the MCS. 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************* 227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi **/ 237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************** 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Includes 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************** 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* OSAL headers */ 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Memory.h" /* OSAL memory management */ 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h" /* OSAL debug management */ 327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Core headers */ 357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MCS_InternalTypes.h" 367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MCS_ErrorCodes.h" 377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Video preprocessing interface definition */ 407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VPP_API.h" 417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Video filters */ 447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VIFI_FiltersAPI.h" /**< for M4VIFI_ResizeBilinearYUV420toYUV420() */ 457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef M4MCS_AUDIOONLY 477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4AIR_API.h" 487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*M4MCS_AUDIOONLY*/ 497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**/ 507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* 557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_intApplyVPP(M4VPP_Context pContext, M4VIFI_ImagePlane* pPlaneIn, 577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane* pPlaneOut) 587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Do the video rendering and the resize (if needed) 597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note It is called by the video encoder 607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) VPP context, which actually is the MCS internal context in our case 617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pPlaneIn (IN) Contains the image 627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pPlaneOut (IN/OUT) Pointer to an array of 3 planes that will contain the output 637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * YUV420 image 647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4MCS_ERR_VIDEO_DECODE_ERROR: the video decoding failed 667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4MCS_ERR_RESIZE_ERROR: the resizing failed 677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return Any error returned by an underlaying module 687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_intApplyVPP(M4VPP_Context pContext, M4VIFI_ImagePlane* pPlaneIn, 717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane* pPlaneOut) 727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* This part is used only if video codecs are compiled*/ 767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef M4MCS_AUDIOONLY 777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * The VPP context is actually the MCS context! */ 797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext*)(pContext); 807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_MediaTime mtCts = pC->dViDecCurrentCts; 827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * When Closing after an error occured, it may happen that pReaderVideoAU->m_dataAddress has 857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * not been allocated yet. When closing in pause mode, the decoder can be null. 867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We don't want an error to be returned because it would interrupt the close process and 877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * thus some resources would be locked. So we return M4NO_ERROR. 887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Initialize to black plane the output plane if the media rendering 907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi is black borders */ 917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->MediaRendering == M4MCS_kBlackBorders) 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9332ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pPlaneOut[0].pac_data,Y_PLANE_BORDER_VALUE, 9432ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (pPlaneOut[0].u_height*pPlaneOut[0].u_stride)); 9532ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pPlaneOut[1].pac_data,U_PLANE_BORDER_VALUE, 9632ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (pPlaneOut[1].u_height*pPlaneOut[1].u_stride)); 9732ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pPlaneOut[2].pac_data,V_PLANE_BORDER_VALUE, 9832ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (pPlaneOut[2].u_height*pPlaneOut[2].u_stride)); 997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if ((M4OSA_NULL == pC->ReaderVideoAU.m_dataAddress) || 1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_NULL == pC->pViDecCtxt)) 1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We must fill the input of the encoder with a dummy image, because 1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * encoding noise leads to a huge video AU, and thus a writer buffer overflow. */ 10632ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pPlaneOut[0].pac_data,0, 10732ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu pPlaneOut[0].u_stride * pPlaneOut[0].u_height); 10832ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pPlaneOut[1].pac_data,0, 10932ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu pPlaneOut[1].u_stride * pPlaneOut[1].u_height); 11032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pPlaneOut[2].pac_data,0, 11132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu pPlaneOut[2].u_stride * pPlaneOut[2].u_height); 1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4MCS_intApplyVPP: pReaderVideoAU->m_dataAddress is M4OSA_NULL,\ 1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning M4NO_ERROR"); 1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->isRenderDup == M4OSA_FALSE) 1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * m_pPreResizeFrame different than M4OSA_NULL means that resizing is needed */ 1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->pPreResizeFrame) 1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** FB 2008/10/20: 1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Used for cropping and black borders*/ 1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AIR_Params Params; 1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intApplyVPP: Need to resize"); 1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pVideoDecoder->m_pFctRender(pC->pViDecCtxt, &mtCts, 1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pPreResizeFrame, M4OSA_TRUE); 1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_intApplyVPP: m_pFctRender returns 0x%x!", err); 1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->MediaRendering == M4MCS_kResizing) 1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Call the resize filter. From the intermediate frame to the encoder 1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * image plane 1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4VIFI_ResizeBilinearYUV420toYUV420(M4OSA_NULL, 1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pPreResizeFrame, pPlaneOut); 1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_intApplyVPP: M4ViFilResizeBilinearYUV420toYUV420\ 1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns 0x%x!", err); 1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane pImagePlanesTemp[3]; 1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane* pPlaneTemp; 1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8* pOutPlaneY = pPlaneOut[0].pac_data + 1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pPlaneOut[0].u_topleft; 1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8* pOutPlaneU = pPlaneOut[1].pac_data + 1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pPlaneOut[1].u_topleft; 1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8* pOutPlaneV = pPlaneOut[2].pac_data + 1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pPlaneOut[2].u_topleft; 1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8* pInPlaneY = M4OSA_NULL; 1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8* pInPlaneU = M4OSA_NULL; 1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8* pInPlaneV = M4OSA_NULL; 1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i = 0; 1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*FB 2008/10/20: to keep media aspect ratio*/ 1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Initialize AIR Params*/ 1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x = 0; 1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y = 0; 1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = pC->pPreResizeFrame->u_height; 1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = pC->pPreResizeFrame->u_width; 1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = pPlaneOut->u_width; 1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = pPlaneOut->u_height; 1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_bOutputStripe = M4OSA_FALSE; 1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputOrientation = M4COMMON_kOrientationTopLeft; 1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Media rendering: Black borders*/ 1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->MediaRendering == M4MCS_kBlackBorders) 1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[0].u_width = pPlaneOut[0].u_width; 1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[0].u_height = pPlaneOut[0].u_height; 1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[0].u_stride = pPlaneOut[0].u_width; 1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[0].u_topleft = 0; 1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[1].u_width = pPlaneOut[1].u_width; 1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[1].u_height = pPlaneOut[1].u_height; 1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[1].u_stride = pPlaneOut[1].u_width; 1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[1].u_topleft = 0; 1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[2].u_width = pPlaneOut[2].u_width; 1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[2].u_height = pPlaneOut[2].u_height; 1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[2].u_stride = pPlaneOut[2].u_width; 1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[2].u_topleft = 0; 1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Allocates plan in local image plane structure */ 1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[0].pac_data = 199694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc(pImagePlanesTemp[0]\ 2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi .u_width * pImagePlanesTemp[0].u_height, M4VS, 2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char *)"M4xVSS_PictureCallbackFct: temporary plane bufferY") ; 2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pImagePlanesTemp[0].pac_data == M4OSA_NULL) 2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Error alloc in M4MCS_intApplyVPP"); 2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[1].pac_data = 208694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc(pImagePlanesTemp[1]\ 2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi .u_width * pImagePlanesTemp[1].u_height, M4VS, 2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char *)"M4xVSS_PictureCallbackFct: temporary plane bufferU") ; 2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pImagePlanesTemp[1].pac_data == M4OSA_NULL) 2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Error alloc in M4MCS_intApplyVPP"); 2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[2].pac_data = 217694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc(pImagePlanesTemp[2]\ 2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi .u_width * pImagePlanesTemp[2].u_height, 2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VS,(M4OSA_Char *)"M4xVSS_PictureCallbackFct: temporary plane bufferV") ; 2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pImagePlanesTemp[2].pac_data == M4OSA_NULL) 2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Error alloc in M4MCS_intApplyVPP"); 2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pInPlaneY = pImagePlanesTemp[0].pac_data ; 2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pInPlaneU = pImagePlanesTemp[1].pac_data ; 2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pInPlaneV = pImagePlanesTemp[2].pac_data ; 2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 23032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pImagePlanesTemp[0].pac_data,Y_PLANE_BORDER_VALUE, 23132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (pImagePlanesTemp[0].u_height*pImagePlanesTemp[0].u_stride)); 23232ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pImagePlanesTemp[1].pac_data,U_PLANE_BORDER_VALUE, 23332ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (pImagePlanesTemp[1].u_height*pImagePlanesTemp[1].u_stride)); 23432ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pImagePlanesTemp[2].pac_data,V_PLANE_BORDER_VALUE, 23532ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (pImagePlanesTemp[2].u_height*pImagePlanesTemp[2].u_stride)); 2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((M4OSA_UInt32)((pC->pPreResizeFrame->u_height * pPlaneOut->u_width)\ 2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /pC->pPreResizeFrame->u_width) <= pPlaneOut->u_height) 2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //Params.m_inputSize.m_height < Params.m_inputSize.m_width) 2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*it is height so black borders will be on the top and on the bottom side*/ 2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = pPlaneOut->u_width; 2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = 2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32) 2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((pC->pPreResizeFrame->u_height * pPlaneOut->u_width)\ 2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /pC->pPreResizeFrame->u_width); 2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*number of lines at the top*/ 2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[0].u_topleft = 2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4MCS_ABS((M4OSA_Int32) 2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pImagePlanesTemp[0].u_height\ 2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -Params.m_outputSize.m_height)>>1)) * 2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[0].u_stride; 2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[0].u_height = Params.m_outputSize.m_height; 2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[1].u_topleft = 2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4MCS_ABS((M4OSA_Int32)(pImagePlanesTemp[1].u_height\ 2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_height>>1)))>>1)\ 2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pImagePlanesTemp[1].u_stride; 2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[1].u_height = Params.m_outputSize.m_height>>1; 2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[2].u_topleft = 2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4MCS_ABS((M4OSA_Int32)(pImagePlanesTemp[2].u_height\ 2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_height>>1)))>>1)\ 2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pImagePlanesTemp[2].u_stride; 2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[2].u_height = Params.m_outputSize.m_height>>1; 2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*it is width so black borders will be on the left and right side*/ 2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = pPlaneOut->u_height; 2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = 2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((pC->pPreResizeFrame->u_width 2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pPlaneOut->u_height)\ 2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /pC->pPreResizeFrame->u_height); 2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[0].u_topleft = 2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4MCS_ABS((M4OSA_Int32)(pImagePlanesTemp[0].u_width-\ 2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width)>>1)); 2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[0].u_width = Params.m_outputSize.m_width; 2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[1].u_topleft = 2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4MCS_ABS((M4OSA_Int32)(pImagePlanesTemp[1].u_width-\ 2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (Params.m_outputSize.m_width>>1)))>>1); 2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[1].u_width = Params.m_outputSize.m_width>>1; 2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[2].u_topleft = 2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4MCS_ABS((M4OSA_Int32)(pImagePlanesTemp[2].u_width-\ 2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (Params.m_outputSize.m_width>>1)))>>1); 2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[2].u_width = Params.m_outputSize.m_width>>1; 2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Width and height have to be even*/ 2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = (Params.m_outputSize.m_width>>1)<<1; 2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = (Params.m_outputSize.m_height>>1)<<1; 2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = (Params.m_inputSize.m_width>>1)<<1; 2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = (Params.m_inputSize.m_height>>1)<<1; 2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[0].u_width = (pImagePlanesTemp[0].u_width>>1)<<1; 2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[1].u_width = (pImagePlanesTemp[1].u_width>>1)<<1; 2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[2].u_width = (pImagePlanesTemp[2].u_width>>1)<<1; 2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[0].u_height = (pImagePlanesTemp[0].u_height>>1)<<1; 2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[1].u_height = (pImagePlanesTemp[1].u_height>>1)<<1; 2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[2].u_height = (pImagePlanesTemp[2].u_height>>1)<<1; 2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Check that values are coherent*/ 3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(Params.m_inputSize.m_height == Params.m_outputSize.m_height) 3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = Params.m_outputSize.m_width; 3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(Params.m_inputSize.m_width == Params.m_outputSize.m_width) 3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = Params.m_outputSize.m_height; 3087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pPlaneTemp = pImagePlanesTemp; 3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Media rendering: Cropping*/ 3147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->MediaRendering == M4MCS_kCropping) 3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = pPlaneOut->u_height; 3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = pPlaneOut->u_width; 3187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((Params.m_outputSize.m_height * Params.m_inputSize.m_width)\ 3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /Params.m_outputSize.m_width<Params.m_inputSize.m_height) 3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*height will be cropped*/ 3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = 3237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((Params.m_outputSize.m_height \ 3247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Params.m_inputSize.m_width) / 3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width); 3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = 3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (Params.m_inputSize.m_height>>1)<<1; 3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y = 3297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Int32)((M4OSA_Int32) 3307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((pC->pPreResizeFrame->u_height\ 3317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - Params.m_inputSize.m_height))>>1); 3327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 3347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*width will be cropped*/ 3367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = 3377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((Params.m_outputSize.m_width\ 3387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Params.m_inputSize.m_height) / 3397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height); 3407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = 3417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (Params.m_inputSize.m_width>>1)<<1; 3427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x = 3437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Int32)((M4OSA_Int32) 3447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((pC->pPreResizeFrame->u_width\ 3457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - Params.m_inputSize.m_width))>>1); 3467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pPlaneTemp = pPlaneOut; 3487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 3507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Call AIR functions */ 3517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL == pC->m_air_context) 3527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AIR_create(&pC->m_air_context, M4AIR_kYUV420P); 3547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 3557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_PictureCallbackFct:\ 3577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Error when initializing AIR: 0x%x", err); 3587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 3597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AIR_configure(pC->m_air_context, &Params); 3637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 3647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_PictureCallbackFct:\ 3667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Error when configuring AIR: 0x%x", err); 3677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AIR_cleanUp(pC->m_air_context); 3687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 3697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AIR_get(pC->m_air_context, pC->pPreResizeFrame, 3727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pPlaneTemp); 3737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 3747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_PictureCallbackFct:\ 3767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Error when getting AIR plane: 0x%x", err); 3777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AIR_cleanUp(pC->m_air_context); 3787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 3797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->MediaRendering == M4MCS_kBlackBorders) 3827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0; i<pPlaneOut[0].u_height; i++) 3847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 38532ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy( (void *)pOutPlaneY, 38632ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (void *)pInPlaneY, 3877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pPlaneOut[0].u_width); 3887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pInPlaneY += pPlaneOut[0].u_width; 3897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pOutPlaneY += pPlaneOut[0].u_stride; 3907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0; i<pPlaneOut[1].u_height; i++) 3927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 39332ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy( (void *)pOutPlaneU, 39432ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (void *)pInPlaneU, 3957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pPlaneOut[1].u_width); 3967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pInPlaneU += pPlaneOut[1].u_width; 3977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pOutPlaneU += pPlaneOut[1].u_stride; 3987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0; i<pPlaneOut[2].u_height; i++) 4007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 40132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy( (void *)pOutPlaneV, 40232ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (void *)pInPlaneV, 4037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pPlaneOut[2].u_width); 4047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pInPlaneV += pPlaneOut[2].u_width; 4057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pOutPlaneV += pPlaneOut[2].u_stride; 4067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0; i<3; i++) 4097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pImagePlanesTemp[i].pac_data != M4OSA_NULL) 4117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 412694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free( 4137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[i].pac_data); 4147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanesTemp[i].pac_data = M4OSA_NULL; 4157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 4217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intApplyVPP: Don't need resizing"); 4237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pVideoDecoder->m_pFctRender(pC->pViDecCtxt, 4247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi &mtCts, pPlaneOut, 4257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRUE); 4267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 4277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_intApplyVPP: m_pFctRender returns 0x%x!", err); 4297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->lastDecodedPlane = pPlaneOut; 4337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 4357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Copy last decoded plane to output plane */ 43732ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)pPlaneOut[0].pac_data, 43832ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (void *)pC->lastDecodedPlane[0].pac_data, 4397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pPlaneOut[0].u_height * pPlaneOut[0].u_width)); 44032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)pPlaneOut[1].pac_data, 44132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (void *)pC->lastDecodedPlane[1].pac_data, 4427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pPlaneOut[1].u_height * pPlaneOut[1].u_width)); 44332ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)pPlaneOut[2].pac_data, 44432ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (void *)pC->lastDecodedPlane[2].pac_data, 4457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pPlaneOut[2].u_height * pPlaneOut[2].u_width)); 4467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->lastDecodedPlane = pPlaneOut; 4477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*M4MCS_AUDIOONLY*/ 4517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intApplyVPP: returning M4NO_ERROR"); 4527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 4537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 4547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 456