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 M4xVSS_internal.c 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Internal functions of extended Video Studio Service (Video Studio 2.1) 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h" 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_CharStar.h" 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "NXPSW_CompilerSwitches.h" 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VSS3GPP_API.h" 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VSS3GPP_ErrorCodes.h" 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4xVSS_API.h" 327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4xVSS_Internal.h" 337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*for rgb16 color effect*/ 357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VIFI_Defines.h" 367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VIFI_Clip.h" 377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * component includes */ 407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VFL_transition.h" /**< video effects */ 417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Internal header file of VSS is included because of MMS use case */ 437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VSS3GPP_InternalTypes.h" 447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*Exif header files to add image rendering support (cropping, black borders)*/ 467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4EXIFC_CommonAPI.h" 477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// StageFright encoders require %16 resolution 487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4ENCODER_common.h" 497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define TRANSPARENT_COLOR 0x7E0 517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Prototype of M4VIFI_xVSS_RGB565toYUV420 function (avoid green effect of transparency color) */ 537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VIFI_UInt8 M4VIFI_xVSS_RGB565toYUV420(void *pUserData, M4VIFI_ImagePlane *pPlaneIn, 547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane *pPlaneOut); 557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*special MCS function used only in VideoArtist and VideoStudio to open the media in the normal 587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mode. That way the media duration is accurate*/ 597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern M4OSA_ERR M4MCS_open_normalMode(M4MCS_Context pContext, M4OSA_Void* pFileIn, 607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIDEOEDITING_FileType InputFileType, 617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Void* pFileOut, M4OSA_Void* pTempFile); 627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalStartTranscoding(M4OSA_Context pContext) 677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function initializes MCS (3GP transcoder) with the given 687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * parameters 697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note The transcoding parameters are given by the internal xVSS context. 707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * This context contains a pointer on the current element of the 717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * chained list of MCS parameters. 727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) Pointer on the xVSS edit context 747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL 767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC: Memory allocation has failed 777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 79e9eec0e0975c57c0dac91eb5b4cbb052b7dd011aRajneesh ChowduryM4OSA_ERR M4xVSS_internalStartTranscoding(M4OSA_Context pContext, 80e9eec0e0975c57c0dac91eb5b4cbb052b7dd011aRajneesh Chowdury M4OSA_UInt32 *rotationDegree) 817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_Context mcs_context; 857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_OutputParams Params; 867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_EncodingParams Rates; 877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i; 88e9eec0e0975c57c0dac91eb5b4cbb052b7dd011aRajneesh Chowdury M4VIDEOEDITING_ClipProperties clipProps; 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MCS_init(&mcs_context, xVSS_context->pFileReadPtr, xVSS_context->pFileWritePtr); 917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("Error in M4MCS_init: 0x%x", err); 947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MCS_open(mcs_context, xVSS_context->pMCScurrentParams->pFileIn, 987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pMCScurrentParams->InputFileType, 997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pMCScurrentParams->pFileOut, 1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pMCScurrentParams->pFileTemp); 1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("Error in M4MCS_open: 0x%x", err); 1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_abort(mcs_context); 1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 108e9eec0e0975c57c0dac91eb5b4cbb052b7dd011aRajneesh Chowdury /** Get the clip properties 109e9eec0e0975c57c0dac91eb5b4cbb052b7dd011aRajneesh Chowdury */ 110e9eec0e0975c57c0dac91eb5b4cbb052b7dd011aRajneesh Chowdury err = M4MCS_getInputFileProperties(mcs_context, &clipProps); 111e9eec0e0975c57c0dac91eb5b4cbb052b7dd011aRajneesh Chowdury if (err != M4NO_ERROR) { 112e9eec0e0975c57c0dac91eb5b4cbb052b7dd011aRajneesh Chowdury M4OSA_TRACE1_1("Error in M4MCS_getInputFileProperties: 0x%x", err); 113e9eec0e0975c57c0dac91eb5b4cbb052b7dd011aRajneesh Chowdury M4MCS_abort(mcs_context); 114e9eec0e0975c57c0dac91eb5b4cbb052b7dd011aRajneesh Chowdury return err; 115e9eec0e0975c57c0dac91eb5b4cbb052b7dd011aRajneesh Chowdury } 116e9eec0e0975c57c0dac91eb5b4cbb052b7dd011aRajneesh Chowdury *rotationDegree = clipProps.videoRotationDegrees; 117e9eec0e0975c57c0dac91eb5b4cbb052b7dd011aRajneesh Chowdury 1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Fill MCS parameters with the parameters contained in the current element of the 1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi MCS parameters chained list */ 1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.OutputFileType = xVSS_context->pMCScurrentParams->OutputFileType; 1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.OutputVideoFormat = xVSS_context->pMCScurrentParams->OutputVideoFormat; 1230a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury Params.outputVideoProfile= xVSS_context->pMCScurrentParams->outputVideoProfile; 1240a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury Params.outputVideoLevel = xVSS_context->pMCScurrentParams->outputVideoLevel; 1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.OutputVideoFrameSize = xVSS_context->pMCScurrentParams->OutputVideoFrameSize; 1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.OutputVideoFrameRate = xVSS_context->pMCScurrentParams->OutputVideoFrameRate; 1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.OutputAudioFormat = xVSS_context->pMCScurrentParams->OutputAudioFormat; 1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.OutputAudioSamplingFrequency = 1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pMCScurrentParams->OutputAudioSamplingFrequency; 1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.bAudioMono = xVSS_context->pMCScurrentParams->bAudioMono; 1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.pOutputPCMfile = M4OSA_NULL; 1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*FB 2008/10/20: add media rendering parameter to keep aspect ratio*/ 1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(xVSS_context->pMCScurrentParams->MediaRendering) 1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4xVSS_kResizing: 1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.MediaRendering = M4MCS_kResizing; 1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4xVSS_kCropping: 1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.MediaRendering = M4MCS_kCropping; 1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4xVSS_kBlackBorders: 1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.MediaRendering = M4MCS_kBlackBorders; 1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**/ 1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // new params after integrating MCS 2.0 1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // Set the number of audio effects; 0 for now. 1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.nbEffects = 0; 1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // Set the audio effect; null for now. 1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.pEffects = NULL; 1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // Set the audio effect; null for now. 1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.bDiscardExif = M4OSA_FALSE; 1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // Set the audio effect; null for now. 1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.bAdjustOrientation = M4OSA_FALSE; 1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // new params after integrating MCS 2.0 1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set output parameters */ 1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MCS_setOutputParams(mcs_context, &Params); 1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("Error in M4MCS_setOutputParams: 0x%x", err); 1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_abort(mcs_context); 1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Rates.OutputVideoBitrate = xVSS_context->pMCScurrentParams->OutputVideoBitrate; 1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Rates.OutputAudioBitrate = xVSS_context->pMCScurrentParams->OutputAudioBitrate; 1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Rates.BeginCutTime = 0; 1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Rates.EndCutTime = 0; 1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Rates.OutputFileSize = 0; 1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*FB: transcoding per parts*/ 1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Rates.BeginCutTime = xVSS_context->pMCScurrentParams->BeginCutTime; 1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Rates.EndCutTime = xVSS_context->pMCScurrentParams->EndCutTime; 1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Rates.OutputVideoTimescale = xVSS_context->pMCScurrentParams->OutputVideoTimescale; 1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MCS_setEncodingParams(mcs_context, &Rates); 1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("Error in M4MCS_setEncodingParams: 0x%x", err); 1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_abort(mcs_context); 1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MCS_checkParamsAndStart(mcs_context); 1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("Error in M4MCS_checkParamsAndStart: 0x%x", err); 1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_abort(mcs_context); 1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Save MCS context to be able to call MCS step function in M4xVSS_step function */ 2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pMCS_Ctxt = mcs_context; 2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalStopTranscoding(M4OSA_Context pContext) 2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function cleans up MCS (3GP transcoder) 2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) Pointer on the xVSS edit context 2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL 2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC: Memory allocation has failed 2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalStopTranscoding(M4OSA_Context pContext) 2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MCS_close(xVSS_context->pMCS_Ctxt); 2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalStopTranscoding: Error in M4MCS_close: 0x%x", err); 2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_abort(xVSS_context->pMCS_Ctxt); 2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free this MCS instance */ 2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MCS_cleanUp(xVSS_context->pMCS_Ctxt); 2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalStopTranscoding: Error in M4MCS_cleanUp: 0x%x", err); 2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pMCS_Ctxt = M4OSA_NULL; 2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4xVSS_internalConvertAndResizeARGB8888toYUV420(M4OSA_Void* pFileIn, 2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_FileReadPointer* pFileReadPtr, 2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane* pImagePlanes, 2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32 width, 2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32 height); 2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief It Coverts and resizes a ARGB8888 image to YUV420 2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFileIn (IN) The Image input file 2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFileReadPtr (IN) Pointer on filesystem functions 2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pImagePlanes (IN/OUT) Pointer on YUV420 output planes allocated by the user 2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * ARGB8888 image will be converted and resized to output 2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * YUV420 plane size 2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *@param width (IN) width of the ARGB8888 2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *@param height (IN) height of the ARGB8888 2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC: memory error 2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalConvertAndResizeARGB8888toYUV420(M4OSA_Void* pFileIn, 2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_FileReadPointer* pFileReadPtr, 2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane* pImagePlanes, 2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 width,M4OSA_UInt32 height) 2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Context pARGBIn; 2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane rgbPlane1 ,rgbPlane2; 2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 frameSize_argb=(width * height * 4); 2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 frameSize = (width * height * 3); //Size of RGB888 data. 2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i = 0,j= 0; 2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err=M4NO_ERROR; 2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 280694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu M4OSA_UInt8 *pTmpData = (M4OSA_UInt8*) M4OSA_32bitAlignedMalloc(frameSize_argb, 2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VS, (M4OSA_Char*)"Image argb data"); 2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_internalConvertAndResizeARGB8888toYUV420 Entering :"); 2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pTmpData == M4OSA_NULL) { 2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_internalConvertAndResizeARGB8888toYUV420 :\ 2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Failed to allocate memory for Image clip"); 2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_internalConvertAndResizeARGB8888toYUV420 :width and height %d %d", 2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width ,height); 2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Get file size (mandatory for chunk decoding) */ 2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pFileReadPtr->openRead(&pARGBIn, pFileIn, M4OSA_kFileRead); 2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_internalConvertAndResizeARGB8888toYUV420 :\ 2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Can't open input ARGB8888 file %s, error: 0x%x\n",pFileIn, err); 297694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pTmpData); 2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pTmpData = M4OSA_NULL; 2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi goto cleanup; 3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pFileReadPtr->readData(pARGBIn,(M4OSA_MemAddr8)pTmpData, &frameSize_argb); 3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_internalConvertAndResizeARGB8888toYUV420 Can't close ARGB8888\ 3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi file %s, error: 0x%x\n",pFileIn, err); 3077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pFileReadPtr->closeRead(pARGBIn); 308694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pTmpData); 3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pTmpData = M4OSA_NULL; 3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi goto cleanup; 3117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pFileReadPtr->closeRead(pARGBIn); 3147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_internalConvertAndResizeARGB8888toYUV420 Can't close ARGB8888 \ 3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi file %s, error: 0x%x\n",pFileIn, err); 318694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pTmpData); 3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pTmpData = M4OSA_NULL; 3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi goto cleanup; 3217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 323694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu rgbPlane1.pac_data = (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc(frameSize, M4VS, 3247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)"Image clip RGB888 data"); 3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(rgbPlane1.pac_data == M4OSA_NULL) 3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_internalConvertAndResizeARGB8888toYUV420 \ 3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Failed to allocate memory for Image clip"); 329694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pTmpData); 3307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 3317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane1.u_height = height; 3347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane1.u_width = width; 3357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane1.u_stride = width*3; 3367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane1.u_topleft = 0; 3377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** Remove the alpha channel */ 3407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i=0, j = 0; i < frameSize_argb; i++) { 3417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((i % 4) == 0) continue; 3427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane1.pac_data[j] = pTmpData[i]; 3437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi j++; 3447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 345694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pTmpData); 3467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* To Check if resizing is required with color conversion */ 3487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(width != pImagePlanes->u_width || height != pImagePlanes->u_height) 3497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_internalConvertAndResizeARGB8888toYUV420 Resizing :"); 3517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi frameSize = ( pImagePlanes->u_width * pImagePlanes->u_height * 3); 352694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu rgbPlane2.pac_data = (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc(frameSize, M4VS, 3537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)"Image clip RGB888 data"); 3547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(rgbPlane2.pac_data == M4OSA_NULL) 3557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Failed to allocate memory for Image clip"); 357694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pTmpData); 3587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 3597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane2.u_height = pImagePlanes->u_height; 3617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane2.u_width = pImagePlanes->u_width; 3627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane2.u_stride = pImagePlanes->u_width*3; 3637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane2.u_topleft = 0; 3647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Resizing RGB888 to RGB888 */ 3667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4VIFI_ResizeBilinearRGB888toRGB888(M4OSA_NULL, &rgbPlane1, &rgbPlane2); 3677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 3687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("error when converting from Resize RGB888 to RGB888: 0x%x\n", err); 370694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(rgbPlane2.pac_data); 371694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(rgbPlane1.pac_data); 3727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 3737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Converting Resized RGB888 to YUV420 */ 3757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4VIFI_RGB888toYUV420(M4OSA_NULL, &rgbPlane2, pImagePlanes); 3767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 3777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("error when converting from RGB888 to YUV: 0x%x\n", err); 379694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(rgbPlane2.pac_data); 380694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(rgbPlane1.pac_data); 3817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 3827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 383694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(rgbPlane2.pac_data); 384694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(rgbPlane1.pac_data); 3857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("RGB to YUV done"); 3877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 3917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_internalConvertAndResizeARGB8888toYUV420 NO Resizing :"); 3937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4VIFI_RGB888toYUV420(M4OSA_NULL, &rgbPlane1, pImagePlanes); 3947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 3957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("error when converting from RGB to YUV: 0x%x\n", err); 3977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 398694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(rgbPlane1.pac_data); 3997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("RGB to YUV done"); 4017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargicleanup: 4037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_internalConvertAndResizeARGB8888toYUV420 leaving :"); 4047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 4067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 4087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 4097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4xVSS_internalConvertARGB8888toYUV420(M4OSA_Void* pFileIn, 4107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_FileReadPointer* pFileReadPtr, 4117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane* pImagePlanes, 4127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32 width, 4137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32 height); 4147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief It Coverts a ARGB8888 image to YUV420 4157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 4167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFileIn (IN) The Image input file 4177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFileReadPtr (IN) Pointer on filesystem functions 4187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pImagePlanes (IN/OUT) Pointer on YUV420 output planes allocated by the user 4197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * ARGB8888 image will be converted and resized to output 4207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * YUV420 plane size 4217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param width (IN) width of the ARGB8888 4227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param height (IN) height of the ARGB8888 4237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 4247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC: memory error 4257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 4267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 4277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 4287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalConvertARGB8888toYUV420(M4OSA_Void* pFileIn, 4307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_FileReadPointer* pFileReadPtr, 4317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane** pImagePlanes, 4327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 width,M4OSA_UInt32 height) 4337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 4347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 4357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane *yuvPlane = M4OSA_NULL; 4367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 437694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu yuvPlane = (M4VIFI_ImagePlane*)M4OSA_32bitAlignedMalloc(3*sizeof(M4VIFI_ImagePlane), 4387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VS, (M4OSA_Char*)"M4xVSS_internalConvertRGBtoYUV: Output plane YUV"); 4397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(yuvPlane == M4OSA_NULL) { 4407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_internalConvertAndResizeARGB8888toYUV420 :\ 4417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Failed to allocate memory for Image clip"); 4427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 4437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[0].u_height = height; 4457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[0].u_width = width; 4467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[0].u_stride = width; 4477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[0].u_topleft = 0; 448694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu yuvPlane[0].pac_data = (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc(yuvPlane[0].u_height \ 4497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * yuvPlane[0].u_width * 1.5, M4VS, (M4OSA_Char*)"imageClip YUV data"); 4507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[1].u_height = yuvPlane[0].u_height >>1; 4527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[1].u_width = yuvPlane[0].u_width >> 1; 4537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[1].u_stride = yuvPlane[1].u_width; 4547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[1].u_topleft = 0; 4557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[1].pac_data = (M4VIFI_UInt8*)(yuvPlane[0].pac_data + yuvPlane[0].u_height \ 4567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * yuvPlane[0].u_width); 4577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[2].u_height = yuvPlane[0].u_height >>1; 4597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[2].u_width = yuvPlane[0].u_width >> 1; 4607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[2].u_stride = yuvPlane[2].u_width; 4617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[2].u_topleft = 0; 4627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane[2].pac_data = (M4VIFI_UInt8*)(yuvPlane[1].pac_data + yuvPlane[1].u_height \ 4637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * yuvPlane[1].u_width); 4647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4xVSS_internalConvertAndResizeARGB8888toYUV420( pFileIn,pFileReadPtr, 4657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi yuvPlane, width, height); 4667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 4677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalConvertAndResizeARGB8888toYUV420 return error: 0x%x\n", err); 469694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(yuvPlane); 4707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pImagePlanes = yuvPlane; 4747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_internalConvertARGB8888toYUV420 :Leaving"); 4767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 4797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 4817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 4827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4xVSS_PictureCallbackFct (M4OSA_Void* pPictureCtxt, 4837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane* pImagePlanes, 4847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32* pPictureDuration); 4857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief It feeds the PTO3GPP with YUV420 pictures. 4867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This function is given to the PTO3GPP in the M4PTO3GPP_Params structure 4877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 4887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pImagePlanes(IN/OUT) Pointer to an array of three valid image planes 4897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pPictureDuration(OUT) Duration of the returned picture 4907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 4917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 4927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4PTO3GPP_WAR_LAST_PICTURE: The returned image is the last one 4937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 4947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 4957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 4967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_PictureCallbackFct(M4OSA_Void* pPictureCtxt, M4VIFI_ImagePlane* pImagePlanes, 4977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Double* pPictureDuration) 4987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 4997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 5007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 last_frame_flag = 0; 5017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_PictureCallbackCtxt* pC = (M4xVSS_PictureCallbackCtxt*) (pPictureCtxt); 5027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Used for pan&zoom*/ 5047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 tempPanzoomXa = 0; 5057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 tempPanzoomXb = 0; 5067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AIR_Params Params; 5077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**/ 5087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Used for cropping and black borders*/ 5107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Context pPictureContext = M4OSA_NULL; 5117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_FilePosition pictureSize = 0 ; 5127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8* pictureBuffer = M4OSA_NULL; 5137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //M4EXIFC_Context pExifContext = M4OSA_NULL; 5147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4EXIFC_BasicTags pBasicTags; 5157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane pImagePlanes1 = pImagePlanes[0]; 5167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane pImagePlanes2 = pImagePlanes[1]; 5177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane pImagePlanes3 = pImagePlanes[2]; 5187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**/ 5197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameters */ 5227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL==pPictureCtxt), M4ERR_PARAMETER, 5237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4xVSS_PictureCallbackFct: pPictureCtxt is M4OSA_NULL"); 5247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL==pImagePlanes), M4ERR_PARAMETER, 5257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4xVSS_PictureCallbackFct: pImagePlanes is M4OSA_NULL"); 5267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL==pPictureDuration), M4ERR_PARAMETER, 5277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4xVSS_PictureCallbackFct: pPictureDuration is M4OSA_NULL"); 5287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_PictureCallbackFct :Entering"); 5297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*PR P4ME00003181 In case the image number is 0, pan&zoom can not be used*/ 5307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_TRUE == pC->m_pPto3GPPparams->isPanZoom && pC->m_NbImage == 0) 5317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->isPanZoom = M4OSA_FALSE; 5337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*If no cropping/black borders or pan&zoom, just decode and resize the picture*/ 5367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_mediaRendering == M4xVSS_kResizing && M4OSA_FALSE == pC->m_pPto3GPPparams->isPanZoom) 5377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Convert and resize input ARGB8888 file to YUV420 */ 5407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*To support ARGB8888 : */ 5417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_PictureCallbackFct 1: width and heght %d %d", 5427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->width,pC->m_pPto3GPPparams->height); 5437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4xVSS_internalConvertAndResizeARGB8888toYUV420(pC->m_FileIn, 5447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pFileReadPtr, pImagePlanes,pC->m_pPto3GPPparams->width, 5457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->height); 5467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 5477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_PictureCallbackFct: Error when decoding JPEG: 0x%x\n", err); 5497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 5507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*In case of cropping, black borders or pan&zoom, call the EXIF reader and the AIR*/ 5537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 5547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Computes ratios */ 5577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_pDecodedPlane == M4OSA_NULL) 5587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Convert input ARGB8888 file to YUV420 */ 5617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_PictureCallbackFct 2: width and heght %d %d", 5627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->width,pC->m_pPto3GPPparams->height); 5637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4xVSS_internalConvertARGB8888toYUV420(pC->m_FileIn, pC->m_pFileReadPtr, 5647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi &(pC->m_pDecodedPlane),pC->m_pPto3GPPparams->width,pC->m_pPto3GPPparams->height); 5657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 5667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_PictureCallbackFct: Error when decoding JPEG: 0x%x\n", err); 5687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_pDecodedPlane != M4OSA_NULL) 5697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* YUV420 planar is returned but allocation is made only once 5717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (contigous planes in memory) */ 5727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_pDecodedPlane->pac_data != M4OSA_NULL) 5737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 574694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pDecodedPlane->pac_data); 5757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 576694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pDecodedPlane); 5777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pDecodedPlane = M4OSA_NULL; 5787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 5807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Initialize AIR Params*/ 5847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x = 0; 5857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y = 0; 5867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = pC->m_pDecodedPlane->u_height; 5877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = pC->m_pDecodedPlane->u_width; 5887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = pImagePlanes->u_width; 5897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = pImagePlanes->u_height; 5907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_bOutputStripe = M4OSA_FALSE; 5917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputOrientation = M4COMMON_kOrientationTopLeft; 5927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Initialize Exif params structure*/ 5947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBasicTags.orientation = M4COMMON_kOrientationUnknown; 5957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Pan&zoom params*/ 5987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_TRUE == pC->m_pPto3GPPparams->isPanZoom) 5997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Save ratio values, they can be reused if the new ratios are 0*/ 6017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempPanzoomXa = (M4OSA_UInt8)pC->m_pPto3GPPparams->PanZoomXa; 6027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempPanzoomXb = (M4OSA_UInt8)pC->m_pPto3GPPparams->PanZoomXb; 6037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Check that the ratio is not 0*/ 6047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Check (a) parameters*/ 6057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_pPto3GPPparams->PanZoomXa == 0) 6067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 maxRatio = 0; 6087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_pPto3GPPparams->PanZoomTopleftXa >= 6097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->PanZoomTopleftYa) 6107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The ratio is 0, that means the area of the picture defined with (a) 6127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi parameters is bigger than the image size*/ 6132e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma if(pC->m_pPto3GPPparams->PanZoomTopleftXa + tempPanzoomXa > 1000) 6147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The oversize is maxRatio*/ 6162e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma maxRatio = pC->m_pPto3GPPparams->PanZoomTopleftXa + tempPanzoomXa - 1000; 6177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 6207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The ratio is 0, that means the area of the picture defined with (a) 6227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi parameters is bigger than the image size*/ 6232e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma if(pC->m_pPto3GPPparams->PanZoomTopleftYa + tempPanzoomXa > 1000) 6247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The oversize is maxRatio*/ 6262e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma maxRatio = pC->m_pPto3GPPparams->PanZoomTopleftYa + tempPanzoomXa - 1000; 6277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Modify the (a) parameters:*/ 6307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_pPto3GPPparams->PanZoomTopleftXa >= maxRatio) 6317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The (a) topleft parameters can be moved to keep the same area size*/ 6337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->PanZoomTopleftXa -= maxRatio; 6347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 6367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Move the (a) topleft parameter to 0 but the ratio will be also further 6387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi modified to match the image size*/ 6397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->PanZoomTopleftXa = 0; 6407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_pPto3GPPparams->PanZoomTopleftYa >= maxRatio) 6427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The (a) topleft parameters can be moved to keep the same area size*/ 6447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->PanZoomTopleftYa -= maxRatio; 6457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 6477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Move the (a) topleft parameter to 0 but the ratio will be also further 6497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi modified to match the image size*/ 6507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->PanZoomTopleftYa = 0; 6517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The new ratio is the original one*/ 6537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->PanZoomXa = tempPanzoomXa; 6542e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma if(pC->m_pPto3GPPparams->PanZoomXa + pC->m_pPto3GPPparams->PanZoomTopleftXa > 1000) 6557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Change the ratio if the area of the picture defined with (a) parameters is 6577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi bigger than the image size*/ 6582e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma pC->m_pPto3GPPparams->PanZoomXa = 1000 - pC->m_pPto3GPPparams->PanZoomTopleftXa; 6597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6602e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma if(pC->m_pPto3GPPparams->PanZoomXa + pC->m_pPto3GPPparams->PanZoomTopleftYa > 1000) 6617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Change the ratio if the area of the picture defined with (a) parameters is 6637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi bigger than the image size*/ 6642e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma pC->m_pPto3GPPparams->PanZoomXa = 1000 - pC->m_pPto3GPPparams->PanZoomTopleftYa; 6657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Check (b) parameters*/ 6687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_pPto3GPPparams->PanZoomXb == 0) 6697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 maxRatio = 0; 6717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_pPto3GPPparams->PanZoomTopleftXb >= 6727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->PanZoomTopleftYb) 6737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The ratio is 0, that means the area of the picture defined with (b) 6757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi parameters is bigger than the image size*/ 6762e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma if(pC->m_pPto3GPPparams->PanZoomTopleftXb + tempPanzoomXb > 1000) 6777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The oversize is maxRatio*/ 6792e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma maxRatio = pC->m_pPto3GPPparams->PanZoomTopleftXb + tempPanzoomXb - 1000; 6807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 6837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The ratio is 0, that means the area of the picture defined with (b) 6857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi parameters is bigger than the image size*/ 6862e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma if(pC->m_pPto3GPPparams->PanZoomTopleftYb + tempPanzoomXb > 1000) 6877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The oversize is maxRatio*/ 6892e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma maxRatio = pC->m_pPto3GPPparams->PanZoomTopleftYb + tempPanzoomXb - 1000; 6907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Modify the (b) parameters:*/ 6937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_pPto3GPPparams->PanZoomTopleftXb >= maxRatio) 6947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The (b) topleft parameters can be moved to keep the same area size*/ 6967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->PanZoomTopleftXb -= maxRatio; 6977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 6997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Move the (b) topleft parameter to 0 but the ratio will be also further 7017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi modified to match the image size*/ 7027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->PanZoomTopleftXb = 0; 7037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_pPto3GPPparams->PanZoomTopleftYb >= maxRatio) 7057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The (b) topleft parameters can be moved to keep the same area size*/ 7077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->PanZoomTopleftYb -= maxRatio; 7087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 7107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Move the (b) topleft parameter to 0 but the ratio will be also further 7127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi modified to match the image size*/ 7137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->PanZoomTopleftYb = 0; 7147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The new ratio is the original one*/ 7167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pPto3GPPparams->PanZoomXb = tempPanzoomXb; 7172e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma if(pC->m_pPto3GPPparams->PanZoomXb + pC->m_pPto3GPPparams->PanZoomTopleftXb > 1000) 7187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Change the ratio if the area of the picture defined with (b) parameters is 7207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi bigger than the image size*/ 7212e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma pC->m_pPto3GPPparams->PanZoomXb = 1000 - pC->m_pPto3GPPparams->PanZoomTopleftXb; 7227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7232e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma if(pC->m_pPto3GPPparams->PanZoomXb + pC->m_pPto3GPPparams->PanZoomTopleftYb > 1000) 7247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Change the ratio if the area of the picture defined with (b) parameters is 7267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi bigger than the image size*/ 7272e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma pC->m_pPto3GPPparams->PanZoomXb = 1000 - pC->m_pPto3GPPparams->PanZoomTopleftYb; 7287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 7327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Computes AIR parameters */ 7337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Params.m_inputCoord.m_x = (M4OSA_UInt32)(pC->m_pDecodedPlane->u_width * 7347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_pPto3GPPparams->PanZoomTopleftXa + 7357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Int16)((pC->m_pPto3GPPparams->PanZoomTopleftXb \ 7367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - pC->m_pPto3GPPparams->PanZoomTopleftXa) * 7377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_ImageCounter) / (M4OSA_Double)pC->m_NbImage)) / 100; 7387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y = (M4OSA_UInt32)(pC->m_pDecodedPlane->u_height * 7397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_pPto3GPPparams->PanZoomTopleftYa + 7407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Int16)((pC->m_pPto3GPPparams->PanZoomTopleftYb\ 7417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - pC->m_pPto3GPPparams->PanZoomTopleftYa) * 7427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_ImageCounter) / (M4OSA_Double)pC->m_NbImage)) / 100; 7437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = (M4OSA_UInt32)(pC->m_pDecodedPlane->u_width * 7457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_pPto3GPPparams->PanZoomXa + 7467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Int16)((pC->m_pPto3GPPparams->PanZoomXb - pC->m_pPto3GPPparams->PanZoomXa) * 7477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_ImageCounter) / (M4OSA_Double)pC->m_NbImage)) / 100; 7487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = (M4OSA_UInt32)(pC->m_pDecodedPlane->u_height * 7507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_pPto3GPPparams->PanZoomXa + 7517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Int16)((pC->m_pPto3GPPparams->PanZoomXb - pC->m_pPto3GPPparams->PanZoomXa) * 7527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_ImageCounter) / (M4OSA_Double)pC->m_NbImage)) / 100; 7537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 7542e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma // Instead of using pC->m_NbImage we have to use (pC->m_NbImage-1) as pC->m_ImageCounter 7552e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma // will be x-1 max for x no. of frames 7567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x = (M4OSA_UInt32)((((M4OSA_Double)pC->m_pDecodedPlane->u_width * 7577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_pPto3GPPparams->PanZoomTopleftXa + 7587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Double)((M4OSA_Double)(pC->m_pPto3GPPparams->PanZoomTopleftXb\ 7597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - pC->m_pPto3GPPparams->PanZoomTopleftXa) * 7602e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma pC->m_ImageCounter) / (M4OSA_Double)pC->m_NbImage-1)) / 1000)); 7617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y = 7627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((((M4OSA_Double)pC->m_pDecodedPlane->u_height * 7637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_pPto3GPPparams->PanZoomTopleftYa + 7647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Double)((M4OSA_Double)(pC->m_pPto3GPPparams->PanZoomTopleftYb\ 7657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - pC->m_pPto3GPPparams->PanZoomTopleftYa) * 7662e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma pC->m_ImageCounter) / (M4OSA_Double)pC->m_NbImage-1)) / 1000)); 7677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = 7697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((((M4OSA_Double)pC->m_pDecodedPlane->u_width * 7707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_pPto3GPPparams->PanZoomXa + 7717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Double)((M4OSA_Double)(pC->m_pPto3GPPparams->PanZoomXb\ 7727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - pC->m_pPto3GPPparams->PanZoomXa) * 7732e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma pC->m_ImageCounter) / (M4OSA_Double)pC->m_NbImage-1)) / 1000)); 7747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = 7767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((((M4OSA_Double)pC->m_pDecodedPlane->u_height * 7777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_pPto3GPPparams->PanZoomXa + 7787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Double)((M4OSA_Double)(pC->m_pPto3GPPparams->PanZoomXb \ 7797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - pC->m_pPto3GPPparams->PanZoomXa) * 7802e7f31d481497ce59508b00e76cc79aebd107076Dheeraj Sharma pC->m_ImageCounter) / (M4OSA_Double)pC->m_NbImage-1)) / 1000)); 7817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((Params.m_inputSize.m_width + Params.m_inputCoord.m_x)\ 7837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi > pC->m_pDecodedPlane->u_width) 7847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = pC->m_pDecodedPlane->u_width \ 7867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - Params.m_inputCoord.m_x; 7877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((Params.m_inputSize.m_height + Params.m_inputCoord.m_y)\ 7907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi > pC->m_pDecodedPlane->u_height) 7917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = pC->m_pDecodedPlane->u_height\ 7937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - Params.m_inputCoord.m_y; 7947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = (Params.m_inputSize.m_width>>1)<<1; 7997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = (Params.m_inputSize.m_height>>1)<<1; 8007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Picture rendering: Black borders*/ 8067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_mediaRendering == M4xVSS_kBlackBorders) 8087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 80932ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pImagePlanes[0].pac_data,Y_PLANE_BORDER_VALUE, 81032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (pImagePlanes[0].u_height*pImagePlanes[0].u_stride)); 81132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pImagePlanes[1].pac_data,U_PLANE_BORDER_VALUE, 81232ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (pImagePlanes[1].u_height*pImagePlanes[1].u_stride)); 81332ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pImagePlanes[2].pac_data,V_PLANE_BORDER_VALUE, 81432ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (pImagePlanes[2].u_height*pImagePlanes[2].u_stride)); 8157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi First without pan&zoom*/ 8187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_FALSE == pC->m_pPto3GPPparams->isPanZoom) 8197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(pBasicTags.orientation) 8217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 8237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationUnknown: 8247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputOrientation = M4COMMON_kOrientationTopLeft; 8257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationTopLeft: 8267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationTopRight: 8277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationBottomRight: 8287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationBottomLeft: 8297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((M4OSA_UInt32)((pC->m_pDecodedPlane->u_height * pImagePlanes->u_width)\ 8307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /pC->m_pDecodedPlane->u_width) <= pImagePlanes->u_height) 8317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //Params.m_inputSize.m_height < Params.m_inputSize.m_width) 8327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*it is height so black borders will be on the top and on the bottom side*/ 8347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = pImagePlanes->u_width; 8357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = 8367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((pC->m_pDecodedPlane->u_height \ 8377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pImagePlanes->u_width) /pC->m_pDecodedPlane->u_width); 8387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*number of lines at the top*/ 8397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_topleft = 8407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[0].u_height\ 8417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -Params.m_outputSize.m_height)>>1))*pImagePlanes[0].u_stride; 8427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_height = Params.m_outputSize.m_height; 8437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_topleft = 8447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[1].u_height\ 8457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_height>>1)))>>1)*pImagePlanes[1].u_stride; 8467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_height = Params.m_outputSize.m_height>>1; 8477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_topleft = 8487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[2].u_height\ 8497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_height>>1)))>>1)*pImagePlanes[2].u_stride; 8507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_height = Params.m_outputSize.m_height>>1; 8517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 8537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*it is width so black borders will be on the left and right side*/ 8557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = pImagePlanes->u_height; 8567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = 8577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((pC->m_pDecodedPlane->u_width \ 8587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pImagePlanes->u_height) /pC->m_pDecodedPlane->u_height); 8597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_topleft = 8617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[0].u_width\ 8627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -Params.m_outputSize.m_width)>>1)); 8637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_width = Params.m_outputSize.m_width; 8647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_topleft = 8657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[1].u_width\ 8667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_width>>1)))>>1); 8677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_width = Params.m_outputSize.m_width>>1; 8687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_topleft = 8697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[2].u_width\ 8707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_width>>1)))>>1); 8717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_width = Params.m_outputSize.m_width>>1; 8727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 8747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationLeftTop: 8757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationLeftBottom: 8767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationRightTop: 8777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationRightBottom: 8787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((M4OSA_UInt32)((pC->m_pDecodedPlane->u_width * pImagePlanes->u_width)\ 8797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /pC->m_pDecodedPlane->u_height) < pImagePlanes->u_height) 8807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //Params.m_inputSize.m_height > Params.m_inputSize.m_width) 8817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*it is height so black borders will be on the top and on 8837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi the bottom side*/ 8847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = pImagePlanes->u_width; 8857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = 8867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((pC->m_pDecodedPlane->u_width \ 8877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pImagePlanes->u_width) /pC->m_pDecodedPlane->u_height); 8887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*number of lines at the top*/ 8897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_topleft = 8907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[0].u_height\ 8917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -Params.m_outputSize.m_width))>>1)*pImagePlanes[0].u_stride)+1; 8927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_height = Params.m_outputSize.m_width; 8937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_topleft = 8947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[1].u_height\ 8957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_width>>1)))>>1)\ 8967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pImagePlanes[1].u_stride)+1; 8977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_height = Params.m_outputSize.m_width>>1; 8987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_topleft = 8997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[2].u_height\ 9007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_width>>1)))>>1)\ 9017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pImagePlanes[2].u_stride)+1; 9027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_height = Params.m_outputSize.m_width>>1; 9037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 9057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*it is width so black borders will be on the left and right side*/ 9077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = pImagePlanes->u_height; 9087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = 9097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((pC->m_pDecodedPlane->u_height\ 9107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pImagePlanes->u_height) /pC->m_pDecodedPlane->u_width); 9117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_topleft = 9137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[0].u_width\ 9147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -Params.m_outputSize.m_height))>>1))+1; 9157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_width = Params.m_outputSize.m_height; 9167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_topleft = 9177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[1].u_width\ 9187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_height>>1)))>>1))+1; 9197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_width = Params.m_outputSize.m_height>>1; 9207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_topleft = 9217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[2].u_width\ 9227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_height>>1)))>>1))+1; 9237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_width = Params.m_outputSize.m_height>>1; 9247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 9267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 9307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Secondly with pan&zoom*/ 9317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 9327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(pBasicTags.orientation) 9347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 9367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationUnknown: 9377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputOrientation = M4COMMON_kOrientationTopLeft; 9387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationTopLeft: 9397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationTopRight: 9407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationBottomRight: 9417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationBottomLeft: 9427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*NO ROTATION*/ 9437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((M4OSA_UInt32)((pC->m_pDecodedPlane->u_height * pImagePlanes->u_width)\ 9447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /pC->m_pDecodedPlane->u_width) <= pImagePlanes->u_height) 9457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //Params.m_inputSize.m_height < Params.m_inputSize.m_width) 9467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Black borders will be on the top and bottom of the output video*/ 9487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Maximum output height if the input image aspect ratio is kept and if 9497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi the output width is the screen width*/ 9507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempOutputSizeHeight = 9517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((pC->m_pDecodedPlane->u_height\ 9527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pImagePlanes->u_width) /pC->m_pDecodedPlane->u_width); 9537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempInputSizeHeightMax = 0; 9547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempFinalInputHeight = 0; 9557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The output width is the screen width*/ 9567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = pImagePlanes->u_width; 9577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempOutputSizeHeight = (tempOutputSizeHeight>>1)<<1; 9587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Maximum input height according to the maximum output height 9607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (proportional to the maximum output height)*/ 9617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempInputSizeHeightMax = (pImagePlanes->u_height\ 9627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *Params.m_inputSize.m_height)/tempOutputSizeHeight; 9637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempInputSizeHeightMax = (tempInputSizeHeightMax>>1)<<1; 9647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Check if the maximum possible input height is contained into the 9667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi input image height*/ 9677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(tempInputSizeHeightMax <= pC->m_pDecodedPlane->u_height) 9687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The maximum possible input height is contained in the input 9707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi image height, 9717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi that means no black borders, the input pan zoom area will be extended 9727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi so that the input AIR height will be the maximum possible*/ 9737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(((tempInputSizeHeightMax - Params.m_inputSize.m_height)>>1)\ 9747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi <= Params.m_inputCoord.m_y 9757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && ((tempInputSizeHeightMax - Params.m_inputSize.m_height)>>1)\ 9767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi <= pC->m_pDecodedPlane->u_height -(Params.m_inputCoord.m_y\ 9777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi + Params.m_inputSize.m_height)) 9787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The input pan zoom area can be extended symmetrically on the 9807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi top and bottom side*/ 9817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y -= ((tempInputSizeHeightMax \ 9827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - Params.m_inputSize.m_height)>>1); 9837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(Params.m_inputCoord.m_y < pC->m_pDecodedPlane->u_height\ 9857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_inputCoord.m_y + Params.m_inputSize.m_height)) 9867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*There is not enough place above the input pan zoom area to 9887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi extend it symmetrically, 9897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi so extend it to the maximum on the top*/ 9907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y = 0; 9917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 9937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*There is not enough place below the input pan zoom area to 9957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi extend it symmetrically, 9967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi so extend it to the maximum on the bottom*/ 9977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y = pC->m_pDecodedPlane->u_height \ 9987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - tempInputSizeHeightMax; 9997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The input height of the AIR is the maximum possible height*/ 10017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = tempInputSizeHeightMax; 10027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 10047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The maximum possible input height is greater than the input 10067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi image height, 10077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi that means black borders are necessary to keep aspect ratio 10087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi The input height of the AIR is all the input image height*/ 10097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = 10107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (tempOutputSizeHeight*pC->m_pDecodedPlane->u_height)\ 10117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /Params.m_inputSize.m_height; 10127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = (Params.m_outputSize.m_height>>1)<<1; 10137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y = 0; 10147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = pC->m_pDecodedPlane->u_height; 10157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_topleft = 10167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[0].u_height\ 10177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -Params.m_outputSize.m_height)>>1))*pImagePlanes[0].u_stride; 10187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_height = Params.m_outputSize.m_height; 10197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_topleft = 10207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[1].u_height\ 10217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_height>>1)))>>1)\ 10227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pImagePlanes[1].u_stride); 10237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_height = Params.m_outputSize.m_height>>1; 10247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_topleft = 10257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[2].u_height\ 10267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_height>>1)))>>1)\ 10277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pImagePlanes[2].u_stride); 10287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_height = Params.m_outputSize.m_height>>1; 10297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 10327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Black borders will be on the left and right side of the output video*/ 10347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Maximum output width if the input image aspect ratio is kept and if the 10357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi output height is the screen height*/ 10367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempOutputSizeWidth = 10377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((pC->m_pDecodedPlane->u_width \ 10387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pImagePlanes->u_height) /pC->m_pDecodedPlane->u_height); 10397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempInputSizeWidthMax = 0; 10407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempFinalInputWidth = 0; 10417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The output height is the screen height*/ 10427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = pImagePlanes->u_height; 10437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempOutputSizeWidth = (tempOutputSizeWidth>>1)<<1; 10447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Maximum input width according to the maximum output width 10467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (proportional to the maximum output width)*/ 10477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempInputSizeWidthMax = 10487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pImagePlanes->u_width*Params.m_inputSize.m_width)\ 10497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /tempOutputSizeWidth; 10507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempInputSizeWidthMax = (tempInputSizeWidthMax>>1)<<1; 10517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Check if the maximum possible input width is contained into the input 10537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi image width*/ 10547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(tempInputSizeWidthMax <= pC->m_pDecodedPlane->u_width) 10557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The maximum possible input width is contained in the input 10577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi image width, 10587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi that means no black borders, the input pan zoom area will be extended 10597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi so that the input AIR width will be the maximum possible*/ 10607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(((tempInputSizeWidthMax - Params.m_inputSize.m_width)>>1) \ 10617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi <= Params.m_inputCoord.m_x 10627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && ((tempInputSizeWidthMax - Params.m_inputSize.m_width)>>1)\ 10637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi <= pC->m_pDecodedPlane->u_width -(Params.m_inputCoord.m_x \ 10647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi + Params.m_inputSize.m_width)) 10657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The input pan zoom area can be extended symmetrically on the 10677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi right and left side*/ 10687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x -= ((tempInputSizeWidthMax\ 10697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - Params.m_inputSize.m_width)>>1); 10707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(Params.m_inputCoord.m_x < pC->m_pDecodedPlane->u_width\ 10727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_inputCoord.m_x + Params.m_inputSize.m_width)) 10737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*There is not enough place above the input pan zoom area to 10757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi extend it symmetrically, 10767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi so extend it to the maximum on the left*/ 10777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x = 0; 10787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 10807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*There is not enough place below the input pan zoom area 10827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi to extend it symmetrically, 10837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi so extend it to the maximum on the right*/ 10847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x = pC->m_pDecodedPlane->u_width \ 10857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - tempInputSizeWidthMax; 10867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The input width of the AIR is the maximum possible width*/ 10887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = tempInputSizeWidthMax; 10897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 10917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The maximum possible input width is greater than the input 10937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi image width, 10947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi that means black borders are necessary to keep aspect ratio 10957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi The input width of the AIR is all the input image width*/ 10967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width =\ 10977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (tempOutputSizeWidth*pC->m_pDecodedPlane->u_width)\ 10987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /Params.m_inputSize.m_width; 10997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = (Params.m_outputSize.m_width>>1)<<1; 11007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x = 0; 11017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = pC->m_pDecodedPlane->u_width; 11027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_topleft = 11037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[0].u_width\ 11047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -Params.m_outputSize.m_width)>>1)); 11057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_width = Params.m_outputSize.m_width; 11067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_topleft = 11077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[1].u_width\ 11087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_width>>1)))>>1); 11097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_width = Params.m_outputSize.m_width>>1; 11107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_topleft = 11117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[2].u_width\ 11127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_width>>1)))>>1); 11137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_width = Params.m_outputSize.m_width>>1; 11147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 11177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationLeftTop: 11187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationLeftBottom: 11197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationRightTop: 11207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationRightBottom: 11217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*ROTATION*/ 11227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((M4OSA_UInt32)((pC->m_pDecodedPlane->u_width * pImagePlanes->u_width)\ 11237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /pC->m_pDecodedPlane->u_height) < pImagePlanes->u_height) 11247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //Params.m_inputSize.m_height > Params.m_inputSize.m_width) 11257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 11267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Black borders will be on the left and right side of the output video*/ 11277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Maximum output height if the input image aspect ratio is kept and if 11287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi the output height is the screen width*/ 11297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempOutputSizeHeight = 11307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((pC->m_pDecodedPlane->u_width * pImagePlanes->u_width)\ 11317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /pC->m_pDecodedPlane->u_height); 11327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempInputSizeHeightMax = 0; 11337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempFinalInputHeight = 0; 11347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The output width is the screen height*/ 11357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = pImagePlanes->u_width; 11367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width= pImagePlanes->u_height; 11377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempOutputSizeHeight = (tempOutputSizeHeight>>1)<<1; 11387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Maximum input height according to the maximum output height 11407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (proportional to the maximum output height)*/ 11417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempInputSizeHeightMax = 11427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pImagePlanes->u_height*Params.m_inputSize.m_width)\ 11437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /tempOutputSizeHeight; 11447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempInputSizeHeightMax = (tempInputSizeHeightMax>>1)<<1; 11457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Check if the maximum possible input height is contained into the 11477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi input image width (rotation included)*/ 11487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(tempInputSizeHeightMax <= pC->m_pDecodedPlane->u_width) 11497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 11507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The maximum possible input height is contained in the input 11517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi image width (rotation included), 11527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi that means no black borders, the input pan zoom area will be extended 11537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi so that the input AIR width will be the maximum possible*/ 11547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(((tempInputSizeHeightMax - Params.m_inputSize.m_width)>>1) \ 11557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi <= Params.m_inputCoord.m_x 11567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && ((tempInputSizeHeightMax - Params.m_inputSize.m_width)>>1)\ 11577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi <= pC->m_pDecodedPlane->u_width -(Params.m_inputCoord.m_x \ 11587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi + Params.m_inputSize.m_width)) 11597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 11607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The input pan zoom area can be extended symmetrically on the 11617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi right and left side*/ 11627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x -= ((tempInputSizeHeightMax \ 11637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - Params.m_inputSize.m_width)>>1); 11647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(Params.m_inputCoord.m_x < pC->m_pDecodedPlane->u_width\ 11667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_inputCoord.m_x + Params.m_inputSize.m_width)) 11677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 11687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*There is not enough place on the left of the input pan 11697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi zoom area to extend it symmetrically, 11707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi so extend it to the maximum on the left*/ 11717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x = 0; 11727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 11747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 11757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*There is not enough place on the right of the input pan zoom 11767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi area to extend it symmetrically, 11777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi so extend it to the maximum on the right*/ 11787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x = 11797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pDecodedPlane->u_width - tempInputSizeHeightMax; 11807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The input width of the AIR is the maximum possible width*/ 11827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = tempInputSizeHeightMax; 11837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 11857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 11867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The maximum possible input height is greater than the input 11877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi image width (rotation included), 11887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi that means black borders are necessary to keep aspect ratio 11897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi The input width of the AIR is all the input image width*/ 11907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = 11917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (tempOutputSizeHeight*pC->m_pDecodedPlane->u_width)\ 11927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /Params.m_inputSize.m_width; 11937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = (Params.m_outputSize.m_width>>1)<<1; 11947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x = 0; 11957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = pC->m_pDecodedPlane->u_width; 11967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_topleft = 11977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[0].u_height\ 11987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -Params.m_outputSize.m_width))>>1)*pImagePlanes[0].u_stride)+1; 11997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_height = Params.m_outputSize.m_width; 12007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_topleft = 12017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[1].u_height\ 12027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_width>>1)))>>1)\ 12037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pImagePlanes[1].u_stride)+1; 12047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_height = Params.m_outputSize.m_width>>1; 12057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_topleft = 12067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[2].u_height\ 12077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_width>>1)))>>1)\ 12087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pImagePlanes[2].u_stride)+1; 12097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_height = Params.m_outputSize.m_width>>1; 12107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 12137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 12147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Black borders will be on the top and bottom of the output video*/ 12157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Maximum output width if the input image aspect ratio is kept and if 12167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi the output width is the screen height*/ 12177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempOutputSizeWidth = 12187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)((pC->m_pDecodedPlane->u_height * pImagePlanes->u_height)\ 12197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /pC->m_pDecodedPlane->u_width); 12207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempInputSizeWidthMax = 0; 12217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempFinalInputWidth = 0, tempFinalOutputWidth = 0; 12227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The output height is the screen width*/ 12237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = pImagePlanes->u_height; 12247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height= pImagePlanes->u_width; 12257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempOutputSizeWidth = (tempOutputSizeWidth>>1)<<1; 12267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Maximum input width according to the maximum output width 12287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (proportional to the maximum output width)*/ 12297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempInputSizeWidthMax = 12307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pImagePlanes->u_width*Params.m_inputSize.m_height)/tempOutputSizeWidth; 12317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempInputSizeWidthMax = (tempInputSizeWidthMax>>1)<<1; 12327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Check if the maximum possible input width is contained into the input 12347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi image height (rotation included)*/ 12357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(tempInputSizeWidthMax <= pC->m_pDecodedPlane->u_height) 12367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 12377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The maximum possible input width is contained in the input 12387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi image height (rotation included), 12397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi that means no black borders, the input pan zoom area will be extended 12407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi so that the input AIR height will be the maximum possible*/ 12417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(((tempInputSizeWidthMax - Params.m_inputSize.m_height)>>1) \ 12427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi <= Params.m_inputCoord.m_y 12437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && ((tempInputSizeWidthMax - Params.m_inputSize.m_height)>>1)\ 12447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi <= pC->m_pDecodedPlane->u_height -(Params.m_inputCoord.m_y \ 12457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi + Params.m_inputSize.m_height)) 12467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 12477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The input pan zoom area can be extended symmetrically on 12487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi the right and left side*/ 12497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y -= ((tempInputSizeWidthMax \ 12507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - Params.m_inputSize.m_height)>>1); 12517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(Params.m_inputCoord.m_y < pC->m_pDecodedPlane->u_height\ 12537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_inputCoord.m_y + Params.m_inputSize.m_height)) 12547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 12557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*There is not enough place on the top of the input pan zoom 12567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi area to extend it symmetrically, 12577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi so extend it to the maximum on the top*/ 12587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y = 0; 12597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 12617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 12627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*There is not enough place on the bottom of the input pan zoom 12637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi area to extend it symmetrically, 12647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi so extend it to the maximum on the bottom*/ 12657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y = pC->m_pDecodedPlane->u_height\ 12667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - tempInputSizeWidthMax; 12677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The input height of the AIR is the maximum possible height*/ 12697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = tempInputSizeWidthMax; 12707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 12727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 12737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*The maximum possible input width is greater than the input\ 12747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi image height (rotation included), 12757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi that means black borders are necessary to keep aspect ratio 12767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi The input height of the AIR is all the input image height*/ 12777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = 12787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (tempOutputSizeWidth*pC->m_pDecodedPlane->u_height)\ 12797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /Params.m_inputSize.m_height; 12807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = (Params.m_outputSize.m_height>>1)<<1; 12817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y = 0; 12827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = pC->m_pDecodedPlane->u_height; 12837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_topleft = 12847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[0].u_width\ 12857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -Params.m_outputSize.m_height))>>1))+1; 12867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_width = Params.m_outputSize.m_height; 12877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_topleft = 12887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[1].u_width\ 12897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_height>>1)))>>1))+1; 12907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_width = Params.m_outputSize.m_height>>1; 12917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_topleft = 12927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_ABS((M4OSA_Int32)(pImagePlanes[2].u_width\ 12937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi -(Params.m_outputSize.m_height>>1)))>>1))+1; 12947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_width = Params.m_outputSize.m_height>>1; 12957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 12987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Width and height have to be even*/ 13027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = (Params.m_outputSize.m_width>>1)<<1; 13037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = (Params.m_outputSize.m_height>>1)<<1; 13047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = (Params.m_inputSize.m_width>>1)<<1; 13057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = (Params.m_inputSize.m_height>>1)<<1; 13067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_width = (pImagePlanes[0].u_width>>1)<<1; 13077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_width = (pImagePlanes[1].u_width>>1)<<1; 13087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_width = (pImagePlanes[2].u_width>>1)<<1; 13097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0].u_height = (pImagePlanes[0].u_height>>1)<<1; 13107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1].u_height = (pImagePlanes[1].u_height>>1)<<1; 13117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2].u_height = (pImagePlanes[2].u_height>>1)<<1; 13127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Check that values are coherent*/ 13147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(Params.m_inputSize.m_height == Params.m_outputSize.m_height) 13157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 13167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = Params.m_outputSize.m_width; 13177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(Params.m_inputSize.m_width == Params.m_outputSize.m_width) 13197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 13207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = Params.m_outputSize.m_height; 13217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 13257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Picture rendering: Resizing and Cropping*/ 13267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_mediaRendering != M4xVSS_kBlackBorders) 13277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 13287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(pBasicTags.orientation) 13297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 13307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 13317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationUnknown: 13327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputOrientation = M4COMMON_kOrientationTopLeft; 13337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationTopLeft: 13347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationTopRight: 13357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationBottomRight: 13367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationBottomLeft: 13377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = pImagePlanes->u_height; 13387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = pImagePlanes->u_width; 13397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationLeftTop: 13417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationLeftBottom: 13427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationRightTop: 13437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4COMMON_kOrientationRightBottom: 13447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_height = pImagePlanes->u_width; 13457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_outputSize.m_width = pImagePlanes->u_height; 13467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 13517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Picture rendering: Cropping*/ 13527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->m_mediaRendering == M4xVSS_kCropping) 13537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 13547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((Params.m_outputSize.m_height * Params.m_inputSize.m_width)\ 13557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /Params.m_outputSize.m_width<Params.m_inputSize.m_height) 13567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 13577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempHeight = Params.m_inputSize.m_height; 13587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*height will be cropped*/ 13597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = (M4OSA_UInt32)((Params.m_outputSize.m_height \ 13607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Params.m_inputSize.m_width) /Params.m_outputSize.m_width); 13617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_height = (Params.m_inputSize.m_height>>1)<<1; 13627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_FALSE == pC->m_pPto3GPPparams->isPanZoom) 13637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 13647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y = (M4OSA_Int32)((M4OSA_Int32)\ 13657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((pC->m_pDecodedPlane->u_height - Params.m_inputSize.m_height))>>1); 13667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 13687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 13697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_y += (M4OSA_Int32)((M4OSA_Int32)\ 13707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((tempHeight - Params.m_inputSize.m_height))>>1); 13717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 13747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 13757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempWidth= Params.m_inputSize.m_width; 13767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*width will be cropped*/ 13777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = (M4OSA_UInt32)((Params.m_outputSize.m_width \ 13787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Params.m_inputSize.m_height) /Params.m_outputSize.m_height); 13797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputSize.m_width = (Params.m_inputSize.m_width>>1)<<1; 13807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_FALSE == pC->m_pPto3GPPparams->isPanZoom) 13817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 13827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x = (M4OSA_Int32)((M4OSA_Int32)\ 13837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((pC->m_pDecodedPlane->u_width - Params.m_inputSize.m_width))>>1); 13847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 13867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 13877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.m_inputCoord.m_x += (M4OSA_Int32)\ 13887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (((M4OSA_Int32)(tempWidth - Params.m_inputSize.m_width))>>1); 13897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 13967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Call AIR functions */ 13977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL == pC->m_air_context) 13987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 13997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AIR_create(&pC->m_air_context, M4AIR_kYUV420P); 14007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 14017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1402694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pDecodedPlane[0].pac_data); 1403694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pDecodedPlane); 14047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pDecodedPlane = M4OSA_NULL; 14057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_PictureCallbackFct:\ 14067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Error when initializing AIR: 0x%x", err); 14077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 14087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AIR_configure(pC->m_air_context, &Params); 14127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 14137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 14147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_PictureCallbackFct:\ 14157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Error when configuring AIR: 0x%x", err); 14167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AIR_cleanUp(pC->m_air_context); 1417694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pDecodedPlane[0].pac_data); 1418694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pDecodedPlane); 14197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pDecodedPlane = M4OSA_NULL; 14207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 14217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AIR_get(pC->m_air_context, pC->m_pDecodedPlane, pImagePlanes); 14247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 14257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 14267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_PictureCallbackFct: Error when getting AIR plane: 0x%x", err); 14277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AIR_cleanUp(pC->m_air_context); 1428694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pDecodedPlane[0].pac_data); 1429694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pDecodedPlane); 14307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pDecodedPlane = M4OSA_NULL; 14317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 14327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[0] = pImagePlanes1; 14347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[1] = pImagePlanes2; 14357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pImagePlanes[2] = pImagePlanes3; 14367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 14407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Increment the image counter */ 14417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_ImageCounter++; 14427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 14447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check end of sequence */ 14457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi last_frame_flag = (pC->m_ImageCounter >= pC->m_NbImage); 14467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 14487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Keep the picture duration */ 14497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pPictureDuration = pC->m_timeDuration; 14507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (1 == last_frame_flag) 14527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 14537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != pC->m_air_context) 14547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 14557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4AIR_cleanUp(pC->m_air_context); 14567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 14577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 14587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_PictureCallbackFct: Error when cleaning AIR: 0x%x", err); 14597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 14607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != pC->m_pDecodedPlane) 14637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1464694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pDecodedPlane[0].pac_data); 1465694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pDecodedPlane); 14667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pDecodedPlane = M4OSA_NULL; 14677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4PTO3GPP_WAR_LAST_PICTURE; 14697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_PictureCallbackFct: Leaving "); 14727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 14737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 14747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 14767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 14777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4xVSS_internalStartConvertPictureTo3gp(M4OSA_Context pContext) 14787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function initializes Pto3GPP with the given parameters 14797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note The "Pictures to 3GPP" parameters are given by the internal xVSS 14807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * context. This context contains a pointer on the current element 14817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * of the chained list of Pto3GPP parameters. 14827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 14837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 14847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 14857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4PTO3GPP_WAR_LAST_PICTURE: The returned image is the last one 14867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 14877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 14887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 14897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalStartConvertPictureTo3gp(M4OSA_Context pContext) 14907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 14917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /************************************************************************/ 14927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Definitions to generate dummy AMR file used to add AMR silence in files generated 14937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi by Pto3GPP */ 14947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi #define M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_SIZE 13 14957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* This constant is defined in M4VSS3GPP_InternalConfig.h */ 14967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi extern const M4OSA_UInt8\ 14977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_AMR_AU_SILENCE_FRAME_048[M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_SIZE]; 14987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* AMR silent frame used to compute dummy AMR silence file */ 15007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi #define M4VSS3GPP_AMR_HEADER_SIZE 6 15017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi const M4OSA_UInt8 M4VSS3GPP_AMR_HEADER[M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_SIZE] = 15027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 0x23, 0x21, 0x41, 0x4d, 0x52, 0x0a }; 15037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /************************************************************************/ 15047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 15067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 15077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP_Context pM4PTO3GPP_Ctxt = M4OSA_NULL; 15087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP_Params Params; 15097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_PictureCallbackCtxt* pCallBackCtxt; 15107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Bool cmpResult=M4OSA_FALSE; 15117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Context pDummyAMRFile; 15125d33cc161e7d13459b4833dbc8b769093c3f80b0Dheeraj Sharma M4OSA_Char out_amr[M4XVSS_MAX_PATH_LEN]; 15137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*UTF conversion support*/ 15147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Char* pDecodedPath = M4OSA_NULL; 15157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i; 15167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 15187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Create a M4PTO3GPP instance */ 15197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4PTO3GPP_Init( &pM4PTO3GPP_Ctxt, xVSS_context->pFileReadPtr, 15207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pFileWritePtr); 15217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 15227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 15235d33cc161e7d13459b4833dbc8b769093c3f80b0Dheeraj Sharma M4OSA_TRACE1_1("M4xVSS_internalStartConvertPictureTo3gp returned %ld\n",err); 15247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 15257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1527694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu pCallBackCtxt = (M4xVSS_PictureCallbackCtxt*)M4OSA_32bitAlignedMalloc(sizeof(M4xVSS_PictureCallbackCtxt), 15287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VS,(M4OSA_Char *) "Pto3gpp callback struct"); 15297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pCallBackCtxt == M4OSA_NULL) 15307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 15317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Allocation error in M4xVSS_internalStartConvertPictureTo3gp"); 15327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 15337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.OutputVideoFrameSize = xVSS_context->pSettings->xVSS.outputVideoSize; 15367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.OutputVideoFormat = xVSS_context->pSettings->xVSS.outputVideoFormat; 15370a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury Params.videoProfile = xVSS_context->pSettings->xVSS.outputVideoProfile; 15380a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury Params.videoLevel = xVSS_context->pSettings->xVSS.outputVideoLevel; 15397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 15417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Generate "dummy" amr file containing silence in temporary folder */ 15425d33cc161e7d13459b4833dbc8b769093c3f80b0Dheeraj Sharma M4OSA_chrNCopy(out_amr, xVSS_context->pTempPath, M4XVSS_MAX_PATH_LEN - 1); 1543947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma strncat((char *)out_amr, (const char *)"dummy.amr\0", 10); 15447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 15467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * UTF conversion: convert the temporary path into the customer format*/ 15477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDecodedPath = out_amr; 15487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->UTFConversionContext.pConvFromUTF8Fct != M4OSA_NULL 15507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && xVSS_context->UTFConversionContext.pTempOutConversionBuffer != M4OSA_NULL) 15517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 15527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 length = 0; 15537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4xVSS_internalConvertFromUTF8(xVSS_context, (M4OSA_Void*) out_amr, 15547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Void*) xVSS_context->UTFConversionContext.pTempOutConversionBuffer, &length); 15557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 15567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 15577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalStartConvertPictureTo3gp:\ 15587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_internalConvertFromUTF8 returns err: 0x%x",err); 15597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 15607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDecodedPath = xVSS_context->UTFConversionContext.pTempOutConversionBuffer; 15627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 15657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * End of the conversion, now use the converted path*/ 15667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = xVSS_context->pFileWritePtr->openWrite(&pDummyAMRFile, pDecodedPath, M4OSA_kFileWrite); 15687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Commented because of the use of the UTF conversion see above*/ 15707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* err = xVSS_context->pFileWritePtr->openWrite(&pDummyAMRFile, out_amr, M4OSA_kFileWrite); 15717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 15727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 15737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 15747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_internalConvertPictureTo3gp: Can't open output dummy amr file %s,\ 15757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi error: 0x%x\n",out_amr, err); 15767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 15777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = xVSS_context->pFileWritePtr->writeData(pDummyAMRFile, 15807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Int8*)M4VSS3GPP_AMR_HEADER, M4VSS3GPP_AMR_HEADER_SIZE); 15817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 15827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 15837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_internalConvertPictureTo3gp: Can't write output dummy amr file %s,\ 15847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi error: 0x%x\n",out_amr, err); 15857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 15867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = xVSS_context->pFileWritePtr->writeData(pDummyAMRFile, 15897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Int8*)M4VSS3GPP_AMR_AU_SILENCE_FRAME_048, M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_SIZE); 15907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 15917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 15927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_internalConvertPictureTo3gp: \ 15937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Can't write output dummy amr file %s, error: 0x%x\n",out_amr, err); 15947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 15957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = xVSS_context->pFileWritePtr->closeWrite(pDummyAMRFile); 15987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 15997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 16007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_internalConvertPictureTo3gp: \ 16017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Can't close output dummy amr file %s, error: 0x%x\n",out_amr, err); 16027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 16037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 16067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Fill parameters for Pto3GPP with the parameters contained in the current element of the 16077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Pto3GPP parameters chained list and with default parameters */ 16087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*+ New Encoder bitrates */ 16097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pSettings->xVSS.outputVideoBitrate == 0) { 16107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.OutputVideoBitrate = M4VIDEOEDITING_kVARIABLE_KBPS; 16117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else { 16137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.OutputVideoBitrate = xVSS_context->pSettings->xVSS.outputVideoBitrate; 16147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalStartConvertPicTo3GP: video bitrate = %d", 16167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.OutputVideoBitrate); 16177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*- New Encoder bitrates */ 16187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.OutputFileMaxSize = M4PTO3GPP_kUNLIMITED; 16197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.pPictureCallbackFct = M4xVSS_PictureCallbackFct; 16207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.pPictureCallbackCtxt = pCallBackCtxt; 16217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*FB: change to use the converted path (UTF conversion) see the conversion above*/ 16227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Fix :- Adding Audio Track in Image as input :AudioTarckFile Setting to NULL */ 16237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.pInputAudioTrackFile = M4OSA_NULL;//(M4OSA_Void*)pDecodedPath;//out_amr; 16247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.AudioPaddingMode = M4PTO3GPP_kAudioPaddingMode_Loop; 16257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.AudioFileFormat = M4VIDEOEDITING_kFileType_AMR; 16267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.pOutput3gppFile = xVSS_context->pPTo3GPPcurrentParams->pFileOut; 16277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.pTemporaryFile = xVSS_context->pPTo3GPPcurrentParams->pFileTemp; 16287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*+PR No: blrnxpsw#223*/ 16297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Increasing frequency of Frame, calculating Nos of Frame = duration /FPS */ 16307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Other changes made is @ M4xVSS_API.c @ line 3841 in M4xVSS_SendCommand*/ 16317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*If case check for PanZoom removed */ 16327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Params.NbVideoFrames = (M4OSA_UInt32) 16337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (xVSS_context->pPTo3GPPcurrentParams->duration \ 16347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi / xVSS_context->pPTo3GPPcurrentParams->framerate); /* */ 16357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pCallBackCtxt->m_timeDuration = xVSS_context->pPTo3GPPcurrentParams->framerate; 16367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*-PR No: blrnxpsw#223*/ 16377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pCallBackCtxt->m_ImageCounter = 0; 16387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pCallBackCtxt->m_FileIn = xVSS_context->pPTo3GPPcurrentParams->pFileIn; 16397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pCallBackCtxt->m_NbImage = Params.NbVideoFrames; 16407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pCallBackCtxt->m_pFileReadPtr = xVSS_context->pFileReadPtr; 16417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pCallBackCtxt->m_pDecodedPlane = M4OSA_NULL; 16427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pCallBackCtxt->m_pPto3GPPparams = xVSS_context->pPTo3GPPcurrentParams; 16437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pCallBackCtxt->m_air_context = M4OSA_NULL; 16447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pCallBackCtxt->m_mediaRendering = xVSS_context->pPTo3GPPcurrentParams->MediaRendering; 16457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 16477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set the input and output files */ 16487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4PTO3GPP_Open(pM4PTO3GPP_Ctxt, &Params); 16497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 16507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 16517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Open returned: 0x%x\n",err); 16527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pCallBackCtxt != M4OSA_NULL) 16537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1654694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pCallBackCtxt); 16557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pCallBackCtxt = M4OSA_NULL; 16567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP_CleanUp(pM4PTO3GPP_Ctxt); 16587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 16597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 16627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Save context to be able to call Pto3GPP step function in M4xVSS_step function */ 16637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pM4PTO3GPP_Ctxt = pM4PTO3GPP_Ctxt; 16647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCallBackCtxt = pCallBackCtxt; 16657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 16677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 16687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 16707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 16717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4xVSS_internalStopConvertPictureTo3gp(M4OSA_Context pContext) 16727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function cleans up Pto3GPP 16737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 16747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 16757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 16767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 16777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 16787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 16797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 16807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalStopConvertPictureTo3gp(M4OSA_Context pContext) 16817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 16827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 16837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 16845d33cc161e7d13459b4833dbc8b769093c3f80b0Dheeraj Sharma M4OSA_Char out_amr[M4XVSS_MAX_PATH_LEN]; 16857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*UTF conversion support*/ 16867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Char* pDecodedPath = M4OSA_NULL; 16877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 16897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free the PTO3GPP callback context */ 16907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != xVSS_context->pCallBackCtxt) 16917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1692694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pCallBackCtxt); 16937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCallBackCtxt = M4OSA_NULL; 16947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 16977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Finalize the output file */ 16987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4PTO3GPP_Close(xVSS_context->pM4PTO3GPP_Ctxt); 16997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 17007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Close returned 0x%x\n",err); 17027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP_CleanUp(xVSS_context->pM4PTO3GPP_Ctxt); 17037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 17047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 17077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free this M4PTO3GPP instance */ 17087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4PTO3GPP_CleanUp(xVSS_context->pM4PTO3GPP_Ctxt); 17097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 17107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_CleanUp returned 0x%x\n",err); 17127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 17137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 17167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Remove dummy.amr file */ 17175d33cc161e7d13459b4833dbc8b769093c3f80b0Dheeraj Sharma M4OSA_chrNCopy(out_amr, xVSS_context->pTempPath, M4XVSS_MAX_PATH_LEN - 1); 1718947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma strncat((char *)out_amr, (const char *)"dummy.amr\0", 10); 17197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 17217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * UTF conversion: convert the temporary path into the customer format*/ 17227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDecodedPath = out_amr; 17237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->UTFConversionContext.pConvFromUTF8Fct != M4OSA_NULL 17257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && xVSS_context->UTFConversionContext.pTempOutConversionBuffer != M4OSA_NULL) 17267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 length = 0; 17287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4xVSS_internalConvertFromUTF8(xVSS_context, (M4OSA_Void*) out_amr, 17297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Void*) xVSS_context->UTFConversionContext.pTempOutConversionBuffer, &length); 17307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 17317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalStopConvertPictureTo3gp:\ 17337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_internalConvertFromUTF8 returns err: 0x%x",err); 17347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 17357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDecodedPath = xVSS_context->UTFConversionContext.pTempOutConversionBuffer; 17377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 17397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * End of the conversion, now use the decoded path*/ 1740947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma remove((const char *)pDecodedPath); 17417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Commented because of the use of the UTF conversion*/ 1743947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma/* remove(out_amr); 17447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 17457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pM4PTO3GPP_Ctxt = M4OSA_NULL; 17477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCallBackCtxt = M4OSA_NULL; 17487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 17507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 17517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 17537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 17547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalConvertRGBtoYUV(M4xVSS_FramingStruct* framingCtx) 17557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function converts an RGB565 plane to YUV420 planar 17567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note It is used only for framing effect 17577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * It allocates output YUV planes 17587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param framingCtx (IN) The framing struct containing input RGB565 plane 17597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 17607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 17617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 17627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC: Allocation error (no more memory) 17637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 17647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 17657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalConvertRGBtoYUV(M4xVSS_FramingStruct* framingCtx) 17667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 17677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 17687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 17707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Allocate output YUV planes */ 1771694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu framingCtx->FramingYuv = (M4VIFI_ImagePlane*)M4OSA_32bitAlignedMalloc(3*sizeof(M4VIFI_ImagePlane), 17727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VS, (M4OSA_Char *)"M4xVSS_internalConvertRGBtoYUV: Output plane YUV"); 17737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->FramingYuv == M4OSA_NULL) 17747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Allocation error in M4xVSS_internalConvertRGBtoYUV"); 17767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 17777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[0].u_width = framingCtx->FramingRgb->u_width; 17797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[0].u_height = framingCtx->FramingRgb->u_height; 17807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[0].u_topleft = 0; 17817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[0].u_stride = framingCtx->FramingRgb->u_width; 17827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[0].pac_data = 1783694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc((framingCtx->FramingYuv[0].u_width\ 17847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *framingCtx->FramingYuv[0].u_height*3)>>1, M4VS, (M4OSA_Char *)\ 17857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Alloc for the Convertion output YUV");; 17867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->FramingYuv[0].pac_data == M4OSA_NULL) 17877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Allocation error in M4xVSS_internalConvertRGBtoYUV"); 17897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 17907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[1].u_width = (framingCtx->FramingRgb->u_width)>>1; 17927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[1].u_height = (framingCtx->FramingRgb->u_height)>>1; 17937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[1].u_topleft = 0; 17947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[1].u_stride = (framingCtx->FramingRgb->u_width)>>1; 17957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[1].pac_data = framingCtx->FramingYuv[0].pac_data \ 17967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi + framingCtx->FramingYuv[0].u_width * framingCtx->FramingYuv[0].u_height; 17977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[2].u_width = (framingCtx->FramingRgb->u_width)>>1; 17987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[2].u_height = (framingCtx->FramingRgb->u_height)>>1; 17997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[2].u_topleft = 0; 18007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[2].u_stride = (framingCtx->FramingRgb->u_width)>>1; 18017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[2].pac_data = framingCtx->FramingYuv[1].pac_data \ 18027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi + framingCtx->FramingYuv[1].u_width * framingCtx->FramingYuv[1].u_height; 18037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 18057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Convert input RGB 565 to YUV 420 to be able to merge it with output video in framing 18067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi effect */ 18077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4VIFI_xVSS_RGB565toYUV420(M4OSA_NULL, framingCtx->FramingRgb, framingCtx->FramingYuv); 18087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 18097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 18107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalConvertRGBtoYUV:\ 18117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi error when converting from RGB to YUV: 0x%x\n", err); 18127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->duration = 0; 18157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->previousClipTime = -1; 18167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->previewOffsetClipTime = -1; 18177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 18197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Only one element in the chained list (no animated image with RGB buffer...) */ 18207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->pCurrent = framingCtx; 18217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->pNext = framingCtx; 18227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 18247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 18257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalSetPlaneTransparent(M4OSA_UInt8* planeIn, M4OSA_UInt32 size) 18277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 18287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i; 18297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8* plane = planeIn; 18307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 transparent1 = (M4OSA_UInt8)((TRANSPARENT_COLOR & 0xFF00)>>8); 18317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 transparent2 = (M4OSA_UInt8)TRANSPARENT_COLOR; 18327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0; i<(size>>1); i++) 18347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 18357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *plane++ = transparent1; 18367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *plane++ = transparent2; 18377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 18407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 18417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 18447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 18457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalConvertARBG888toYUV420_FrammingEffect(M4OSA_Context pContext, 18467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VSS3GPP_EffectSettings* pEffect, 18477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4xVSS_FramingStruct* framingCtx, 18487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIDEOEDITING_VideoFrameSize OutputVideoResolution) 18497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 18507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function converts ARGB8888 input file to YUV420 whenused for framming effect 18517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note The input ARGB8888 file path is contained in the pEffect structure 18527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * If the ARGB8888 must be resized to fit output video size, this function 18537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * will do it. 18547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 18557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pEffect (IN) The effect structure containing all informations on 18567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the file to decode, resizing ... 18577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param framingCtx (IN/OUT) Structure in which the output RGB will be stored 18587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 18597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 18607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 18617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC: Allocation error (no more memory) 18624f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi * @return M4ERR_FILE_NOT_FOUND: File not found. 18637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 18647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 18657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalConvertARGB888toYUV420_FrammingEffect(M4OSA_Context pContext, 18687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_EffectSettings* pEffect, 18697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_FramingStruct* framingCtx, 18707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIDEOEDITING_VideoFrameSize\ 18714f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi OutputVideoResolution) 18727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 18734f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 18747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Context pARGBIn; 18757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 file_size; 18767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 18777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 width, height, width_out, height_out; 18787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Void* pFile = pEffect->xVSS.pFramingFilePath; 18797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 transparent1 = (M4OSA_UInt8)((TRANSPARENT_COLOR & 0xFF00)>>8); 18807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 transparent2 = (M4OSA_UInt8)TRANSPARENT_COLOR; 18817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*UTF conversion support*/ 18827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Char* pDecodedPath = M4OSA_NULL; 18837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i = 0,j = 0; 18847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane rgbPlane; 18857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 frameSize_argb=(framingCtx->width * framingCtx->height * 4); 18864f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi M4OSA_UInt32 frameSize; 18870078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava M4OSA_UInt32 tempAlphaPercent = 0; 18880078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava M4VIFI_UInt8* TempPacData = M4OSA_NULL; 18890078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava M4OSA_UInt16 *ptr = M4OSA_NULL; 18900078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava M4OSA_UInt32 z = 0; 18910078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 18924f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi M4OSA_TRACE3_0("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect: Entering "); 18934f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi 18947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect width and height %d %d ", 18957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->width,framingCtx->height); 18964f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi 1897694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu M4OSA_UInt8 *pTmpData = (M4OSA_UInt8*) M4OSA_32bitAlignedMalloc(frameSize_argb, M4VS, (M4OSA_Char*)\ 18984f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi "Image argb data"); 18997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pTmpData == M4OSA_NULL) { 19007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Failed to allocate memory for Image clip"); 19017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 19027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 19037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 19047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * UTF conversion: convert the file path into the customer format*/ 19057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDecodedPath = pFile; 19067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->UTFConversionContext.pConvFromUTF8Fct != M4OSA_NULL 19087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && xVSS_context->UTFConversionContext.pTempOutConversionBuffer != M4OSA_NULL) 19097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 19107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 length = 0; 19117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4xVSS_internalConvertFromUTF8(xVSS_context, (M4OSA_Void*) pFile, 19127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Void*) xVSS_context->UTFConversionContext.pTempOutConversionBuffer, &length); 19137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 19147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 19157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalDecodePNG:\ 19167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_internalConvertFromUTF8 returns err: 0x%x",err); 1917694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pTmpData); 19184f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi pTmpData = M4OSA_NULL; 19197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 19207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 19217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDecodedPath = xVSS_context->UTFConversionContext.pTempOutConversionBuffer; 19227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 19237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 19257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * End of the conversion, now use the decoded path*/ 19267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Open input ARGB8888 file and store it into memory */ 19287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = xVSS_context->pFileReadPtr->openRead(&pARGBIn, pDecodedPath, M4OSA_kFileRead); 19297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 19317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 19327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("Can't open input ARGB8888 file %s, error: 0x%x\n",pFile, err); 1933694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pTmpData); 19347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pTmpData = M4OSA_NULL; 19357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 19367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 19377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = xVSS_context->pFileReadPtr->readData(pARGBIn,(M4OSA_MemAddr8)pTmpData, &frameSize_argb); 19397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 19407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 19417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pFileReadPtr->closeRead(pARGBIn); 1942694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pTmpData); 19437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pTmpData = M4OSA_NULL; 19444f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi return err; 19457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 19467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = xVSS_context->pFileReadPtr->closeRead(pARGBIn); 19497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 19507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 19517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("Can't close input png file %s, error: 0x%x\n",pFile, err); 1952694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pTmpData); 19537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pTmpData = M4OSA_NULL; 19547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 19557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 19567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19574f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi 19584f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi rgbPlane.u_height = framingCtx->height; 19594f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi rgbPlane.u_width = framingCtx->width; 19604f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi rgbPlane.u_stride = rgbPlane.u_width*3; 19614f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi rgbPlane.u_topleft = 0; 19624f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi 19634f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi frameSize = (rgbPlane.u_width * rgbPlane.u_height * 3); //Size of RGB888 data 1964694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu rgbPlane.pac_data = (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc(((frameSize)+ (2 * framingCtx->width)), 19657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VS, (M4OSA_Char*)"Image clip RGB888 data"); 19667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(rgbPlane.pac_data == M4OSA_NULL) 19677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 19687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Failed to allocate memory for Image clip"); 1969694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pTmpData); 19707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 19717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 19727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect:\ 19747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Remove the alpha channel "); 19750078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 19760078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava /* premultiplied alpha % on RGB */ 19770078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava for (i=0, j = 0; i < frameSize_argb; i += 4) { 19780078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava /* this is alpha value */ 19790078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava if ((i % 4) == 0) 19800078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava { 19810078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava tempAlphaPercent = pTmpData[i]; 19820078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava } 19830078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 19840078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava /* R */ 19850078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava rgbPlane.pac_data[j] = pTmpData[i+1]; 19860078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava j++; 19870078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 19880078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava /* G */ 19890078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava if (tempAlphaPercent > 0) { 19900078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava rgbPlane.pac_data[j] = pTmpData[i+2]; 19910078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava j++; 19920078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava } else {/* In case of alpha value 0, make GREEN to 255 */ 19930078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava rgbPlane.pac_data[j] = 255; //pTmpData[i+2]; 19940078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava j++; 19950078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava } 19960078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 19970078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava /* B */ 19980078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava rgbPlane.pac_data[j] = pTmpData[i+3]; 19990078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava j++; 20000078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava } 20010078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 2002694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pTmpData); 20034f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi pTmpData = M4OSA_NULL; 20044f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi 20050078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava /* convert RGB888 to RGB565 */ 20060078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 20070078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava /* allocate temp RGB 565 buffer */ 2008694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu TempPacData = (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc(frameSize + 20094f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi (4 * (framingCtx->width + framingCtx->height + 1)), 20100078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava M4VS, (M4OSA_Char*)"Image clip RGB565 data"); 20114f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi if (TempPacData == M4OSA_NULL) { 20124f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi M4OSA_TRACE1_0("Failed to allocate memory for Image clip RGB565 data"); 2013694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(rgbPlane.pac_data); 20144f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi return M4ERR_ALLOC; 20154f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi } 20160078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 20170078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava ptr = (M4OSA_UInt16 *)TempPacData; 20180078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava z = 0; 20190078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 20200078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava for (i = 0; i < j ; i += 3) 20210078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava { 20220078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava ptr[z++] = PACK_RGB565(0, rgbPlane.pac_data[i], 20230078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava rgbPlane.pac_data[i+1], 20240078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava rgbPlane.pac_data[i+2]); 20250078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava } 20260078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 20270078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava /* free the RBG888 and assign RGB565 */ 2028694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(rgbPlane.pac_data); 20290078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava rgbPlane.pac_data = TempPacData; 20300078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 20317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 20327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check if output sizes are odd */ 20337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(rgbPlane.u_height % 2 != 0) 20347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 20357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8* output_pac_data = rgbPlane.pac_data; 20367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i; 20377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect:\ 20387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi output height is odd "); 20390078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava output_pac_data +=rgbPlane.u_width * rgbPlane.u_height*2; 20400078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 20417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0;i<rgbPlane.u_width;i++) 20427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 20437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *output_pac_data++ = transparent1; 20447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *output_pac_data++ = transparent2; 20457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 20467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 20477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 20487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We just add a white line to the PNG that will be transparent */ 20497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane.u_height++; 20507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 20517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(rgbPlane.u_width % 2 != 0) 20527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 20537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 20547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We add a new column of white (=transparent), but we need to parse all RGB lines ... */ 20557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i; 20567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8* newRGBpac_data; 20577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8* output_pac_data, *input_pac_data; 20587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 20597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane.u_width++; 20607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect: \ 20617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi output width is odd "); 20627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 20637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We need to allocate a new RGB output buffer in which all decoded data 20647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi + white line will be copied */ 2065694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu newRGBpac_data = (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc(rgbPlane.u_height*rgbPlane.u_width*2\ 20667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *sizeof(M4VIFI_UInt8), M4VS, (M4OSA_Char *)"New Framing GIF Output pac_data RGB"); 20670078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 20687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(newRGBpac_data == M4OSA_NULL) 20697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 20707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Allocation error in \ 20717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_internalConvertARGB888toYUV420_FrammingEffect"); 2072694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(rgbPlane.pac_data); 20737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 20747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 20757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 20767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi output_pac_data= newRGBpac_data; 20777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi input_pac_data = rgbPlane.pac_data; 20787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 20797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0;i<rgbPlane.u_height;i++) 20807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 208132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)output_pac_data, (void *)input_pac_data, 20820078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava (rgbPlane.u_width-1)*2); 20830078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 20840078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava output_pac_data += ((rgbPlane.u_width-1)*2); 20857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Put the pixel to transparency color */ 20867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *output_pac_data++ = transparent1; 20877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *output_pac_data++ = transparent2; 20880078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 20890078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava input_pac_data += ((rgbPlane.u_width-1)*2); 20907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2091694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(rgbPlane.pac_data); 20927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane.pac_data = newRGBpac_data; 20937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 20947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 20954f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi /* reset stride */ 20964f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi rgbPlane.u_stride = rgbPlane.u_width*2; 20974f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi 20987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 20997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Initialize chained list parameters */ 21007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->duration = 0; 21017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->previousClipTime = -1; 21027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->previewOffsetClipTime = -1; 21037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 21047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 21057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Only one element in the chained list (no animated image ...) */ 21067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->pCurrent = framingCtx; 21077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->pNext = framingCtx; 21087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 21097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 21107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Get output width/height */ 21117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(OutputVideoResolution) 21127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //switch(xVSS_context->pSettings->xVSS.outputVideoSize) 21137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 21147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kSQCIF: 21157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width_out = 128; 21167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 96; 21177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kQQVGA: 21197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width_out = 160; 21207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 120; 21217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kQCIF: 21237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width_out = 176; 21247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 144; 21257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kQVGA: 21277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width_out = 320; 21287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 240; 21297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kCIF: 21317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width_out = 352; 21327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 288; 21337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kVGA: 21357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width_out = 640; 21367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 480; 21377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kWVGA: 21397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width_out = 800; 21407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 480; 21417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kNTSC: 21437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width_out = 720; 21447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 480; 21457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k640_360: 21477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width_out = 640; 21487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 360; 21497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k854_480: 21517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // StageFright encoders require %16 resolution 21527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width_out = M4ENCODER_854_480_Width; 21537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 480; 21547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21558806b706693c0992724f6603353af18aeb4a0f80Hong Teng case M4VIDEOEDITING_k1280_720: 21567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width_out = 1280; 21577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 720; 21587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21598806b706693c0992724f6603353af18aeb4a0f80Hong Teng case M4VIDEOEDITING_k1080_720: 21607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // StageFright encoders require %16 resolution 21618806b706693c0992724f6603353af18aeb4a0f80Hong Teng width_out = M4ENCODER_1080_720_Width; 21627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 720; 21637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21648806b706693c0992724f6603353af18aeb4a0f80Hong Teng case M4VIDEOEDITING_k960_720: 21657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width_out = 960; 21667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 720; 21677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21688806b706693c0992724f6603353af18aeb4a0f80Hong Teng case M4VIDEOEDITING_k1920_1080: 21698806b706693c0992724f6603353af18aeb4a0f80Hong Teng width_out = 1920; 21708806b706693c0992724f6603353af18aeb4a0f80Hong Teng height_out = M4ENCODER_1920_1080_Height; 21718806b706693c0992724f6603353af18aeb4a0f80Hong Teng break; 21727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 21737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * If output video size is not given, we take QCIF size, 21747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * should not happen, because already done in M4xVSS_sendCommand */ 21757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 21767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width_out = 176; 21777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height_out = 144; 21787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 21797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 21807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 21810078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava /** 21827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Allocate output planes structures */ 2183694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu framingCtx->FramingRgb = (M4VIFI_ImagePlane*)M4OSA_32bitAlignedMalloc(sizeof(M4VIFI_ImagePlane), M4VS, 21847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char *)"Framing Output plane RGB"); 21857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->FramingRgb == M4OSA_NULL) 21867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 21877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Allocation error in M4xVSS_internalConvertARGB888toYUV420_FrammingEffect"); 21887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 21897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 21907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 21917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Resize RGB if needed */ 21927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((pEffect->xVSS.bResize) && 21937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (rgbPlane.u_width != width_out || rgbPlane.u_height != height_out)) 21947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 21957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width = width_out; 21967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height = height_out; 21977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 21987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect: \ 21997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi New Width and height %d %d ",width,height); 22007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 22017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingRgb->u_height = height_out; 22027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingRgb->u_width = width_out; 22030078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava framingCtx->FramingRgb->u_stride = framingCtx->FramingRgb->u_width*2; 22047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingRgb->u_topleft = 0; 22057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 22067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingRgb->pac_data = 2207694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc(framingCtx->FramingRgb->u_height*framingCtx->\ 22080078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava FramingRgb->u_width*2*sizeof(M4VIFI_UInt8), M4VS, 22097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char *)"Framing Output pac_data RGB"); 22100078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 22117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->FramingRgb->pac_data == M4OSA_NULL) 22127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 22137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Allocation error in \ 22147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_internalConvertARGB888toYUV420_FrammingEffect"); 2215694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingRgb); 2216694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(rgbPlane.pac_data); 22177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 22187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 22197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 22207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect: Resizing Needed "); 22217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect:\ 22227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane.u_height & rgbPlane.u_width %d %d",rgbPlane.u_height,rgbPlane.u_width); 22230078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 22240078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava //err = M4VIFI_ResizeBilinearRGB888toRGB888(M4OSA_NULL, &rgbPlane,framingCtx->FramingRgb); 22250078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava err = M4VIFI_ResizeBilinearRGB565toRGB565(M4OSA_NULL, &rgbPlane,framingCtx->FramingRgb); 22260078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 22277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 22287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 22297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect :\ 22307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi when resizing RGB plane: 0x%x\n", err); 22317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 22327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 22337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 22347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(rgbPlane.pac_data != M4OSA_NULL) 22357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2236694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(rgbPlane.pac_data); 22377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rgbPlane.pac_data = M4OSA_NULL; 22387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 22397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 22407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 22417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 22427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 22437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect:\ 22447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Resizing Not Needed "); 22454f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi 22464f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi width = rgbPlane.u_width; 22474f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi height = rgbPlane.u_height; 22487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingRgb->u_height = height; 22497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingRgb->u_width = width; 22500078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava framingCtx->FramingRgb->u_stride = framingCtx->FramingRgb->u_width*2; 22517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingRgb->u_topleft = 0; 22527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingRgb->pac_data = rgbPlane.pac_data; 22537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 22547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 22557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 22567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pEffect->xVSS.bResize) 22577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 22587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 22597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Force topleft to 0 for pure framing effect */ 22607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->topleft_x = 0; 22617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->topleft_y = 0; 22627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 22637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 22647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 22657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 22667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Convert RGB output to YUV 420 to be able to merge it with output video in framing 22677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi effect */ 2268694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu framingCtx->FramingYuv = (M4VIFI_ImagePlane*)M4OSA_32bitAlignedMalloc(3*sizeof(M4VIFI_ImagePlane), M4VS, 22697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char *)"Framing Output plane YUV"); 22707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->FramingYuv == M4OSA_NULL) 22717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 22727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Allocation error in M4xVSS_internalConvertARGB888toYUV420_FrammingEffect"); 2273694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingRgb->pac_data); 22747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 22757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 22764f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi 22774f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi // Alloc for Y, U and V planes 22787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[0].u_width = ((width+1)>>1)<<1; 22797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[0].u_height = ((height+1)>>1)<<1; 22807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[0].u_topleft = 0; 22817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[0].u_stride = ((width+1)>>1)<<1; 2282694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu framingCtx->FramingYuv[0].pac_data = (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc 22834f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi ((framingCtx->FramingYuv[0].u_width*framingCtx->FramingYuv[0].u_height), M4VS, 22844f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi (M4OSA_Char *)"Alloc for the output Y"); 22857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->FramingYuv[0].pac_data == M4OSA_NULL) 22867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 22877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Allocation error in M4xVSS_internalConvertARGB888toYUV420_FrammingEffect"); 2288694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingYuv); 2289694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingRgb->pac_data); 22907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 22917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 22927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[1].u_width = (((width+1)>>1)<<1)>>1; 22937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[1].u_height = (((height+1)>>1)<<1)>>1; 22947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[1].u_topleft = 0; 22957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[1].u_stride = (((width+1)>>1)<<1)>>1; 22967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 22974f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi 2298694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu framingCtx->FramingYuv[1].pac_data = (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc( 22994f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi framingCtx->FramingYuv[1].u_width * framingCtx->FramingYuv[1].u_height, M4VS, 23004f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi (M4OSA_Char *)"Alloc for the output U"); 23014f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi if (framingCtx->FramingYuv[1].pac_data == M4OSA_NULL) { 2302694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingYuv[0].pac_data); 2303694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingYuv); 2304694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingRgb->pac_data); 23054f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi return M4ERR_ALLOC; 23064f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi } 23077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 23087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[2].u_width = (((width+1)>>1)<<1)>>1; 23097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[2].u_height = (((height+1)>>1)<<1)>>1; 23107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[2].u_topleft = 0; 23117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[2].u_stride = (((width+1)>>1)<<1)>>1; 23127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 23137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2314694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu framingCtx->FramingYuv[2].pac_data = (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc( 23154f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi framingCtx->FramingYuv[2].u_width * framingCtx->FramingYuv[0].u_height, M4VS, 23164f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi (M4OSA_Char *)"Alloc for the output V"); 23174f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi if (framingCtx->FramingYuv[2].pac_data == M4OSA_NULL) { 2318694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingYuv[1].pac_data); 2319694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingYuv[0].pac_data); 2320694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingYuv); 2321694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingRgb->pac_data); 23224f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi return M4ERR_ALLOC; 23234f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi } 23247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 23254f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi M4OSA_TRACE3_0("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect:\ 23264f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi convert RGB to YUV "); 23277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 23280078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava //err = M4VIFI_RGB888toYUV420(M4OSA_NULL, framingCtx->FramingRgb, framingCtx->FramingYuv); 23290078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava err = M4VIFI_RGB565toYUV420(M4OSA_NULL, framingCtx->FramingRgb, framingCtx->FramingYuv); 23300078736220b9372f2c82eb258ceca3dbd6c358efSantosh Madhava 23314f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi if (err != M4NO_ERROR) 23327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 23337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("SPS png: error when converting from RGB to YUV: 0x%x\n", err); 23347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 23354f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi M4OSA_TRACE3_0("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect: Leaving "); 23364f155f0cffa2414545854e899dff4861187e1f68Dharmaray Kundargi return err; 23377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 23387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 23397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 23407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 23417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalGenerateEditedFile(M4OSA_Context pContext) 23427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 23437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function prepares VSS for editing 23447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note It also set special xVSS effect as external effects for the VSS 23457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 23467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 23477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 23487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 23497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC: Allocation error (no more memory) 23507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 23517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 23527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalGenerateEditedFile(M4OSA_Context pContext) 23537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 23547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 23557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_EditContext pVssCtxt; 23567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i,j; 23577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 23587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 23597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 23607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Create a VSS 3GPP edition instance */ 23617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4VSS3GPP_editInit( &pVssCtxt, xVSS_context->pFileReadPtr, xVSS_context->pFileWritePtr); 23627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 23637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 23647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalGenerateEditedFile: M4VSS3GPP_editInit returned 0x%x\n", 23657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err); 23667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_editCleanUp(pVssCtxt); 23672d461d443d4d0a35acb9cfd49cafad8941b17a0bRajneesh Chowdury /** 23682d461d443d4d0a35acb9cfd49cafad8941b17a0bRajneesh Chowdury * Set the VSS context to NULL */ 23692d461d443d4d0a35acb9cfd49cafad8941b17a0bRajneesh Chowdury xVSS_context->pCurrentEditContext = M4OSA_NULL; 23707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 23717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 23727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 23736e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury M4VSS3GPP_InternalEditContext* pVSSContext = 23746e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury (M4VSS3GPP_InternalEditContext*)pVssCtxt; 23756e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pVSSContext->xVSS.outputVideoFormat = 23766e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury xVSS_context->pSettings->xVSS.outputVideoFormat; 23776e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pVSSContext->xVSS.outputVideoSize = 23786e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury xVSS_context->pSettings->xVSS.outputVideoSize ; 23796e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pVSSContext->xVSS.outputAudioFormat = 23806e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury xVSS_context->pSettings->xVSS.outputAudioFormat; 23816e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pVSSContext->xVSS.outputAudioSamplFreq = 23826e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury xVSS_context->pSettings->xVSS.outputAudioSamplFreq; 23836e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pVSSContext->xVSS.outputVideoBitrate = 23846e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury xVSS_context->pSettings->xVSS.outputVideoBitrate ; 23856e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pVSSContext->xVSS.outputAudioBitrate = 23866e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury xVSS_context->pSettings->xVSS.outputAudioBitrate ; 23876e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury pVSSContext->xVSS.bAudioMono = 23886e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury xVSS_context->pSettings->xVSS.bAudioMono; 23890a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury pVSSContext->xVSS.outputVideoProfile = 23900a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury xVSS_context->pSettings->xVSS.outputVideoProfile; 23910a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury pVSSContext->xVSS.outputVideoLevel = 23920a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury xVSS_context->pSettings->xVSS.outputVideoLevel; 23937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* In case of MMS use case, we fill directly into the VSS context the targeted bitrate */ 23947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->targetedBitrate != 0) 23957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 23967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_InternalEditContext* pVSSContext = (M4VSS3GPP_InternalEditContext*)pVssCtxt; 23977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 23987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVSSContext->bIsMMS = M4OSA_TRUE; 23997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVSSContext->uiMMSVideoBitrate = xVSS_context->targetedBitrate; 24007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVSSContext->MMSvideoFramerate = xVSS_context->pSettings->videoFrameRate; 24017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 24027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 24037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Warning: since the adding of the UTF conversion, pSettings has been changed in the next 24047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi part in pCurrentEditSettings (there is a specific current editing structure for the saving, 24057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi as for the preview)*/ 24067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 24077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 24087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set the external video effect functions, for saving mode (to be moved to 24097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_saveStart() ?)*/ 24107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i=0; i<xVSS_context->pCurrentEditSettings->uiClipNumber; i++) 24117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 24127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (j=0; j<xVSS_context->pCurrentEditSettings->nbEffects; j++) 24137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 24147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4xVSS_kVideoEffectType_BlackAndWhite == 24157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].VideoEffectType) 24167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 24177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].ExtVideoEffectFct = 24187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_externalVideoEffectColor; 24197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //xVSS_context->pSettings->Effects[j].pExtVideoEffectFctCtxt = 24207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // (M4OSA_Void*)M4xVSS_kVideoEffectType_BlackAndWhite; 24217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*commented FB*/ 24227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 24237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We do not need to set the color context, it is already set 24247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi during sendCommand function */ 24257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 24267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4xVSS_kVideoEffectType_Pink == 24277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].VideoEffectType) 24287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 24297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].ExtVideoEffectFct = 24307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_externalVideoEffectColor; 24317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //xVSS_context->pSettings->Effects[j].pExtVideoEffectFctCtxt = 24327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // (M4OSA_Void*)M4xVSS_kVideoEffectType_Pink; /**< we don't 24337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // use any function context */ 24347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*commented FB*/ 24357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 24367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We do not need to set the color context, 24377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi it is already set during sendCommand function */ 24387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 24397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4xVSS_kVideoEffectType_Green == 24407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].VideoEffectType) 24417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 24427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].ExtVideoEffectFct = 24437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_externalVideoEffectColor; 24447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //xVSS_context->pSettings->Effects[j].pExtVideoEffectFctCtxt = 24457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // (M4OSA_Void*)M4xVSS_kVideoEffectType_Green; 24467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< we don't use any function context */ 24477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*commented FB*/ 24487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 24497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We do not need to set the color context, it is already set during 24507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sendCommand function */ 24517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 24527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4xVSS_kVideoEffectType_Sepia == 24537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].VideoEffectType) 24547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 24557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].ExtVideoEffectFct = 24567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_externalVideoEffectColor; 24577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //xVSS_context->pSettings->Effects[j].pExtVideoEffectFctCtxt = 24587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // (M4OSA_Void*)M4xVSS_kVideoEffectType_Sepia; 24597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< we don't use any function context */ 24607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*commented FB*/ 24617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 24627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We do not need to set the color context, it is already set during 24637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sendCommand function */ 24647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 24657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4xVSS_kVideoEffectType_Fifties == 24667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].VideoEffectType) 24677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 24687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].ExtVideoEffectFct = 24697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_externalVideoEffectFifties; 24707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 24717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We do not need to set the framing context, it is already set during 24727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sendCommand function */ 24737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 24747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4xVSS_kVideoEffectType_Negative == 24757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].VideoEffectType) 24767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 24777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].ExtVideoEffectFct = 24787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_externalVideoEffectColor; 24797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //xVSS_context->pSettings->Effects[j].pExtVideoEffectFctCtxt = 24807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // (M4OSA_Void*)M4xVSS_kVideoEffectType_Negative; 24817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< we don't use any function context */ 24827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*commented FB*/ 24837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 24847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We do not need to set the color context, it is already set during 24857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sendCommand function */ 24867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 24877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4xVSS_kVideoEffectType_Framing == 24887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].VideoEffectType) 24897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 24907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].ExtVideoEffectFct = 24917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_externalVideoEffectFraming; 24927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 24937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We do not need to set the framing context, it is already set during 24947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sendCommand function */ 24957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 24967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4xVSS_kVideoEffectType_ZoomIn == 24977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pSettings->Effects[j].VideoEffectType) 24987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 24997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].ExtVideoEffectFct = 25007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_externalVideoEffectZoom; 25017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].pExtVideoEffectFctCtxt = 25027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Void*)M4xVSS_kVideoEffectType_ZoomIn; /**< we don't use any 25037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi function context */ 25047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 25057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4xVSS_kVideoEffectType_ZoomOut == 25067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].VideoEffectType) 25077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 25087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].ExtVideoEffectFct = 25097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_externalVideoEffectZoom; 25107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].pExtVideoEffectFctCtxt = 25117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Void*)M4xVSS_kVideoEffectType_ZoomOut; /**< we don't use any 25127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi function context */ 25137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 25147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4xVSS_kVideoEffectType_ColorRGB16 == 25157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].VideoEffectType) 25167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 25177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].ExtVideoEffectFct = 25187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_externalVideoEffectColor; 25197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //xVSS_context->pSettings->Effects[j].pExtVideoEffectFctCtxt = 25207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // (M4OSA_Void*)M4xVSS_kVideoEffectType_ColorRGB16; 25217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< we don't use any function context */ 25227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 25237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We do not need to set the color context, it is already set during 25247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sendCommand function */ 25257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 25267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4xVSS_kVideoEffectType_Gradient == 25277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].VideoEffectType) 25287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 25297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects[j].ExtVideoEffectFct = 25307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_externalVideoEffectColor; 25317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //xVSS_context->pSettings->Effects[j].pExtVideoEffectFctCtxt = 25327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // (M4OSA_Void*)M4xVSS_kVideoEffectType_ColorRGB16; 25337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< we don't use any function context */ 25347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 25357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We do not need to set the color context, it is already set during 25367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sendCommand function */ 25377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 25387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 25397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 25407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 25417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 25427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 25437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Open the VSS 3GPP */ 25447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4VSS3GPP_editOpen(pVssCtxt, xVSS_context->pCurrentEditSettings); 25457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 25467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 25477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalGenerateEditedFile:\ 25487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_editOpen returned 0x%x\n",err); 25497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_editCleanUp(pVssCtxt); 25502d461d443d4d0a35acb9cfd49cafad8941b17a0bRajneesh Chowdury /** 25512d461d443d4d0a35acb9cfd49cafad8941b17a0bRajneesh Chowdury * Set the VSS context to NULL */ 25522d461d443d4d0a35acb9cfd49cafad8941b17a0bRajneesh Chowdury xVSS_context->pCurrentEditContext = M4OSA_NULL; 25537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 25547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 25557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 25567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 25577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Save VSS context to be able to close / free VSS later */ 25587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditContext = pVssCtxt; 25597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 25607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 25617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 25627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 25637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 25647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 25657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalCloseEditedFile(M4OSA_Context pContext) 25667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 25677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function cleans up VSS 25687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 25697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 25707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 25717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 25727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 25737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 25747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 25757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalCloseEditedFile(M4OSA_Context pContext) 25767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 25777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 25787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_EditContext pVssCtxt = xVSS_context->pCurrentEditContext; 25797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 25807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 25817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditContext != M4OSA_NULL) 25827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 25837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 25847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Close the VSS 3GPP */ 25857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4VSS3GPP_editClose(pVssCtxt); 25867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 25877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 25887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalCloseEditedFile:\ 25897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_editClose returned 0x%x\n",err); 25907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_editCleanUp(pVssCtxt); 25912d461d443d4d0a35acb9cfd49cafad8941b17a0bRajneesh Chowdury /** 25922d461d443d4d0a35acb9cfd49cafad8941b17a0bRajneesh Chowdury * Set the VSS context to NULL */ 25932d461d443d4d0a35acb9cfd49cafad8941b17a0bRajneesh Chowdury xVSS_context->pCurrentEditContext = M4OSA_NULL; 25947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 25957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 25967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 25977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 25987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free this VSS3GPP edition instance */ 25997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4VSS3GPP_editCleanUp(pVssCtxt); 26002d461d443d4d0a35acb9cfd49cafad8941b17a0bRajneesh Chowdury /** 26012d461d443d4d0a35acb9cfd49cafad8941b17a0bRajneesh Chowdury * Set the VSS context to NULL */ 26022d461d443d4d0a35acb9cfd49cafad8941b17a0bRajneesh Chowdury xVSS_context->pCurrentEditContext = M4OSA_NULL; 26037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 26047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 26057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalCloseEditedFile: \ 26067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_editCleanUp returned 0x%x\n",err); 26077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 26087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 26097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 26107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 26117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 26127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 26137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 26147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 26157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 26167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalGenerateAudioMixFile(M4OSA_Context pContext) 26177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 26187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function prepares VSS for audio mixing 26197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note It takes its parameters from the BGM settings in the xVSS internal context 26207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 26217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 26227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 26237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 26247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC: Allocation error (no more memory) 26257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 26267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 26277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** 26287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * FB: the function has been modified since the structure used for the saving is now the 26297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pCurrentEditSettings and not the pSettings 26307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * This change has been added for the UTF support 26317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * All the "xVSS_context->pSettings" has been replaced by "xVSS_context->pCurrentEditSettings" 26327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ***/ 26337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalGenerateAudioMixFile(M4OSA_Context pContext) 26347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 26357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 26367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_AudioMixingSettings* pAudioMixSettings; 26377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_AudioMixingContext pAudioMixingCtxt; 26387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 26397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIDEOEDITING_ClipProperties fileProperties; 26407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 26417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 26427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Allocate audio mixing settings structure and fill it with BGM parameters */ 2643694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu pAudioMixSettings = (M4VSS3GPP_AudioMixingSettings*)M4OSA_32bitAlignedMalloc 26447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (sizeof(M4VSS3GPP_AudioMixingSettings), M4VS, (M4OSA_Char *)"pAudioMixSettings"); 26457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pAudioMixSettings == M4OSA_NULL) 26467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 26477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Allocation error in M4xVSS_internalGenerateAudioMixFile"); 26487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 26497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 26507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 26517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->FileType == 26527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIDEOEDITING_kFileType_3GPP) 26537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 26547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4xVSS_internalGetProperties((M4OSA_Context)xVSS_context, 26557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->pFile, 26567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi &fileProperties); 26577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 26587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 26597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalGenerateAudioMixFile:\ 26607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi impossible to retrieve audio BGM properties ->\ 26617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi reencoding audio background music", err); 26627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi fileProperties.AudioStreamType = 26637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.outputAudioFormat+1; 26647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* To force BGM encoding */ 26657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 26667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 26677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 26687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->bRemoveOriginal = M4OSA_FALSE; 26697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->AddedAudioFileType = 26707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->FileType; 26717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->pAddedAudioTrackFile = 26727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->pFile; 26737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->uiAddVolume = 26747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->uiAddVolume; 26757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 26767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->outputAudioFormat = xVSS_context->pSettings->xVSS.outputAudioFormat; 26777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->outputASF = xVSS_context->pSettings->xVSS.outputAudioSamplFreq; 26787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->outputAudioBitrate = xVSS_context->pSettings->xVSS.outputAudioBitrate; 26797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->uiSamplingFrequency = 26807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pSettings->xVSS.pBGMtrack->uiSamplingFrequency; 26817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->uiNumChannels = xVSS_context->pSettings->xVSS.pBGMtrack->uiNumChannels; 26827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 26837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->b_DuckingNeedeed = 26847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->b_DuckingNeedeed; 26857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->fBTVolLevel = 26867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Float )xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->uiAddVolume/100; 26877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->InDucking_threshold = 26887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->InDucking_threshold; 26897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->InDucking_lowVolume = 26907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->lowVolume/100; 26917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->fPTVolLevel = 26927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Float)xVSS_context->pSettings->PTVolLevel/100; 26937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->bLoop = xVSS_context->pSettings->xVSS.pBGMtrack->bLoop; 26947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 26957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pSettings->xVSS.bAudioMono) 26967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 26977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->outputNBChannels = 1; 26987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 26997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 27007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 27017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->outputNBChannels = 2; 27027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 27037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 27047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 27057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Fill audio mix settings with BGM parameters */ 27067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->uiBeginLoop = 27077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->uiBeginLoop; 27087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->uiEndLoop = 27097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->uiEndLoop; 27107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->uiAddCts = 27117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->uiAddCts; 27127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 27137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 27147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Output file of the audio mixer will be final file (audio mixing is the last step) */ 27157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->pOutputClipFile = xVSS_context->pOutputFile; 27167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->pTemporaryFile = xVSS_context->pTemporaryFile; 27177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 27187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 27197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Input file of the audio mixer is a temporary file containing all audio/video editions */ 27207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioMixSettings->pOriginalClipFile = xVSS_context->pCurrentEditSettings->pOutputFile; 27217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 27227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 27237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Save audio mixing settings pointer to be able to free it in 27247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_internalCloseAudioMixedFile function */ 27257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pAudioMixSettings = pAudioMixSettings; 27267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 27277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 27287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Create a VSS 3GPP audio mixing instance */ 27297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4VSS3GPP_audioMixingInit(&pAudioMixingCtxt, pAudioMixSettings, 27307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pFileReadPtr, xVSS_context->pFileWritePtr); 27317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 27327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 27337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Save audio mixing context to be able to call audio mixing step function in 27347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_step function */ 27357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pAudioMixContext = pAudioMixingCtxt; 27367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 27377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 27387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 27397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalGenerateAudioMixFile:\ 27407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_audioMixingInit returned 0x%x\n",err); 27417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //M4VSS3GPP_audioMixingCleanUp(pAudioMixingCtxt); 27427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 27437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 27447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 27457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 27467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 27477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 27487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 27497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 27507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalCloseAudioMixedFile(M4OSA_Context pContext) 27517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 27527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function cleans up VSS for audio mixing 27537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 27547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 27557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 27567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 27577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 27587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 27597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 27607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalCloseAudioMixedFile(M4OSA_Context pContext) 27617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 27627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 27637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 27647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 27657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 27667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free this VSS3GPP audio mixing instance */ 27677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pAudioMixContext != M4OSA_NULL) 27687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 27697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4VSS3GPP_audioMixingCleanUp(xVSS_context->pAudioMixContext); 27707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 27717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 27727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalCloseAudioMixedFile:\ 27737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_audioMixingCleanUp returned 0x%x\n",err); 27747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 27757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 27767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 27777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 27787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 27797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free VSS audio mixing settings */ 27807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pAudioMixSettings != M4OSA_NULL) 27817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2782694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pAudioMixSettings); 27837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pAudioMixSettings = M4OSA_NULL; 27847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 27857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 27867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 27877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 27887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 27897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 27907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 27917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalFreePreview(M4OSA_Context pContext) 27927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 27937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function cleans up preview edition structure used to generate 27947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * preview.3gp file given to the VPS 27957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note It also free the preview structure given to the VPS 27967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 27977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 27987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 27997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 28007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 28017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 28027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalFreePreview(M4OSA_Context pContext) 28037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 28047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 28057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 i; 28067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 28077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 28087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free clip/transition settings */ 28097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0; i<xVSS_context->pCurrentEditSettings->uiClipNumber; i++) 28107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 28117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_FreeClipSettings(xVSS_context->pCurrentEditSettings->pClipList[i]); 28127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2813694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((xVSS_context->pCurrentEditSettings->pClipList[i])); 28147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->pClipList[i] = M4OSA_NULL; 28157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 28167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 28177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Because there is 1 less transition than clip number */ 28187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(i != xVSS_context->pCurrentEditSettings->uiClipNumber-1) 28197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2820694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((xVSS_context->pCurrentEditSettings->pTransitionList[i])); 28217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->pTransitionList[i] = M4OSA_NULL; 28227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 28237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 28247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 28257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 28267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free clip/transition list */ 28277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->pClipList != M4OSA_NULL) 28287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2829694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((xVSS_context->pCurrentEditSettings->pClipList)); 28307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->pClipList = M4OSA_NULL; 28317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 28327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->pTransitionList != M4OSA_NULL) 28337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2834694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((xVSS_context->pCurrentEditSettings->pTransitionList)); 28357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->pTransitionList = M4OSA_NULL; 28367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 28377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 28387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 28397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free output preview file path */ 28407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->pOutputFile != M4OSA_NULL) 28417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2842694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pCurrentEditSettings->pOutputFile); 28437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->pOutputFile = M4OSA_NULL; 28447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 28457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 28467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 28477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free temporary preview file path */ 28487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->pTemporaryFile != M4OSA_NULL) 28497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2850947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma remove((const char *)xVSS_context->pCurrentEditSettings->pTemporaryFile); 2851694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pCurrentEditSettings->pTemporaryFile); 28527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->pTemporaryFile = M4OSA_NULL; 28537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 28547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 28557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 28567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free "local" BGM settings */ 28577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack != M4OSA_NULL) 28587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 28597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->pFile != M4OSA_NULL) 28607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2861694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->pFile); 28627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->pFile = M4OSA_NULL; 28637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2864694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack); 28657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack = M4OSA_NULL; 28667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 28677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 28687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 28697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free current edit settings structure */ 28707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings != M4OSA_NULL) 28717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2872694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pCurrentEditSettings); 28737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings = M4OSA_NULL; 28747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 28757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 28767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 28777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free preview effects given to application */ 28787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != xVSS_context->pPreviewSettings->Effects) 28797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2880694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pPreviewSettings->Effects); 28817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pPreviewSettings->Effects = M4OSA_NULL; 28827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pPreviewSettings->nbEffects = 0; 28837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 28847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 28857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 28867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 28877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 28887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 28897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 28907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 28917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalFreeSaving(M4OSA_Context pContext) 28927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 28937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function cleans up saving edition structure used to generate 28947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * output.3gp file given to the VPS 28957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 28967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 28977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 28987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 28997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 29007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 29017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 29027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalFreeSaving(M4OSA_Context pContext) 29037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 29047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 29057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 i; 29067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 29077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings != M4OSA_NULL) 29087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 29097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 29107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free clip/transition settings */ 29117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0; i<xVSS_context->pCurrentEditSettings->uiClipNumber; i++) 29127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 29137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_FreeClipSettings(xVSS_context->pCurrentEditSettings->pClipList[i]); 29147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2915694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((xVSS_context->pCurrentEditSettings->pClipList[i])); 29167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->pClipList[i] = M4OSA_NULL; 29177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 29187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 29197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Because there is 1 less transition than clip number */ 29207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(i != xVSS_context->pCurrentEditSettings->uiClipNumber-1) 29217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2922694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(\ 29237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (xVSS_context->pCurrentEditSettings->pTransitionList[i])); 29247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->pTransitionList[i] = M4OSA_NULL; 29257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 29267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 29277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 29287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 29297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free clip/transition list */ 29307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->pClipList != M4OSA_NULL) 29317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2932694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((xVSS_context->pCurrentEditSettings->pClipList)); 29337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->pClipList = M4OSA_NULL; 29347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 29357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->pTransitionList != M4OSA_NULL) 29367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2937694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((xVSS_context->pCurrentEditSettings->pTransitionList)); 29387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->pTransitionList = M4OSA_NULL; 29397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 29407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 29417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->Effects != M4OSA_NULL) 29427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2943694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((xVSS_context->pCurrentEditSettings->Effects)); 29447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->Effects = M4OSA_NULL; 29457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->nbEffects = 0; 29467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 29477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 29487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 29497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free output saving file path */ 29507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->pOutputFile != M4OSA_NULL) 29517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 29527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack != M4OSA_NULL) 29537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2954947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma remove((const char *)xVSS_context->pCurrentEditSettings->pOutputFile); 2955694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pCurrentEditSettings->pOutputFile); 29567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 29577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pOutputFile != M4OSA_NULL) 29587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2959694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pOutputFile); 29607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pOutputFile = M4OSA_NULL; 29617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 29627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pSettings->pOutputFile = M4OSA_NULL; 29637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->pOutputFile = M4OSA_NULL; 29647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 29657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 29667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 29677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free temporary saving file path */ 29687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->pTemporaryFile != M4OSA_NULL) 29697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2970947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma remove((const char *)xVSS_context->pCurrentEditSettings->pTemporaryFile); 2971694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pCurrentEditSettings->pTemporaryFile); 29727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->pTemporaryFile = M4OSA_NULL; 29737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 29747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 29757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 29767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free "local" BGM settings */ 29777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack != M4OSA_NULL) 29787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 29797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->pFile != M4OSA_NULL) 29807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2981694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->pFile); 29827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack->pFile = M4OSA_NULL; 29837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2984694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack); 29857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings->xVSS.pBGMtrack = M4OSA_NULL; 29867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 29877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 29887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 29897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free current edit settings structure */ 2990694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pCurrentEditSettings); 29917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pCurrentEditSettings = M4OSA_NULL; 29927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 29937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 29947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 29957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 29967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 29977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 29987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 29997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 30007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_freeSettings(M4OSA_Context pContext) 30017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 30027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function cleans up an M4VSS3GPP_EditSettings structure 30037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 30047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pSettings (IN) Pointer on M4VSS3GPP_EditSettings structure to free 30057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 30067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 30077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 30087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 30097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 30107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_freeSettings(M4VSS3GPP_EditSettings* pSettings) 30117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 30127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 i,j; 30137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 30147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 30157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * For each clip ... */ 30167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0; i<pSettings->uiClipNumber; i++) 30177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 30187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 30197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * ... free clip settings */ 30207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->pClipList[i] != M4OSA_NULL) 30217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 30227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_FreeClipSettings(pSettings->pClipList[i]); 30237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3024694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((pSettings->pClipList[i])); 30257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->pClipList[i] = M4OSA_NULL; 30267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 30277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 30287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 30297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * ... free transition settings */ 30307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(i < pSettings->uiClipNumber-1) /* Because there is 1 less transition than clip number */ 30317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 30327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->pTransitionList[i] != M4OSA_NULL) 30337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 30347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (pSettings->pTransitionList[i]->VideoTransitionType) 30357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 30367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4xVSS_kVideoTransitionType_AlphaMagic: 30377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 30387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 30397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * In case of Alpha Magic transition, 30407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi some extra parameters need to be freed */ 30417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->pTransitionList[i]->pExtVideoTransitionFctCtxt\ 30427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi != M4OSA_NULL) 30437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3044694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((((M4xVSS_internal_AlphaMagicSettings*)\ 30457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->pTransitionList[i]->pExtVideoTransitionFctCtxt)->\ 30467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pPlane->pac_data)); 30477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_internal_AlphaMagicSettings*)pSettings->pTransitionList[i\ 30487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ]->pExtVideoTransitionFctCtxt)->pPlane->pac_data = M4OSA_NULL; 30497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3050694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((((M4xVSS_internal_AlphaMagicSettings*)\ 30517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->pTransitionList[i]->\ 30527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pExtVideoTransitionFctCtxt)->pPlane)); 30537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_internal_AlphaMagicSettings*)pSettings->pTransitionList[i]\ 30547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ->pExtVideoTransitionFctCtxt)->pPlane = M4OSA_NULL; 30557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3056694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((pSettings->pTransitionList[i]->\ 30577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pExtVideoTransitionFctCtxt)); 30587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->pTransitionList[i]->pExtVideoTransitionFctCtxt = M4OSA_NULL; 30597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 30607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(j=i+1;j<pSettings->uiClipNumber-1;j++) 30617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 30627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->pTransitionList[j] != M4OSA_NULL) 30637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 30647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->pTransitionList[j]->VideoTransitionType == 30657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_kVideoTransitionType_AlphaMagic) 30667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 30677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 pCmpResult=0; 3068947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma pCmpResult = strcmp((const char *)pSettings->pTransitionList[i]->\ 30697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS.transitionSpecific.pAlphaMagicSettings->\ 30707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAlphaFilePath, 3071947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma (const char *)pSettings->pTransitionList[j]->\ 30727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS.transitionSpecific.pAlphaMagicSettings->\ 3073947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma pAlphaFilePath); 30747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pCmpResult == 0) 30757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 30767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Free extra internal alpha magic structure and put 30777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi it to NULL to avoid refreeing it */ 3078694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((pSettings->\ 30797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pTransitionList[j]->pExtVideoTransitionFctCtxt)); 30807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->pTransitionList[j]->\ 30817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pExtVideoTransitionFctCtxt = M4OSA_NULL; 30827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 30837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 30847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 30857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 30867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 30877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 30887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->pTransitionList[i]->\ 30897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS.transitionSpecific.pAlphaMagicSettings != M4OSA_NULL) 30907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 30917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->pTransitionList[i]->\ 30927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS.transitionSpecific.pAlphaMagicSettings->\ 30937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAlphaFilePath != M4OSA_NULL) 30947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3095694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pSettings->\ 30967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pTransitionList[i]->\ 30977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS.transitionSpecific.pAlphaMagicSettings->\ 30987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAlphaFilePath); 30997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->pTransitionList[i]->\ 31007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS.transitionSpecific.pAlphaMagicSettings->\ 31017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAlphaFilePath = M4OSA_NULL; 31027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3103694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pSettings->pTransitionList[i]->\ 31047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS.transitionSpecific.pAlphaMagicSettings); 31057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->pTransitionList[i]->\ 31067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS.transitionSpecific.pAlphaMagicSettings = M4OSA_NULL; 31077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 31087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 31097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 31107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 31117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 31127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 31137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4xVSS_kVideoTransitionType_SlideTransition: 31147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pSettings->pTransitionList[i]->\ 31157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS.transitionSpecific.pSlideTransitionSettings) 31167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3117694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pSettings->pTransitionList[i]->\ 31187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS.transitionSpecific.pSlideTransitionSettings); 31197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->pTransitionList[i]->\ 31207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS.transitionSpecific.pSlideTransitionSettings = M4OSA_NULL; 31217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 31227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->pTransitionList[i]->pExtVideoTransitionFctCtxt != M4OSA_NULL) 31237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3124694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((pSettings->pTransitionList[i]->\ 31257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pExtVideoTransitionFctCtxt)); 31267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->pTransitionList[i]->pExtVideoTransitionFctCtxt = M4OSA_NULL; 31277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 31287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 31297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 31307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 31317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 31327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 31337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 31347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free transition settings structure */ 3135694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((pSettings->pTransitionList[i])); 31367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->pTransitionList[i] = M4OSA_NULL; 31377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 31387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 31397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 31407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 31417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 31427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free clip list */ 31437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->pClipList != M4OSA_NULL) 31447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3145694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((pSettings->pClipList)); 31467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->pClipList = M4OSA_NULL; 31477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 31487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 31497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 31507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free transition list */ 31517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->pTransitionList != M4OSA_NULL) 31527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3153694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free((pSettings->pTransitionList)); 31547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->pTransitionList = M4OSA_NULL; 31557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 31567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 31577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 31587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * RC: Free effects list */ 31597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->Effects != M4OSA_NULL) 31607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 31617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0; i<pSettings->nbEffects; i++) 31627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 31637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 31647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * For each clip, free framing structure if needed */ 31657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->Effects[i].VideoEffectType == M4xVSS_kVideoEffectType_Framing 31667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi || pSettings->Effects[i].VideoEffectType == M4xVSS_kVideoEffectType_Text) 31677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 31687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef DECODE_GIF_ON_SAVING 31697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_FramingContext* framingCtx = pSettings->Effects[i].pExtVideoEffectFctCtxt; 31707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else 31717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_FramingStruct* framingCtx = pSettings->Effects[i].pExtVideoEffectFctCtxt; 31727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_FramingStruct* framingCtx_save; 31737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Framing3102Struct* framingCtx_first = framingCtx; 31747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif 31757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 31767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef DECODE_GIF_ON_SAVING 31777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx != M4OSA_NULL) /* Bugfix 1.2.0: crash, trying to free non existant 31787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pointer */ 31797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 31807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->aFramingCtx != M4OSA_NULL) 31817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 31827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 31837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->aFramingCtx->FramingRgb != M4OSA_NULL) 31847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3185694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->aFramingCtx->\ 31867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi FramingRgb->pac_data); 31877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->aFramingCtx->FramingRgb->pac_data = M4OSA_NULL; 3188694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->aFramingCtx->FramingRgb); 31897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->aFramingCtx->FramingRgb = M4OSA_NULL; 31907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 31917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 31927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->aFramingCtx->FramingYuv != M4OSA_NULL) 31937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3194694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->aFramingCtx->\ 31957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi FramingYuv[0].pac_data); 31967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->aFramingCtx->FramingYuv[0].pac_data = M4OSA_NULL; 3197694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->aFramingCtx->\ 31987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi FramingYuv[1].pac_data); 31997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->aFramingCtx->FramingYuv[1].pac_data = M4OSA_NULL; 3200694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->aFramingCtx->\ 32017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi FramingYuv[2].pac_data); 32027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->aFramingCtx->FramingYuv[2].pac_data = M4OSA_NULL; 3203694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->aFramingCtx->FramingYuv); 32047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->aFramingCtx->FramingYuv = M4OSA_NULL; 32057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3206694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->aFramingCtx); 32077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->aFramingCtx = M4OSA_NULL; 32087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->aFramingCtx_last != M4OSA_NULL) 32107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 321163754a7bdb7b8ed1071a7c67766ab1f5e381728dBasavapatna Dattaguru if(framingCtx->aFramingCtx_last->FramingRgb != M4OSA_NULL) 32127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3213694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->aFramingCtx_last->\ 321463754a7bdb7b8ed1071a7c67766ab1f5e381728dBasavapatna Dattaguru FramingRgb->pac_data); 321563754a7bdb7b8ed1071a7c67766ab1f5e381728dBasavapatna Dattaguru framingCtx->aFramingCtx_last->FramingRgb->pac_data = M4OSA_NULL; 3216694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->aFramingCtx_last->\ 321763754a7bdb7b8ed1071a7c67766ab1f5e381728dBasavapatna Dattaguru FramingRgb); 321863754a7bdb7b8ed1071a7c67766ab1f5e381728dBasavapatna Dattaguru framingCtx->aFramingCtx_last->FramingRgb = M4OSA_NULL; 32197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->aFramingCtx_last->FramingYuv != M4OSA_NULL) 32217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3222694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->aFramingCtx_last->\ 32237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi FramingYuv[0].pac_data); 32247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->aFramingCtx_last->FramingYuv[0].pac_data = M4OSA_NULL; 3225694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->aFramingCtx_last->FramingYuv); 32267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->aFramingCtx_last->FramingYuv = M4OSA_NULL; 32277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3228694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->aFramingCtx_last); 32297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->aFramingCtx_last = M4OSA_NULL; 32307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->pEffectFilePath != M4OSA_NULL) 32327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3233694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->pEffectFilePath); 32347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->pEffectFilePath = M4OSA_NULL; 32357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*In case there are still allocated*/ 32377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->pSPSContext != M4OSA_NULL) 32387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 32397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // M4SPS_destroy(framingCtx->pSPSContext); 32407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->pSPSContext = M4OSA_NULL; 32417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Alpha blending structure*/ 32437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->alphaBlendingStruct != M4OSA_NULL) 32447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3245694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->alphaBlendingStruct); 32467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->alphaBlendingStruct = M4OSA_NULL; 32477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3249694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx); 32507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx = M4OSA_NULL; 32517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else 32537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi do 32547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 32557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx != M4OSA_NULL) /* Bugfix 1.2.0: crash, trying to free non 32567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi existant pointer */ 32577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 325863754a7bdb7b8ed1071a7c67766ab1f5e381728dBasavapatna Dattaguru if(framingCtx->FramingRgb != M4OSA_NULL) 32597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3260694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingRgb->pac_data); 326163754a7bdb7b8ed1071a7c67766ab1f5e381728dBasavapatna Dattaguru framingCtx->FramingRgb->pac_data = M4OSA_NULL; 3262694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingRgb); 326363754a7bdb7b8ed1071a7c67766ab1f5e381728dBasavapatna Dattaguru framingCtx->FramingRgb = M4OSA_NULL; 32647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(framingCtx->FramingYuv != M4OSA_NULL) 32667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3267694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingYuv[0].pac_data); 32687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv[0].pac_data = M4OSA_NULL; 3269694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx->FramingYuv); 32707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx->FramingYuv = M4OSA_NULL; 32717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx_save = framingCtx->pNext; 3273694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(framingCtx); 32747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx = M4OSA_NULL; 32757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi framingCtx = framingCtx_save; 32767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 32787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 32797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*FB: bug fix P4ME00003002*/ 32807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 32817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } while(framingCtx_first != framingCtx); 32837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif 32847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if( M4xVSS_kVideoEffectType_Fifties == pSettings->Effects[i].VideoEffectType) 32867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 32877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Free Fifties context */ 32887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_FiftiesStruct* FiftiesCtx = pSettings->Effects[i].pExtVideoEffectFctCtxt; 32897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 32907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(FiftiesCtx != M4OSA_NULL) 32917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3292694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(FiftiesCtx); 32937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi FiftiesCtx = M4OSA_NULL; 32947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 32967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 32977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if( M4xVSS_kVideoEffectType_ColorRGB16 == pSettings->Effects[i].VideoEffectType 32987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi || M4xVSS_kVideoEffectType_BlackAndWhite == pSettings->Effects[i].VideoEffectType 32997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi || M4xVSS_kVideoEffectType_Pink == pSettings->Effects[i].VideoEffectType 33007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi || M4xVSS_kVideoEffectType_Green == pSettings->Effects[i].VideoEffectType 33017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi || M4xVSS_kVideoEffectType_Sepia == pSettings->Effects[i].VideoEffectType 33027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi || M4xVSS_kVideoEffectType_Negative== pSettings->Effects[i].VideoEffectType 33037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi || M4xVSS_kVideoEffectType_Gradient== pSettings->Effects[i].VideoEffectType) 33047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 33057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Free Color context */ 33067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_ColorStruct* ColorCtx = pSettings->Effects[i].pExtVideoEffectFctCtxt; 33077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 33087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(ColorCtx != M4OSA_NULL) 33097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3310694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(ColorCtx); 33117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ColorCtx = M4OSA_NULL; 33127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 33137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 33147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 33157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Free simple fields */ 33167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->Effects[i].xVSS.pFramingFilePath != M4OSA_NULL) 33177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3318694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pSettings->Effects[i].xVSS.pFramingFilePath); 33197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->Effects[i].xVSS.pFramingFilePath = M4OSA_NULL; 33207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 33217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->Effects[i].xVSS.pFramingBuffer != M4OSA_NULL) 33227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3323694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pSettings->Effects[i].xVSS.pFramingBuffer); 33247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->Effects[i].xVSS.pFramingBuffer = M4OSA_NULL; 33257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 33267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->Effects[i].xVSS.pTextBuffer != M4OSA_NULL) 33277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3328694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pSettings->Effects[i].xVSS.pTextBuffer); 33297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->Effects[i].xVSS.pTextBuffer = M4OSA_NULL; 33307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 33317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3332694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pSettings->Effects); 33337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pSettings->Effects = M4OSA_NULL; 33347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 33357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 33367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 33377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 33387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 33397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_freeCommand(M4OSA_Context pContext) 33407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 33417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 33427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// M4OSA_UInt8 i,j; 33437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 33447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Free "local" BGM settings */ 33457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pSettings->xVSS.pBGMtrack != M4OSA_NULL) 33467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 33477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pSettings->xVSS.pBGMtrack->pFile != M4OSA_NULL) 33487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3349694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pSettings->xVSS.pBGMtrack->pFile); 33507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pSettings->xVSS.pBGMtrack->pFile = M4OSA_NULL; 33517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3352694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pSettings->xVSS.pBGMtrack); 33537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pSettings->xVSS.pBGMtrack = M4OSA_NULL; 33547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 33557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 33567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_freeSettings(xVSS_context->pSettings); 33577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 33587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pPTo3GPPparamsList != M4OSA_NULL) 33597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 33607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Pto3GPP_params* pParams = xVSS_context->pPTo3GPPparamsList; 33617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Pto3GPP_params* pParams_sauv; 33627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 33637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi while(pParams != M4OSA_NULL) 33647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 33657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pParams->pFileIn != M4OSA_NULL) 33667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3367694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pParams->pFileIn); 33687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pParams->pFileIn = M4OSA_NULL; 33697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 33707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pParams->pFileOut != M4OSA_NULL) 33717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 33727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Delete temporary file */ 3373947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma remove((const char *)pParams->pFileOut); 3374694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pParams->pFileOut); 33757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pParams->pFileOut = M4OSA_NULL; 33767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 33777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pParams->pFileTemp != M4OSA_NULL) 33787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 33797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Delete temporary file */ 33807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4xVSS_RESERVED_MOOV_DISK_SPACE 3381947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma remove((const char *)pParams->pFileTemp); 3382694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pParams->pFileTemp); 33837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif/*M4xVSS_RESERVED_MOOV_DISK_SPACE*/ 33847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pParams->pFileTemp = M4OSA_NULL; 33857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 33867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pParams_sauv = pParams; 33877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pParams = pParams->pNext; 3388694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pParams_sauv); 33897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pParams_sauv = M4OSA_NULL; 33907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 33917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 33927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 33937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pMCSparamsList != M4OSA_NULL) 33947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 33957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_MCS_params* pParams = xVSS_context->pMCSparamsList; 33967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_MCS_params* pParams_sauv; 33977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 33987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi while(pParams != M4OSA_NULL) 33997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 34007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pParams->pFileIn != M4OSA_NULL) 34017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3402694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pParams->pFileIn); 34037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pParams->pFileIn = M4OSA_NULL; 34047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 34057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pParams->pFileOut != M4OSA_NULL) 34067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 34077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Delete temporary file */ 3408947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma remove((const char *)pParams->pFileOut); 3409694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pParams->pFileOut); 34107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pParams->pFileOut = M4OSA_NULL; 34117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 34127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pParams->pFileTemp != M4OSA_NULL) 34137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 34147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Delete temporary file */ 34157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4xVSS_RESERVED_MOOV_DISK_SPACE 3416947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma remove((const char *)pParams->pFileTemp); 3417694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pParams->pFileTemp); 34187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif/*M4xVSS_RESERVED_MOOV_DISK_SPACE*/ 34197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pParams->pFileTemp = M4OSA_NULL; 34207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 34217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pParams_sauv = pParams; 34227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pParams = pParams->pNext; 3423694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pParams_sauv); 34247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pParams_sauv = M4OSA_NULL; 34257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 34267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 34277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 34287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pcmPreviewFile != M4OSA_NULL) 34297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3430694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pcmPreviewFile); 34317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pcmPreviewFile = M4OSA_NULL; 34327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 34337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->pSettings->pOutputFile != M4OSA_NULL 34347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && xVSS_context->pOutputFile != M4OSA_NULL) 34357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3436694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->pSettings->pOutputFile); 34377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pSettings->pOutputFile = M4OSA_NULL; 34387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pOutputFile = M4OSA_NULL; 34397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 34407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 34417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Reinit all context variables */ 34427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->previousClipNumber = 0; 34437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->editingStep = M4xVSS_kMicroStateEditing; 34447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->analyseStep = M4xVSS_kMicroStateAnalysePto3GPP; 34457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pPTo3GPPparamsList = M4OSA_NULL; 34467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pPTo3GPPcurrentParams = M4OSA_NULL; 34477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pMCSparamsList = M4OSA_NULL; 34487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->pMCScurrentParams = M4OSA_NULL; 34497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->tempFileIndex = 0; 34507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->targetedTimescale = 0; 34517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 34527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 34537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 34547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 34557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 34567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 34577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalGetProperties(M4OSA_Context pContext, 34587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_Char* pFile, 34597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIDEOEDITING_ClipProperties *pFileProperties) 34607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 34617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function retrieve properties of an input 3GP file using MCS 34627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 34637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 34647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFile (IN) 3GP file to analyse 34657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFileProperties (IN/OUT) Pointer on a structure that will contain 34667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the 3GP file properties 34677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 34687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 34697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 34707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 34717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 34727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalGetProperties(M4OSA_Context pContext, M4OSA_Char* pFile, 34737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIDEOEDITING_ClipProperties *pFileProperties) 34747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 34757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 34767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 34777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_Context mcs_context; 34787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 34797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MCS_init(&mcs_context, xVSS_context->pFileReadPtr, xVSS_context->pFileWritePtr); 34807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 34817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 34827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalGetProperties: Error in M4MCS_init: 0x%x", err); 34837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 34847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 34857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 34867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*open the MCS in the "normal opening" mode to retrieve the exact duration*/ 34877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MCS_open_normalMode(mcs_context, pFile, M4VIDEOEDITING_kFileType_3GPP, 34887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_NULL, M4OSA_NULL); 34897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 34907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 34917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalGetProperties: Error in M4MCS_open: 0x%x", err); 34927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_abort(mcs_context); 34937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 34947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 34957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 34967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MCS_getInputFileProperties(mcs_context, pFileProperties); 34977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 34987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 34997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("Error in M4MCS_getInputFileProperties: 0x%x", err); 35007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_abort(mcs_context); 35017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 35027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 35037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 35047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MCS_abort(mcs_context); 35057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (err != M4NO_ERROR) 35067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 35077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalGetProperties: Error in M4MCS_abort: 0x%x", err); 35087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 35097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 35107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 35117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 35127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 35137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 35147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 35157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 35167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 35177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalGetTargetedTimeScale(M4OSA_Context pContext, 35187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32* pTargetedTimeScale) 35197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 35207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function retrieve targeted time scale 35217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 35227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 35237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pTargetedTimeScale (OUT) Targeted time scale 35247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 35257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 35267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 35277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 35287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 35297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalGetTargetedTimeScale(M4OSA_Context pContext, 35307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_EditSettings* pSettings, 35317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32* pTargetedTimeScale) 35327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 35337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 35347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 35357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 totalDuration = 0; 35367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 i = 0; 35377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 tempTimeScale = 0, tempDuration = 0; 35387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 35397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0;i<pSettings->uiClipNumber;i++) 35407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 35417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*search timescale only in mpeg4 case*/ 35427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->pClipList[i]->FileType == M4VIDEOEDITING_kFileType_3GPP 3543e1f105895f913b19ad848cc90a3cd57dad657abfDharmaray Kundargi || pSettings->pClipList[i]->FileType == M4VIDEOEDITING_kFileType_MP4 3544e1f105895f913b19ad848cc90a3cd57dad657abfDharmaray Kundargi || pSettings->pClipList[i]->FileType == M4VIDEOEDITING_kFileType_M4V) 35457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 35467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIDEOEDITING_ClipProperties fileProperties; 35477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 35487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*UTF conversion support*/ 35497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Char* pDecodedPath = M4OSA_NULL; 35507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 35517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 35527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * UTF conversion: convert into the customer format, before being used*/ 35537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDecodedPath = pSettings->pClipList[i]->pFile; 35547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 35557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->UTFConversionContext.pConvToUTF8Fct != M4OSA_NULL 35567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && xVSS_context->UTFConversionContext.pTempOutConversionBuffer != M4OSA_NULL) 35577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 35587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 length = 0; 35597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4xVSS_internalConvertFromUTF8(xVSS_context, 35607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Void*) pSettings->pClipList[i]->pFile, 35617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Void*) xVSS_context->UTFConversionContext.pTempOutConversionBuffer, 35627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi &length); 35637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 35647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 35657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_Init:\ 35667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_internalConvertToUTF8 returns err: 0x%x",err); 35677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 35687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 35697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDecodedPath = xVSS_context->UTFConversionContext.pTempOutConversionBuffer; 35707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 35717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 35727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*End of the conversion: use the decoded path*/ 35737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4xVSS_internalGetProperties(xVSS_context, pDecodedPath, &fileProperties); 35747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 35757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*get input file properties*/ 35767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*err = M4xVSS_internalGetProperties(xVSS_context, pSettings->\ 35777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pClipList[i]->pFile, &fileProperties);*/ 35787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4NO_ERROR != err) 35797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 35807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalGetTargetedTimeScale:\ 35817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_internalGetProperties returned: 0x%x", err); 35827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 35837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 35847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(fileProperties.VideoStreamType == M4VIDEOEDITING_kMPEG4) 35857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 35867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->pClipList[i]->uiEndCutTime > 0) 35877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 35887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(tempDuration < (pSettings->pClipList[i]->uiEndCutTime \ 35897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - pSettings->pClipList[i]->uiBeginCutTime)) 35907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 35917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempTimeScale = fileProperties.uiVideoTimeScale; 35927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempDuration = (pSettings->pClipList[i]->uiEndCutTime\ 35937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - pSettings->pClipList[i]->uiBeginCutTime); 35947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 35957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 35967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 35977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 35987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(tempDuration < (fileProperties.uiClipDuration\ 35997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - pSettings->pClipList[i]->uiBeginCutTime)) 36007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 36017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempTimeScale = fileProperties.uiVideoTimeScale; 36027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tempDuration = (fileProperties.uiClipDuration\ 36037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - pSettings->pClipList[i]->uiBeginCutTime); 36047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 36057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 36067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 36077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 36087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pSettings->pClipList[i]->FileType == M4VIDEOEDITING_kFileType_ARGB8888) 36097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 36107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*the timescale is 30 for PTO3GP*/ 36117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pTargetedTimeScale = 30; 36127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 36137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 36147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 36157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 36167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 36177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(tempTimeScale >= 30)/*Define a minimum time scale, otherwise if the timescale is not 36187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi enough, there will be an infinite loop in the shell encoder*/ 36197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 36207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pTargetedTimeScale = tempTimeScale; 36217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 36227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 36237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 36247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pTargetedTimeScale = 30; 36257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 36267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 36277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 36287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 36297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 36307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 36317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 36327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 36337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4VSS3GPP_externalVideoEffectColor(M4OSA_Void *pFunctionContext, 36347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane *PlaneIn, 36357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane *PlaneOut, 36367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VSS3GPP_ExternalProgress *pProgress, 36377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32 uiEffectKind) 36387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 36397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function apply a color effect on an input YUV420 planar frame 36407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 36417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFunctionContext(IN) Contains which color to apply (not very clean ...) 36427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param PlaneIn (IN) Input YUV420 planar 36437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param PlaneOut (IN/OUT) Output YUV420 planar 36447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pProgress (IN/OUT) Progress indication (0-100) 36457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param uiEffectKind (IN) Unused 36467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 36477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4VIFI_OK: No error 36487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 36497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 36507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_externalVideoEffectColor(M4OSA_Void *pFunctionContext, 36517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane *PlaneIn, 36527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane *PlaneOut, 36537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_ExternalProgress *pProgress, 36547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiEffectKind) 36557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 36567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_Int32 plane_number; 36577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt32 i,j; 36587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_buf_src, *p_buf_dest; 36597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_ColorStruct* ColorContext = (M4xVSS_ColorStruct*)pFunctionContext; 36607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 36617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (plane_number = 0; plane_number < 3; plane_number++) 36627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 36637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_buf_src = &(PlaneIn[plane_number].pac_data[PlaneIn[plane_number].u_topleft]); 36647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_buf_dest = &(PlaneOut[plane_number].pac_data[PlaneOut[plane_number].u_topleft]); 36657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < PlaneOut[plane_number].u_height; i++) 36667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 36677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 36687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Chrominance */ 36697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(plane_number==1 || plane_number==2) 36707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 36717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //switch ((M4OSA_UInt32)pFunctionContext) 36727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // commented because a structure for the effects context exist 36737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (ColorContext->colorEffectType) 36747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 36757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4xVSS_kVideoEffectType_BlackAndWhite: 367632ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)p_buf_dest,128, 367732ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu PlaneIn[plane_number].u_width); 36787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 36797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4xVSS_kVideoEffectType_Pink: 368032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)p_buf_dest,255, 368132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu PlaneIn[plane_number].u_width); 36827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 36837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4xVSS_kVideoEffectType_Green: 368432ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)p_buf_dest,0, 368532ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu PlaneIn[plane_number].u_width); 36867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 36877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4xVSS_kVideoEffectType_Sepia: 36887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(plane_number==1) 36897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 369032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)p_buf_dest,117, 369132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu PlaneIn[plane_number].u_width); 36927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 36937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 36947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 369532ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)p_buf_dest,139, 369632ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu PlaneIn[plane_number].u_width); 36977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 36987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 36997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4xVSS_kVideoEffectType_Negative: 370032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)p_buf_dest, 370132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (void *)p_buf_src ,PlaneOut[plane_number].u_width); 37027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 37037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 37047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4xVSS_kVideoEffectType_ColorRGB16: 37057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 37067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt16 r = 0,g = 0,b = 0,y = 0,u = 0,v = 0; 37077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 37087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*first get the r, g, b*/ 37097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi b = (ColorContext->rgb16ColorData & 0x001f); 37107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi g = (ColorContext->rgb16ColorData & 0x07e0)>>5; 37117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi r = (ColorContext->rgb16ColorData & 0xf800)>>11; 37127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 37137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*keep y, but replace u and v*/ 37147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(plane_number==1) 37157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 37167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*then convert to u*/ 37177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi u = U16(r, g, b); 371832ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)p_buf_dest,(M4OSA_UInt8)u, 371932ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu PlaneIn[plane_number].u_width); 37207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 37217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(plane_number==2) 37227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 37237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*then convert to v*/ 37247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi v = V16(r, g, b); 372532ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)p_buf_dest, (M4OSA_UInt8)v, 372632ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu PlaneIn[plane_number].u_width); 37277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 37287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 37297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 37307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4xVSS_kVideoEffectType_Gradient: 37317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 37327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt16 r = 0,g = 0,b = 0,y = 0,u = 0,v = 0; 37337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 37347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*first get the r, g, b*/ 37357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi b = (ColorContext->rgb16ColorData & 0x001f); 37367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi g = (ColorContext->rgb16ColorData & 0x07e0)>>5; 37377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi r = (ColorContext->rgb16ColorData & 0xf800)>>11; 37387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 37397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*for color gradation*/ 37407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi b = (M4OSA_UInt16)( b - ((b*i)/PlaneIn[plane_number].u_height)); 37417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi g = (M4OSA_UInt16)(g - ((g*i)/PlaneIn[plane_number].u_height)); 37427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi r = (M4OSA_UInt16)(r - ((r*i)/PlaneIn[plane_number].u_height)); 37437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 37447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*keep y, but replace u and v*/ 37457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(plane_number==1) 37467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 37477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*then convert to u*/ 37487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi u = U16(r, g, b); 374932ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)p_buf_dest,(M4OSA_UInt8)u, 375032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu PlaneIn[plane_number].u_width); 37517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 37527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(plane_number==2) 37537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 37547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*then convert to v*/ 37557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi v = V16(r, g, b); 375632ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)p_buf_dest,(M4OSA_UInt8)v, 375732ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu PlaneIn[plane_number].u_width); 37587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 37597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 37607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 37617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 37627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 37637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 37647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 37657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 37667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Luminance */ 37677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 37687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 37697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //switch ((M4OSA_UInt32)pFunctionContext) 37707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // commented because a structure for the effects context exist 37717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (ColorContext->colorEffectType) 37727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 37737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4xVSS_kVideoEffectType_Negative: 37747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(j=0;j<PlaneOut[plane_number].u_width;j++) 37757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 37767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_buf_dest[j] = 255 - p_buf_src[j]; 37777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 37787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 37797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 378032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)p_buf_dest, 378132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (void *)p_buf_src ,PlaneOut[plane_number].u_width); 37827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 37837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 37847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 37857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_buf_src += PlaneIn[plane_number].u_stride; 37867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_buf_dest += PlaneOut[plane_number].u_stride; 37877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 37887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 37897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 37907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4VIFI_OK; 37917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 37927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 37937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 37947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 37957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4VSS3GPP_externalVideoEffectFraming(M4OSA_Void *pFunctionContext, 37967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane *PlaneIn, 37977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane *PlaneOut, 37987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VSS3GPP_ExternalProgress *pProgress, 37997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32 uiEffectKind) 38007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 38017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function add a fixed or animated image on an input YUV420 planar frame 38027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 38037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFunctionContext(IN) Contains which color to apply (not very clean ...) 38047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param PlaneIn (IN) Input YUV420 planar 38057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param PlaneOut (IN/OUT) Output YUV420 planar 38067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pProgress (IN/OUT) Progress indication (0-100) 38077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param uiEffectKind (IN) Unused 38087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 38097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4VIFI_OK: No error 38107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 38117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 38127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_externalVideoEffectFraming( M4OSA_Void *userData, 38137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane PlaneIn[3], 38147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane *PlaneOut, 38157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_ExternalProgress *pProgress, 38167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiEffectKind ) 38177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 38187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt32 x,y; 38197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in_Y = PlaneIn[0].pac_data; 38217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in_U = PlaneIn[1].pac_data; 38227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in_V = PlaneIn[2].pac_data; 38237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_FramingStruct* Framing = M4OSA_NULL; 38257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_FramingStruct* currentFraming = M4OSA_NULL; 38267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *FramingRGB = M4OSA_NULL; 38277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_out0; 38297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_out1; 38307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_out2; 38317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt32 topleft[2]; 38337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 transparent1 = (M4OSA_UInt8)((TRANSPARENT_COLOR & 0xFF00)>>8); 38357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 transparent2 = (M4OSA_UInt8)TRANSPARENT_COLOR; 38367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef DECODE_GIF_ON_SAVING 38387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Framing = (M4xVSS_FramingStruct *)userData; 38397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi currentFraming = (M4xVSS_FramingStruct *)Framing->pCurrent; 38407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi FramingRGB = Framing->FramingRgb->pac_data; 38417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*DECODE_GIF_ON_SAVING*/ 38427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*FB*/ 38447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef DECODE_GIF_ON_SAVING 38457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 38467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Framing = (M4xVSS_FramingStruct *)((M4xVSS_FramingContext*)userData)->aFramingCtx; 38477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi currentFraming = (M4xVSS_FramingStruct *)Framing; 38487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi FramingRGB = Framing->FramingRgb->pac_data; 38497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*DECODE_GIF_ON_SAVING*/ 38507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*end FB*/ 38517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 38537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Initialize input / output plane pointers */ 38547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in_Y += PlaneIn[0].u_topleft; 38557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in_U += PlaneIn[1].u_topleft; 38567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in_V += PlaneIn[2].u_topleft; 38577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_out0 = PlaneOut[0].pac_data; 38597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_out1 = PlaneOut[1].pac_data; 38607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_out2 = PlaneOut[2].pac_data; 38617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 38637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Depending on time, initialize Framing frame to use */ 38647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(Framing->previousClipTime == -1) 38657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 38667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Framing->previousClipTime = pProgress->uiOutputTime; 38677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 38687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 38707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * If the current clip time has reach the duration of one frame of the framing picture 38717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * we need to step to next framing picture */ 38727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Framing->previousClipTime = pProgress->uiOutputTime; 38747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi FramingRGB = currentFraming->FramingRgb->pac_data; 38757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi topleft[0] = currentFraming->topleft_x; 38767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi topleft[1] = currentFraming->topleft_y; 38777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for( x=0 ;x < PlaneIn[0].u_height ; x++) 38797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 38807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for( y=0 ;y < PlaneIn[0].u_width ; y++) 38817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 38827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 38837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * To handle framing with input size != output size 38847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Framing is applyed if coordinates matches between framing/topleft and input plane */ 38857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( y < (topleft[0] + currentFraming->FramingYuv[0].u_width) && 38867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi y >= topleft[0] && 38877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi x < (topleft[1] + currentFraming->FramingYuv[0].u_height) && 38887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi x >= topleft[1]) 38897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 38907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Alpha blending support*/ 38917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Float alphaBlending = 1; 38927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_internalEffectsAlphaBlending* alphaBlendingStruct =\ 38937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4xVSS_internalEffectsAlphaBlending*)\ 38947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4xVSS_FramingContext*)userData)->alphaBlendingStruct; 38957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 38967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(alphaBlendingStruct != M4OSA_NULL) 38977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3898d67e9da63323d965760337913f86de28024531a4Basavapatna Dattaguru if(pProgress->uiProgress \ 38997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi < (M4OSA_UInt32)(alphaBlendingStruct->m_fadeInTime*10)) 39007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3901f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes if(alphaBlendingStruct->m_fadeInTime == 0) { 3902f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes alphaBlending = alphaBlendingStruct->m_start / 100; 3903f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes } else { 3904f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes alphaBlending = ((M4OSA_Float)(alphaBlendingStruct->m_middle\ 3905f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes - alphaBlendingStruct->m_start)\ 3906f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes *pProgress->uiProgress/(alphaBlendingStruct->m_fadeInTime*10)); 3907f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes alphaBlending += alphaBlendingStruct->m_start; 3908f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes alphaBlending /= 100; 3909f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes } 39107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 39117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(pProgress->uiProgress >= (M4OSA_UInt32)(alphaBlendingStruct->\ 39127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi m_fadeInTime*10) && pProgress->uiProgress < 1000\ 39137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - (M4OSA_UInt32)(alphaBlendingStruct->m_fadeOutTime*10)) 39147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 39157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi alphaBlending = (M4OSA_Float)\ 39167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4OSA_Float)alphaBlendingStruct->m_middle/100); 39177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 39187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(pProgress->uiProgress >= 1000 - (M4OSA_UInt32)\ 39197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (alphaBlendingStruct->m_fadeOutTime*10)) 39207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3921f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes if(alphaBlendingStruct->m_fadeOutTime == 0) { 3922f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes alphaBlending = alphaBlendingStruct->m_end / 100; 3923f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes } else { 3924f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes alphaBlending = ((M4OSA_Float)(alphaBlendingStruct->m_middle \ 3925f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes - alphaBlendingStruct->m_end))*(1000 - pProgress->uiProgress)\ 3926f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes /(alphaBlendingStruct->m_fadeOutTime*10); 3927f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes alphaBlending += alphaBlendingStruct->m_end; 3928f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes alphaBlending /= 100; 3929f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes } 39307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 39317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 39327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**/ 39337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 39347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((*(FramingRGB)==transparent1) && (*(FramingRGB+1)==transparent2)) 39357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 39367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out0+y+x*PlaneOut[0].u_stride)=(*(p_in_Y+y+x*PlaneIn[0].u_stride)); 39377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out1+(y>>1)+(x>>1)*PlaneOut[1].u_stride)= 39387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*(p_in_U+(y>>1)+(x>>1)*PlaneIn[1].u_stride)); 39397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out2+(y>>1)+(x>>1)*PlaneOut[2].u_stride)= 39407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*(p_in_V+(y>>1)+(x>>1)*PlaneIn[2].u_stride)); 39417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 39427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 39437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 39447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out0+y+x*PlaneOut[0].u_stride)= 39457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*(currentFraming->FramingYuv[0].pac_data+(y-topleft[0])\ 39467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi +(x-topleft[1])*currentFraming->FramingYuv[0].u_stride))*alphaBlending; 39477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out0+y+x*PlaneOut[0].u_stride)+= 39487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*(p_in_Y+y+x*PlaneIn[0].u_stride))*(1-alphaBlending); 39497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out1+(y>>1)+(x>>1)*PlaneOut[1].u_stride)= 39507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*(currentFraming->FramingYuv[1].pac_data+((y-topleft[0])>>1)\ 39517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi +((x-topleft[1])>>1)*currentFraming->FramingYuv[1].u_stride))\ 39527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *alphaBlending; 39537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out1+(y>>1)+(x>>1)*PlaneOut[1].u_stride)+= 39547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*(p_in_U+(y>>1)+(x>>1)*PlaneIn[1].u_stride))*(1-alphaBlending); 39557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out2+(y>>1)+(x>>1)*PlaneOut[2].u_stride)= 39567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*(currentFraming->FramingYuv[2].pac_data+((y-topleft[0])>>1)\ 39577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi +((x-topleft[1])>>1)*currentFraming->FramingYuv[2].u_stride))\ 39587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *alphaBlending; 39597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out2+(y>>1)+(x>>1)*PlaneOut[2].u_stride)+= 39607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*(p_in_V+(y>>1)+(x>>1)*PlaneIn[2].u_stride))*(1-alphaBlending); 39617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 39627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( PlaneIn[0].u_width < (topleft[0] + currentFraming->FramingYuv[0].u_width) && 39637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi y == PlaneIn[0].u_width-1) 39647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 39657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi FramingRGB = FramingRGB + 2 \ 39667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * (topleft[0] + currentFraming->FramingYuv[0].u_width \ 39677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi - PlaneIn[0].u_width + 1); 39687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 39697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 39707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 39717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi FramingRGB = FramingRGB + 2; 39727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 39737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 39747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 39757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Just copy input plane to output plane */ 39767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 39777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 39787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out0+y+x*PlaneOut[0].u_stride)=*(p_in_Y+y+x*PlaneIn[0].u_stride); 39797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out1+(y>>1)+(x>>1)*PlaneOut[1].u_stride)= 39807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *(p_in_U+(y>>1)+(x>>1)*PlaneIn[1].u_stride); 39817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out2+(y>>1)+(x>>1)*PlaneOut[2].u_stride)= 39827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *(p_in_V+(y>>1)+(x>>1)*PlaneIn[2].u_stride); 39837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 39847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 39857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 39867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 39877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 39887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4VIFI_OK; 39897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 39907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 39917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 39927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 39937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 39947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4VSS3GPP_externalVideoEffectFifties(M4OSA_Void *pFunctionContext, 39957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane *PlaneIn, 39967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane *PlaneOut, 39977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VSS3GPP_ExternalProgress *pProgress, 39987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32 uiEffectKind) 39997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 40007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function make a video look as if it was taken in the fifties 40017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 40027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pUserData (IN) Context 40037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pPlaneIn (IN) Input YUV420 planar 40047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pPlaneOut (IN/OUT) Output YUV420 planar 40057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pProgress (IN/OUT) Progress indication (0-100) 40067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param uiEffectKind (IN) Unused 40077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 40087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4VIFI_OK: No error 40097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: pFiftiesData, pPlaneOut or pProgress are NULL (DEBUG only) 40107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 40117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 40127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_externalVideoEffectFifties( M4OSA_Void *pUserData, 40137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane *pPlaneIn, 40147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane *pPlaneOut, 40157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_ExternalProgress *pProgress, 40167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiEffectKind ) 40177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 40187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt32 x, y, xShift; 40197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *pInY = pPlaneIn[0].pac_data; 40207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *pOutY, *pInYbegin; 40217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *pInCr,* pOutCr; 40227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_Int32 plane_number; 40237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 40247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Internal context*/ 40257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_FiftiesStruct* p_FiftiesData = (M4xVSS_FiftiesStruct *)pUserData; 40267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 40277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Check the inputs (debug only) */ 40287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((pFiftiesData == M4OSA_NULL),M4ERR_PARAMETER, 40297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "xVSS: p_FiftiesData is M4OSA_NULL in M4VSS3GPP_externalVideoEffectFifties"); 40307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((pPlaneOut == M4OSA_NULL),M4ERR_PARAMETER, 40317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "xVSS: p_PlaneOut is M4OSA_NULL in M4VSS3GPP_externalVideoEffectFifties"); 40327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((pProgress == M4OSA_NULL),M4ERR_PARAMETER, 40337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "xVSS: p_Progress is M4OSA_NULL in M4VSS3GPP_externalVideoEffectFifties"); 40347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 40357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Initialize input / output plane pointers */ 40367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pInY += pPlaneIn[0].u_topleft; 40377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pOutY = pPlaneOut[0].pac_data; 40387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pInYbegin = pInY; 40397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 40407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Initialize the random */ 40417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(p_FiftiesData->previousClipTime < 0) 40427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 40437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_randInit(); 40447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_rand((M4OSA_Int32 *)&(p_FiftiesData->shiftRandomValue), (pPlaneIn[0].u_height) >> 4); 40457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_rand((M4OSA_Int32 *)&(p_FiftiesData->stripeRandomValue), (pPlaneIn[0].u_width)<< 2); 40467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_FiftiesData->previousClipTime = pProgress->uiOutputTime; 40477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 40487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 40497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Choose random values if we have reached the duration of a partial effect */ 40507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if( (pProgress->uiOutputTime - p_FiftiesData->previousClipTime)\ 40517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi > p_FiftiesData->fiftiesEffectDuration) 40527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 40537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_rand((M4OSA_Int32 *)&(p_FiftiesData->shiftRandomValue), (pPlaneIn[0].u_height) >> 4); 40547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_rand((M4OSA_Int32 *)&(p_FiftiesData->stripeRandomValue), (pPlaneIn[0].u_width)<< 2); 40557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_FiftiesData->previousClipTime = pProgress->uiOutputTime; 40567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 40577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 40587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Put in Sepia the chrominance */ 40597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (plane_number = 1; plane_number < 3; plane_number++) 40607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 40617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pInCr = pPlaneIn[plane_number].pac_data + pPlaneIn[plane_number].u_topleft; 40627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pOutCr = pPlaneOut[plane_number].pac_data + pPlaneOut[plane_number].u_topleft; 40637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 40647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (x = 0; x < pPlaneOut[plane_number].u_height; x++) 40657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 40667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (1 == plane_number) 406732ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pOutCr, 117,pPlaneIn[plane_number].u_width); /* U value */ 40687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 406932ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pOutCr, 139,pPlaneIn[plane_number].u_width); /* V value */ 40707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 40717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pInCr += pPlaneIn[plane_number].u_stride; 40727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pOutCr += pPlaneOut[plane_number].u_stride; 40737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 40747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 40757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 40767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Compute the new pixels values */ 40777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for( x = 0 ; x < pPlaneIn[0].u_height ; x++) 40787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 40797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_outYtmp, *p_inYtmp; 40807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 40817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Compute the xShift (random value) */ 40827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (0 == (p_FiftiesData->shiftRandomValue % 5 )) 40837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xShift = (x + p_FiftiesData->shiftRandomValue ) % (pPlaneIn[0].u_height - 1); 40847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 40857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xShift = (x + (pPlaneIn[0].u_height - p_FiftiesData->shiftRandomValue) ) \ 40867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi % (pPlaneIn[0].u_height - 1); 40877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 40887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Initialize the pointers */ 40897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_outYtmp = pOutY + 1; /* yShift of 1 pixel */ 40907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_inYtmp = pInYbegin + (xShift * pPlaneIn[0].u_stride); /* Apply the xShift */ 40917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 40927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for( y = 0 ; y < pPlaneIn[0].u_width ; y++) 40937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 40947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Set Y value */ 40957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (xShift > (pPlaneIn[0].u_height - 4)) 40967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *p_outYtmp = 40; /* Add some horizontal black lines between the 40977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi two parts of the image */ 40987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if ( y == p_FiftiesData->stripeRandomValue) 40997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *p_outYtmp = 90; /* Add a random vertical line for the bulk */ 41007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 41017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *p_outYtmp = *p_inYtmp; 41027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Go to the next pixel */ 41057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_outYtmp++; 41067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_inYtmp++; 41077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Restart at the beginning of the line for the last pixel*/ 41097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (y == (pPlaneIn[0].u_width - 2)) 41107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_outYtmp = pOutY; 41117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 41127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Go to the next line */ 41147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pOutY += pPlaneOut[0].u_stride; 41157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 41167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4VIFI_OK; 41187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 41197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 41217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 41227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_externalVideoEffectZoom( ) 41237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Zoom in/out video effect functions. 41247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note The external video function is used only if VideoEffectType is set to 41257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VSS3GPP_kVideoEffectType_ZoomIn or M4VSS3GPP_kVideoEffectType_ZoomOut. 41267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 41277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFunctionContext (IN) The function context, previously set by the integrator 41287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pInputPlanes (IN) Input YUV420 image: pointer to an array of three valid 41297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * image planes (Y, U and V) 41307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pOutputPlanes (IN/OUT) Output (filtered) YUV420 image: pointer to an array of 41317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * three valid image planes (Y, U and V) 41327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pProgress (IN) Set of information about the video transition progress. 41337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 41347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) 41357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 41367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 41377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_externalVideoEffectZoom( 41397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Void *pFunctionContext, 41407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane *pInputPlanes, 41417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane *pOutputPlanes, 41427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_ExternalProgress *pProgress, 41437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiEffectKind 41447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi) 41457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 41467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 boxWidth; 41477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 boxHeight; 41487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 boxPosX; 41497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 boxPosY; 41507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 ratio = 0; 41517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* * 1.189207 between ratio */ 41527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* zoom between x1 and x16 */ 41537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 ratiotab[17] ={1024,1218,1448,1722,2048,2435,2896,3444,4096,4871,5793,\ 41547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6889,8192,9742,11585,13777,16384}; 41557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 ik; 41567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane boxPlane[3]; 41587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4xVSS_kVideoEffectType_ZoomOut == (M4OSA_UInt32)pFunctionContext) 41607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 41617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //ratio = 16 - (15 * pProgress->uiProgress)/1000; 41627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ratio = 16 - pProgress->uiProgress / 66 ; 41637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 41647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(M4xVSS_kVideoEffectType_ZoomIn == (M4OSA_UInt32)pFunctionContext) 41657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 41667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //ratio = 1 + (15 * pProgress->uiProgress)/1000; 41677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ratio = 1 + pProgress->uiProgress / 66 ; 41687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 41697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(ik=0;ik<3;ik++){ 41717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi boxPlane[ik].u_stride = pInputPlanes[ik].u_stride; 41737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi boxPlane[ik].pac_data = pInputPlanes[ik].pac_data; 41747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi boxHeight = ( pInputPlanes[ik].u_height << 10 ) / ratiotab[ratio]; 41767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi boxWidth = ( pInputPlanes[ik].u_width << 10 ) / ratiotab[ratio]; 41777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi boxPlane[ik].u_height = (boxHeight)&(~1); 41787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi boxPlane[ik].u_width = (boxWidth)&(~1); 41797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi boxPosY = (pInputPlanes[ik].u_height >> 1) - (boxPlane[ik].u_height >> 1); 41817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi boxPosX = (pInputPlanes[ik].u_width >> 1) - (boxPlane[ik].u_width >> 1); 41827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi boxPlane[ik].u_topleft = boxPosY * boxPlane[ik].u_stride + boxPosX; 41837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 41847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ResizeBilinearYUV420toYUV420(M4OSA_NULL, (M4VIFI_ImagePlane*)&boxPlane, pOutputPlanes); 41867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 41887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Return */ 41897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return(M4NO_ERROR); 41907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 41917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 41927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 41937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 41947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4xVSS_AlphaMagic( M4OSA_Void *userData, 41957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane PlaneIn1[3], 41967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane PlaneIn2[3], 41977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane *PlaneOut, 41987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VSS3GPP_ExternalProgress *pProgress, 41997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32 uiTransitionKind) 42007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 42017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function apply a color effect on an input YUV420 planar frame 42027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 42037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param userData (IN) Contains a pointer on a settings structure 42047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param PlaneIn1 (IN) Input YUV420 planar from video 1 42057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param PlaneIn2 (IN) Input YUV420 planar from video 2 42067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param PlaneOut (IN/OUT) Output YUV420 planar 42077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pProgress (IN/OUT) Progress indication (0-100) 42087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param uiTransitionKind(IN) Unused 42097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 42107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4VIFI_OK: No error 42117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 42127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 42137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_AlphaMagic( M4OSA_Void *userData, M4VIFI_ImagePlane PlaneIn1[3], 42147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane PlaneIn2[3], M4VIFI_ImagePlane *PlaneOut, 42157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_ExternalProgress *pProgress, M4OSA_UInt32 uiTransitionKind) 42167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 42177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 42187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 42197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 42207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_internal_AlphaMagicSettings* alphaContext; 42217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_Int32 alphaProgressLevel; 42227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 42237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane* planeswap; 42247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt32 x,y; 42257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 42267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_out0; 42277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_out1; 42287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_out2; 42297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *alphaMask; 42307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* "Old image" */ 42317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in1_Y; 42327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in1_U; 42337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in1_V; 42347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* "New image" */ 42357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in2_Y; 42367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in2_U; 42377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in2_V; 42387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 42397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4NO_ERROR; 42407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 42417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi alphaContext = (M4xVSS_internal_AlphaMagicSettings*)userData; 42427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4243738a66268a5d4ad948714dc095711cb4a21997f3Rajneesh Chowdury alphaProgressLevel = (pProgress->uiProgress * 128)/1000; 42447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 42457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( alphaContext->isreverse != M4OSA_FALSE) 42467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4247738a66268a5d4ad948714dc095711cb4a21997f3Rajneesh Chowdury alphaProgressLevel = 128 - alphaProgressLevel; 42487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi planeswap = PlaneIn1; 42497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi PlaneIn1 = PlaneIn2; 42507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi PlaneIn2 = planeswap; 42517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 42527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 42537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_out0 = PlaneOut[0].pac_data; 42547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_out1 = PlaneOut[1].pac_data; 42557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_out2 = PlaneOut[2].pac_data; 42567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 42577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi alphaMask = alphaContext->pPlane->pac_data; 42587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 42597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* "Old image" */ 42607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in1_Y = PlaneIn1[0].pac_data; 42617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in1_U = PlaneIn1[1].pac_data; 42627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in1_V = PlaneIn1[2].pac_data; 42637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* "New image" */ 42647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in2_Y = PlaneIn2[0].pac_data; 42657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in2_U = PlaneIn2[1].pac_data; 42667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in2_V = PlaneIn2[2].pac_data; 42677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 42687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 42697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * For each column ... */ 42707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for( y=0; y<PlaneOut->u_height; y++ ) 42717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 42727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 42737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * ... and each row of the alpha mask */ 42747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for( x=0; x<PlaneOut->u_width; x++ ) 42757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 42767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 42777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * If the value of the current pixel of the alpha mask is > to the current time 42787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * ( current time is normalized on [0-255] ) */ 42797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( alphaProgressLevel < alphaMask[x+y*PlaneOut->u_width] ) 42807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 42817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* We keep "old image" in output plane */ 42827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out0+x+y*PlaneOut[0].u_stride)=*(p_in1_Y+x+y*PlaneIn1[0].u_stride); 42837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out1+(x>>1)+(y>>1)*PlaneOut[1].u_stride)= 42847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *(p_in1_U+(x>>1)+(y>>1)*PlaneIn1[1].u_stride); 42857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out2+(x>>1)+(y>>1)*PlaneOut[2].u_stride)= 42867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *(p_in1_V+(x>>1)+(y>>1)*PlaneIn1[2].u_stride); 42877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 42887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 42897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 42907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* We take "new image" in output plane */ 42917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out0+x+y*PlaneOut[0].u_stride)=*(p_in2_Y+x+y*PlaneIn2[0].u_stride); 42927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out1+(x>>1)+(y>>1)*PlaneOut[1].u_stride)= 42937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *(p_in2_U+(x>>1)+(y>>1)*PlaneIn2[1].u_stride); 42947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out2+(x>>1)+(y>>1)*PlaneOut[2].u_stride)= 42957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *(p_in2_V+(x>>1)+(y>>1)*PlaneIn2[2].u_stride); 42967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 42977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 42987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 42997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return(err); 43017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 43027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 43047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 43057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4xVSS_AlphaMagicBlending( M4OSA_Void *userData, 43067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane PlaneIn1[3], 43077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane PlaneIn2[3], 43087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane *PlaneOut, 43097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VSS3GPP_ExternalProgress *pProgress, 43107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32 uiTransitionKind) 43117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 43127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function apply a color effect on an input YUV420 planar frame 43137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 43147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param userData (IN) Contains a pointer on a settings structure 43157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param PlaneIn1 (IN) Input YUV420 planar from video 1 43167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param PlaneIn2 (IN) Input YUV420 planar from video 2 43177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param PlaneOut (IN/OUT) Output YUV420 planar 43187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pProgress (IN/OUT) Progress indication (0-100) 43197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param uiTransitionKind(IN) Unused 43207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 43217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4VIFI_OK: No error 43227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 43237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 43247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_AlphaMagicBlending( M4OSA_Void *userData, M4VIFI_ImagePlane PlaneIn1[3], 43257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane PlaneIn2[3], M4VIFI_ImagePlane *PlaneOut, 43267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_ExternalProgress *pProgress, 43277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiTransitionKind) 43287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 43297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 43307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_internal_AlphaMagicSettings* alphaContext; 43327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_Int32 alphaProgressLevel; 43337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_Int32 alphaBlendLevelMin; 43347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_Int32 alphaBlendLevelMax; 43357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_Int32 alphaBlendRange; 43367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane* planeswap; 43387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt32 x,y; 43397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_Int32 alphaMaskValue; 43407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_out0; 43427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_out1; 43437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_out2; 43447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *alphaMask; 43457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* "Old image" */ 43467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in1_Y; 43477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in1_U; 43487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in1_V; 43497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* "New image" */ 43507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in2_Y; 43517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in2_U; 43527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_UInt8 *p_in2_V; 43537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4NO_ERROR; 43567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi alphaContext = (M4xVSS_internal_AlphaMagicSettings*)userData; 43587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4359738a66268a5d4ad948714dc095711cb4a21997f3Rajneesh Chowdury alphaProgressLevel = (pProgress->uiProgress * 128)/1000; 43607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( alphaContext->isreverse != M4OSA_FALSE) 43627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4363738a66268a5d4ad948714dc095711cb4a21997f3Rajneesh Chowdury alphaProgressLevel = 128 - alphaProgressLevel; 43647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi planeswap = PlaneIn1; 43657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi PlaneIn1 = PlaneIn2; 43667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi PlaneIn2 = planeswap; 43677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 43687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi alphaBlendLevelMin = alphaProgressLevel-alphaContext->blendingthreshold; 43707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi alphaBlendLevelMax = alphaProgressLevel+alphaContext->blendingthreshold; 43727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi alphaBlendRange = (alphaContext->blendingthreshold)*2; 43747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_out0 = PlaneOut[0].pac_data; 43767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_out1 = PlaneOut[1].pac_data; 43777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_out2 = PlaneOut[2].pac_data; 43787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi alphaMask = alphaContext->pPlane->pac_data; 43807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* "Old image" */ 43827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in1_Y = PlaneIn1[0].pac_data; 43837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in1_U = PlaneIn1[1].pac_data; 43847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in1_V = PlaneIn1[2].pac_data; 43857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* "New image" */ 43867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in2_Y = PlaneIn2[0].pac_data; 43877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in2_U = PlaneIn2[1].pac_data; 43887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p_in2_V = PlaneIn2[2].pac_data; 43897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 43907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* apply Alpha Magic on each pixel */ 43917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for( y=0; y<PlaneOut->u_height; y++ ) 43927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 43937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for( x=0; x<PlaneOut->u_width; x++ ) 43947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 43957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi alphaMaskValue = alphaMask[x+y*PlaneOut->u_width]; 43967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( alphaBlendLevelMax < alphaMaskValue ) 43977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 43987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* We keep "old image" in output plane */ 43997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out0+x+y*PlaneOut[0].u_stride)=*(p_in1_Y+x+y*PlaneIn1[0].u_stride); 44007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out1+(x>>1)+(y>>1)*PlaneOut[1].u_stride)= 44017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *(p_in1_U+(x>>1)+(y>>1)*PlaneIn1[1].u_stride); 44027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out2+(x>>1)+(y>>1)*PlaneOut[2].u_stride)= 44037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *(p_in1_V+(x>>1)+(y>>1)*PlaneIn1[2].u_stride); 44047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 44057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if( (alphaBlendLevelMin < alphaMaskValue)&& 44067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (alphaMaskValue <= alphaBlendLevelMax ) ) 44077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 44087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* We blend "old and new image" in output plane */ 44097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out0+x+y*PlaneOut[0].u_stride)=(M4VIFI_UInt8) 44107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (( (alphaMaskValue-alphaBlendLevelMin)*( *(p_in1_Y+x+y*PlaneIn1[0].u_stride)) 44117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi +(alphaBlendLevelMax-alphaMaskValue)\ 44127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( *(p_in2_Y+x+y*PlaneIn2[0].u_stride)) )/alphaBlendRange ); 44137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out1+(x>>1)+(y>>1)*PlaneOut[1].u_stride)=(M4VIFI_UInt8)\ 44157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (( (alphaMaskValue-alphaBlendLevelMin)*( *(p_in1_U+(x>>1)+(y>>1)\ 44167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *PlaneIn1[1].u_stride)) 44177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi +(alphaBlendLevelMax-alphaMaskValue)*( *(p_in2_U+(x>>1)+(y>>1)\ 44187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *PlaneIn2[1].u_stride)) )/alphaBlendRange ); 44197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out2+(x>>1)+(y>>1)*PlaneOut[2].u_stride)= 44217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIFI_UInt8)(( (alphaMaskValue-alphaBlendLevelMin)\ 44227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( *(p_in1_V+(x>>1)+(y>>1)*PlaneIn1[2].u_stride)) 44237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi +(alphaBlendLevelMax-alphaMaskValue)*( *(p_in2_V+(x>>1)+(y>>1)\ 44247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *PlaneIn2[2].u_stride)) )/alphaBlendRange ); 44257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 44277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 44287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 44297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* We take "new image" in output plane */ 44307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out0+x+y*PlaneOut[0].u_stride)=*(p_in2_Y+x+y*PlaneIn2[0].u_stride); 44317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out1+(x>>1)+(y>>1)*PlaneOut[1].u_stride)= 44327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *(p_in2_U+(x>>1)+(y>>1)*PlaneIn2[1].u_stride); 44337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *( p_out2+(x>>1)+(y>>1)*PlaneOut[2].u_stride)= 44347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *(p_in2_V+(x>>1)+(y>>1)*PlaneIn2[2].u_stride); 44357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 44367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 44377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 44387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return(err); 44407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 44417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4XXX_SampleAddress(plane, x, y) ( (plane).pac_data + (plane).u_topleft + (y)\ 44437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * (plane).u_stride + (x) ) 44447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic void M4XXX_CopyPlane(M4VIFI_ImagePlane* dest, M4VIFI_ImagePlane* source) 44467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 44477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 height, width, sourceStride, destStride, y; 44487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_MemAddr8 sourceWalk, destWalk; 44497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* cache the vars used in the loop so as to avoid them being repeatedly fetched and 44517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi recomputed from memory. */ 44527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height = dest->u_height; 44537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width = dest->u_width; 44547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sourceWalk = (M4OSA_MemAddr8)M4XXX_SampleAddress(*source, 0, 0); 44567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sourceStride = source->u_stride; 44577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi destWalk = (M4OSA_MemAddr8)M4XXX_SampleAddress(*dest, 0, 0); 44597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi destStride = dest->u_stride; 44607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (y=0; y<height; y++) 44627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 446332ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)destWalk, (void *)sourceWalk, width); 44647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi destWalk += destStride; 44657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sourceWalk += sourceStride; 44667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 44677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 44687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4xVSS_VerticalSlideTransition(M4VIFI_ImagePlane* topPlane, 44707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane* bottomPlane, 44717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane *PlaneOut, 44727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 shiftUV) 44737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 44747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i; 44757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Do three loops, one for each plane type, in order to avoid having too many buffers 44777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "hot" at the same time (better for cache). */ 44787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i=0; i<3; i++) 44797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 44807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 topPartHeight, bottomPartHeight, width, sourceStride, destStride, y; 44817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_MemAddr8 sourceWalk, destWalk; 44827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* cache the vars used in the loop so as to avoid them being repeatedly fetched and 44847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi recomputed from memory. */ 44857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (0 == i) /* Y plane */ 44867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 44877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi bottomPartHeight = 2*shiftUV; 44887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 44897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else /* U and V planes */ 44907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 44917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi bottomPartHeight = shiftUV; 44927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 44937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi topPartHeight = PlaneOut[i].u_height - bottomPartHeight; 44947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi width = PlaneOut[i].u_width; 44957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sourceWalk = (M4OSA_MemAddr8)M4XXX_SampleAddress(topPlane[i], 0, bottomPartHeight); 44977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sourceStride = topPlane[i].u_stride; 44987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 44997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi destWalk = (M4OSA_MemAddr8)M4XXX_SampleAddress(PlaneOut[i], 0, 0); 45007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi destStride = PlaneOut[i].u_stride; 45017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* First the part from the top source clip frame. */ 45037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (y=0; y<topPartHeight; y++) 45047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 450532ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)destWalk, (void *)sourceWalk, width); 45067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi destWalk += destStride; 45077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sourceWalk += sourceStride; 45087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 45097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* and now change the vars to copy the part from the bottom source clip frame. */ 45117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sourceWalk = (M4OSA_MemAddr8)M4XXX_SampleAddress(bottomPlane[i], 0, 0); 45127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sourceStride = bottomPlane[i].u_stride; 45137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* destWalk is already at M4XXX_SampleAddress(PlaneOut[i], 0, topPartHeight) */ 45157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (y=0; y<bottomPartHeight; y++) 45177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 451832ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)destWalk, (void *)sourceWalk, width); 45197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi destWalk += destStride; 45207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sourceWalk += sourceStride; 45217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 45227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 45237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 45247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 45257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4xVSS_HorizontalSlideTransition(M4VIFI_ImagePlane* leftPlane, 45277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane* rightPlane, 45287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane *PlaneOut, 45297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 shiftUV) 45307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 45317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i, y; 45327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* If we shifted by exactly 0, or by the width of the target image, then we would get the left 45337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi frame or the right frame, respectively. These cases aren't handled too well by the general 45347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi handling, since they result in 0-size memcopies, so might as well particularize them. */ 45357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (0 == shiftUV) /* output left frame */ 45377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 45387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i<3; i++) /* for each YUV plane */ 45397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 45407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4XXX_CopyPlane(&(PlaneOut[i]), &(leftPlane[i])); 45417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 45427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 45447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 45457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (PlaneOut[1].u_width == shiftUV) /* output right frame */ 45477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 45487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i<3; i++) /* for each YUV plane */ 45497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 45507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4XXX_CopyPlane(&(PlaneOut[i]), &(rightPlane[i])); 45517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 45527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 45547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 45557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Do three loops, one for each plane type, in order to avoid having too many buffers 45587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "hot" at the same time (better for cache). */ 45597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i=0; i<3; i++) 45607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 45617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 height, leftPartWidth, rightPartWidth; 45627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 leftStride, rightStride, destStride; 45637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_MemAddr8 leftWalk, rightWalk, destWalkLeft, destWalkRight; 45647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* cache the vars used in the loop so as to avoid them being repeatedly fetched 45667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi and recomputed from memory. */ 45677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi height = PlaneOut[i].u_height; 45687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (0 == i) /* Y plane */ 45707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 45717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rightPartWidth = 2*shiftUV; 45727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 45737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else /* U and V planes */ 45747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 45757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rightPartWidth = shiftUV; 45767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 45777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi leftPartWidth = PlaneOut[i].u_width - rightPartWidth; 45787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi leftWalk = (M4OSA_MemAddr8)M4XXX_SampleAddress(leftPlane[i], rightPartWidth, 0); 45807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi leftStride = leftPlane[i].u_stride; 45817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rightWalk = (M4OSA_MemAddr8)M4XXX_SampleAddress(rightPlane[i], 0, 0); 45837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rightStride = rightPlane[i].u_stride; 45847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi destWalkLeft = (M4OSA_MemAddr8)M4XXX_SampleAddress(PlaneOut[i], 0, 0); 45867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi destWalkRight = (M4OSA_MemAddr8)M4XXX_SampleAddress(PlaneOut[i], leftPartWidth, 0); 45877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi destStride = PlaneOut[i].u_stride; 45887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (y=0; y<height; y++) 45907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 459132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)destWalkLeft, (void *)leftWalk, leftPartWidth); 45927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi leftWalk += leftStride; 45937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 459432ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)destWalkRight, (void *)rightWalk, rightPartWidth); 45957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi rightWalk += rightStride; 45967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 45977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi destWalkLeft += destStride; 45987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi destWalkRight += destStride; 45997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 46007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 46017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 46027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 46037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 46047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 46057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 46067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_SlideTransition( M4OSA_Void *userData, M4VIFI_ImagePlane PlaneIn1[3], 46077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane PlaneIn2[3], M4VIFI_ImagePlane *PlaneOut, 46087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_ExternalProgress *pProgress, 46097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiTransitionKind) 46107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 46117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_internal_SlideTransitionSettings* settings = 46127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4xVSS_internal_SlideTransitionSettings*)userData; 46137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 shiftUV; 46147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 46157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("inside M4xVSS_SlideTransition"); 46167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((M4xVSS_SlideTransition_RightOutLeftIn == settings->direction) 46177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi || (M4xVSS_SlideTransition_LeftOutRightIn == settings->direction) ) 46187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 46197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* horizontal slide */ 46207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi shiftUV = ((PlaneOut[1]).u_width * pProgress->uiProgress)/1000; 46217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_SlideTransition upper: shiftUV = %d,progress = %d", 46227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi shiftUV,pProgress->uiProgress ); 46237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4xVSS_SlideTransition_RightOutLeftIn == settings->direction) 46247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 46257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Put the previous clip frame right, the next clip frame left, and reverse shiftUV 46267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (since it's a shift from the left frame) so that we start out on the right 46277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (i.e. not left) frame, it 46287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi being from the previous clip. */ 46297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4xVSS_HorizontalSlideTransition(PlaneIn2, PlaneIn1, PlaneOut, 46307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (PlaneOut[1]).u_width - shiftUV); 46317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 46327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else /* Left out, right in*/ 46337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 46347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4xVSS_HorizontalSlideTransition(PlaneIn1, PlaneIn2, PlaneOut, shiftUV); 46357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 46367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 46377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 46387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 46397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* vertical slide */ 46407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi shiftUV = ((PlaneOut[1]).u_height * pProgress->uiProgress)/1000; 46417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4xVSS_SlideTransition bottom: shiftUV = %d,progress = %d",shiftUV, 46427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pProgress->uiProgress ); 46437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4xVSS_SlideTransition_TopOutBottomIn == settings->direction) 46447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 46457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Put the previous clip frame top, the next clip frame bottom. */ 46467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4xVSS_VerticalSlideTransition(PlaneIn1, PlaneIn2, PlaneOut, shiftUV); 46477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 46487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else /* Bottom out, top in */ 46497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 46507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4xVSS_VerticalSlideTransition(PlaneIn2, PlaneIn1, PlaneOut, 46517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (PlaneOut[1]).u_height - shiftUV); 46527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 46537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 46547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 46557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Note: it might be worthwhile to do some parameter checking, see if dimensions match, etc., 46567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi at least in debug mode. */ 46577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 46587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 46597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 46607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 46617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 46627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4xVSS_FadeBlackTransition(M4OSA_Void *pFunctionContext, 46637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane *PlaneIn, 46647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VIFI_ImagePlane *PlaneOut, 46657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4VSS3GPP_ExternalProgress *pProgress, 46667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32 uiEffectKind) 46677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 46687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function apply a fade to black and then a fade from black 46697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 46707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFunctionContext(IN) Contains which color to apply (not very clean ...) 46717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param PlaneIn (IN) Input YUV420 planar 46727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param PlaneOut (IN/OUT) Output YUV420 planar 46737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pProgress (IN/OUT) Progress indication (0-100) 46747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param uiEffectKind (IN) Unused 46757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 46767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4VIFI_OK: No error 46777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 46787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 46797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_FadeBlackTransition(M4OSA_Void *userData, M4VIFI_ImagePlane PlaneIn1[3], 46807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane PlaneIn2[3], 46817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIFI_ImagePlane *PlaneOut, 46827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VSS3GPP_ExternalProgress *pProgress, 46837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiTransitionKind) 46847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 46857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 tmp = 0; 46867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 46877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 46887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 46897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((pProgress->uiProgress) < 500) 46907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 46917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 46927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Compute where we are in the effect (scale is 0->1024) */ 46937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tmp = (M4OSA_Int32)((1.0 - ((M4OSA_Float)(pProgress->uiProgress*2)/1000)) * 1024 ); 46947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 46957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 46967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Apply the darkening effect */ 46977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4VFL_modifyLumaWithScale( (M4ViComImagePlane*)PlaneIn1, 46987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4ViComImagePlane*)PlaneOut, tmp, M4OSA_NULL); 46997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 47007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 47017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_FadeBlackTransition: M4VFL_modifyLumaWithScale returns\ 47027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi error 0x%x, returning M4VSS3GPP_ERR_LUMA_FILTER_ERROR", err); 47037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4VSS3GPP_ERR_LUMA_FILTER_ERROR; 47047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 47057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 47067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 47077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 47087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 47097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Compute where we are in the effect (scale is 0->1024). */ 47107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi tmp = (M4OSA_Int32)( (((M4OSA_Float)(((pProgress->uiProgress-500)*2))/1000)) * 1024 ); 47117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 47127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 47137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Apply the darkening effect */ 47147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4VFL_modifyLumaWithScale((M4ViComImagePlane*)PlaneIn2, 47157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4ViComImagePlane*)PlaneOut, tmp, M4OSA_NULL); 47167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 47177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 47187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_FadeBlackTransition:\ 47197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VFL_modifyLumaWithScale returns error 0x%x,\ 47207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning M4VSS3GPP_ERR_LUMA_FILTER_ERROR", err); 47217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4VSS3GPP_ERR_LUMA_FILTER_ERROR; 47227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 47237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 47247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 47257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 47267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4VIFI_OK; 47277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 47287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 47297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 47307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 47317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 47327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalConvertToUTF8(M4OSA_Context pContext, 47337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_Void* pBufferIn, 47347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_Void* pBufferOut, 47357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32* convertedSize) 47367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 47377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function convert from the customer format to UTF8 47387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 47397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 47407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pBufferIn (IN) Buffer to convert 47417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pBufferOut (OUT) Converted buffer 47427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param convertedSize (OUT) Size of the converted buffer 47437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 47447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 47457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 47467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 47477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 47487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalConvertToUTF8(M4OSA_Context pContext, M4OSA_Void* pBufferIn, 47497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Void* pBufferOut, M4OSA_UInt32* convertedSize) 47507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 47517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 47527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 47537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 47547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBufferOut = pBufferIn; 47557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->UTFConversionContext.pConvToUTF8Fct != M4OSA_NULL 47567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && xVSS_context->UTFConversionContext.pTempOutConversionBuffer != M4OSA_NULL) 47577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 47587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 ConvertedSize = xVSS_context->UTFConversionContext.m_TempOutConversionSize; 47597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 476032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)xVSS_context->UTFConversionContext.pTempOutConversionBuffer,0 476132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu ,(M4OSA_UInt32)xVSS_context->UTFConversionContext.m_TempOutConversionSize); 47627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 47637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = xVSS_context->UTFConversionContext.pConvToUTF8Fct((M4OSA_Void*)pBufferIn, 47647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt8*)xVSS_context->UTFConversionContext.pTempOutConversionBuffer, 47657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32*)&ConvertedSize); 47667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err == M4xVSSWAR_BUFFER_OUT_TOO_SMALL) 47677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 47687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_1("M4xVSS_internalConvertToUTF8: pConvToUTF8Fct return 0x%x",err); 47697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 47707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*free too small buffer*/ 4771694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->\ 47727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi UTFConversionContext.pTempOutConversionBuffer); 47737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 47747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*re-allocate the buffer*/ 47757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->UTFConversionContext.pTempOutConversionBuffer = 4776694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu (M4OSA_Void*)M4OSA_32bitAlignedMalloc(ConvertedSize*sizeof(M4OSA_UInt8), M4VA, 47777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char *)"M4xVSS_internalConvertToUTF8: UTF conversion buffer"); 47787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL == xVSS_context->UTFConversionContext.pTempOutConversionBuffer) 47797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 47807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Allocation error in M4xVSS_internalConvertToUTF8"); 47817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 47827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 47837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->UTFConversionContext.m_TempOutConversionSize = ConvertedSize; 47847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 478532ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)xVSS_context->\ 478632ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu UTFConversionContext.pTempOutConversionBuffer,0,(M4OSA_UInt32)xVSS_context->\ 478732ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu UTFConversionContext.m_TempOutConversionSize); 47887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 47897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = xVSS_context->UTFConversionContext.pConvToUTF8Fct((M4OSA_Void*)pBufferIn, 47907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Void*)xVSS_context->UTFConversionContext.pTempOutConversionBuffer, 47917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32*)&ConvertedSize); 47927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 47937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 47947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalConvertToUTF8: pConvToUTF8Fct return 0x%x",err); 47957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 47967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 47977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 47987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(err != M4NO_ERROR) 47997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 48007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalConvertToUTF8: pConvToUTF8Fct return 0x%x",err); 48017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 48027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 48037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*decoded path*/ 48047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBufferOut = xVSS_context->UTFConversionContext.pTempOutConversionBuffer; 48057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*convertedSize) = ConvertedSize; 48067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 48077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 48087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 48097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 48107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 48117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 48127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 48137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * prototype M4OSA_ERR M4xVSS_internalConvertFromUTF8(M4OSA_Context pContext) 48147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 48157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function convert from UTF8 to the customer format 48167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 48177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) The integrator own context 48187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pBufferIn (IN) Buffer to convert 48197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pBufferOut (OUT) Converted buffer 48207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param convertedSize (OUT) Size of the converted buffer 48217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 48227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 48237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the function parameters is null 48247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 48257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 48267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4xVSS_internalConvertFromUTF8(M4OSA_Context pContext, M4OSA_Void* pBufferIn, 48277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Void* pBufferOut, M4OSA_UInt32* convertedSize) 48287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 48297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4xVSS_Context* xVSS_context = (M4xVSS_Context*)pContext; 48307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 48317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 48327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBufferOut = pBufferIn; 48337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(xVSS_context->UTFConversionContext.pConvFromUTF8Fct != M4OSA_NULL 48347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && xVSS_context->UTFConversionContext.pTempOutConversionBuffer != M4OSA_NULL) 48357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 48367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 ConvertedSize = xVSS_context->UTFConversionContext.m_TempOutConversionSize; 48377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 483832ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)xVSS_context->\ 483932ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu UTFConversionContext.pTempOutConversionBuffer,0,(M4OSA_UInt32)xVSS_context->\ 484032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu UTFConversionContext.m_TempOutConversionSize); 48417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 48427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = xVSS_context->UTFConversionContext.pConvFromUTF8Fct\ 48437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((M4OSA_Void*)pBufferIn,(M4OSA_UInt8*)xVSS_context->\ 48447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi UTFConversionContext.pTempOutConversionBuffer, (M4OSA_UInt32*)&ConvertedSize); 48457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err == M4xVSSWAR_BUFFER_OUT_TOO_SMALL) 48467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 48477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_1("M4xVSS_internalConvertFromUTF8: pConvFromUTF8Fct return 0x%x",err); 48487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 48497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*free too small buffer*/ 4850694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(xVSS_context->\ 48517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi UTFConversionContext.pTempOutConversionBuffer); 48527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 48537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*re-allocate the buffer*/ 48547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->UTFConversionContext.pTempOutConversionBuffer = 4855694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu (M4OSA_Void*)M4OSA_32bitAlignedMalloc(ConvertedSize*sizeof(M4OSA_UInt8), M4VA, 48567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char *)"M4xVSS_internalConvertFromUTF8: UTF conversion buffer"); 48577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL == xVSS_context->UTFConversionContext.pTempOutConversionBuffer) 48587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 48597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("Allocation error in M4xVSS_internalConvertFromUTF8"); 48607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 48617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 48627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi xVSS_context->UTFConversionContext.m_TempOutConversionSize = ConvertedSize; 48637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 486432ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)xVSS_context->\ 486532ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu UTFConversionContext.pTempOutConversionBuffer,0,(M4OSA_UInt32)xVSS_context->\ 486632ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu UTFConversionContext.m_TempOutConversionSize); 48677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 48687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = xVSS_context->UTFConversionContext.pConvFromUTF8Fct((M4OSA_Void*)pBufferIn, 48697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Void*)xVSS_context->UTFConversionContext.pTempOutConversionBuffer, 48707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32*)&ConvertedSize); 48717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(err != M4NO_ERROR) 48727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 48737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalConvertFromUTF8: pConvFromUTF8Fct return 0x%x",err); 48747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 48757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 48767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 48777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(err != M4NO_ERROR) 48787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 48797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalConvertFromUTF8: pConvFromUTF8Fct return 0x%x",err); 48807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 48817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 48827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*decoded path*/ 48837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pBufferOut = xVSS_context->UTFConversionContext.pTempOutConversionBuffer; 48847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (*convertedSize) = ConvertedSize; 48857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 48867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 48877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 48887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 48897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 4890