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