VideoBrowserMain.c revision 3feb41ff6f617768eb25c1b69c473d33f4f2f37b
1cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/* 2cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 3cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * 4cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 5cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * you may not use this file except in compliance with the License. 6cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * You may obtain a copy of the License at 7cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * 8cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 9cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * 10cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 11cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 12cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * See the License for the specific language governing permissions and 14cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * limitations under the License. 15cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi */ 16cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include "VideoEditorVideoDecoder.h" 17cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include "VideoEditor3gpReader.h" 18cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 19cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <utils/Log.h> 20cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include "VideoBrowserInternal.h" 21cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include "LVOSA_FileReader_optim.h" 22cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 23cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi//#define M4OSA_TRACE_LEVEL 1 24cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#if (M4OSA_TRACE_LEVEL >= 1) 25cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#undef M4OSA_TRACE1_0 26cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#undef M4OSA_TRACE1_1 27cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#undef M4OSA_TRACE1_2 28cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#undef M4OSA_TRACE1_3 29cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 30cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define M4OSA_TRACE1_0(a) __android_log_print(ANDROID_LOG_INFO, "Thumbnail", a); 31cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define M4OSA_TRACE1_1(a,b) __android_log_print(ANDROID_LOG_INFO, "Thumbnail", a,b); 32cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define M4OSA_TRACE1_2(a,b,c) __android_log_print(ANDROID_LOG_INFO, "Thumbnail", a,b,c); 33cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define M4OSA_TRACE1_3(a,b,c,d) __android_log_print(ANDROID_LOG_INFO, "Thumbnail", a,b,c,d); 34cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#endif 35cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 36cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/****************************************************************************** 37cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * M4OSA_ERR videoBrowserSetWindow( 38cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * M4OSA_Context pContext, M4OSA_UInt32 x, 39cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * M4OSA_UInt32 y, M4OSA_UInt32 dx, M4OSA_UInt32 dy); 40cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @brief This function sets the size and the position of the display. 41cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param pContext (IN) : Video Browser context 42cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param pPixelArray (IN) : Array to hold the video frame. 43cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param x (IN) : Horizontal position of the top left 44cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * corner 45cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param y (IN) : Vertical position of the top left corner 46cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param dx (IN) : Width of the display window 47cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param dy (IN) : Height of the video window 48cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @return M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC 49cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ******************************************************************************/ 50cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR videoBrowserSetWindow( 51cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context pContext, 52cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Int32 *pPixelArray, 53cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 x, M4OSA_UInt32 y, 54cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 dx, M4OSA_UInt32 dy) 55cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 56cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoBrowserContext* pC = (VideoBrowserContext*)pContext; 57cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 58cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 59cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_5("videoBrowserSetWindow: entering with 0x%x %d %d %d %d ", 60cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext, x, y, dx, dy); 61cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 62cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Sanity checks ---*/ 63cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserSetWindow, pContext, err, M4ERR_PARAMETER); 64cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserSetWindow, pPixelArray, err, M4ERR_PARAMETER); 65cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_STATE(videoBrowserSetWindow, VideoBrowser_kVBOpened, pC); 66cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 67cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[0].u_topleft = 0; 68cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 69cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[0].u_height = dy; 70cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[0].u_width = dx; 71cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_x = x; 72cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_y = y; 73cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 74cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pC->m_frameColorType == VideoBrowser_kGB565) { 75cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[0].u_stride = pC->m_outputPlane[0].u_width << 1; 76cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[0].pac_data = (M4OSA_UInt8*)M4OSA_malloc( 77cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[0].u_stride * pC->m_outputPlane[0].u_height, 78cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOBROWSER, (M4OSA_Char *)"output plane"); 79cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 80cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserSetWindow, 81cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[0].pac_data, err, M4ERR_ALLOC); 82cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 83cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (pC->m_frameColorType == VideoBrowser_kYUV420) { 84cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[0].u_stride = pC->m_outputPlane[0].u_width; 85cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[1].u_height = pC->m_outputPlane[0].u_height >> 1; 86cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[1].u_width = pC->m_outputPlane[0].u_width >> 1; 87cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[1].u_topleft = 0; 88cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[1].u_stride = pC->m_outputPlane[1].u_width; 89cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 90cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[2].u_height = pC->m_outputPlane[0].u_height >> 1; 91cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[2].u_width = pC->m_outputPlane[0].u_width >> 1; 92cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[2].u_topleft = 0; 93cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[2].u_stride = pC->m_outputPlane[2].u_width; 94cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 95cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[0].pac_data = (M4OSA_UInt8*)pPixelArray; 96cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 97cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserSetWindow, 98cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[0].pac_data, err, M4ERR_ALLOC); 99cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 100cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[1].pac_data = 101cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[0].pac_data + 102cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pC->m_outputPlane[0].u_stride * pC->m_outputPlane[0].u_height); 103cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 104cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[2].pac_data = 105cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[1].pac_data + 106cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pC->m_outputPlane[1].u_stride * pC->m_outputPlane[1].u_height); 107cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 108cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 109cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 110cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_0("videoBrowserSetWindow returned NO ERROR"); 111cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4NO_ERROR; 112cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 113cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoBrowserSetWindow_cleanUp: 114cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 115cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_1("videoBrowserSetWindow returned 0x%x", err); 116cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 117cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 118cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 119cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/****************************************************************************** 120cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @brief This function allocates the resources needed for browsing a video file 121cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param ppContext (OUT): Pointer on a context filled by this function. 122cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param pURL (IN) : Path of File to browse 123cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param DrawMode (IN) : Indicate which method is used to draw (Direct draw etc...) 124cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param pfCallback (IN) : Callback function to be called when a frame must be displayed 125cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param pCallbackData (IN) : User defined data that will be passed as parameter of the callback 126cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param clrType (IN) : Required color type. 127cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @return M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC 128cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi******************************************************************************/ 129cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR videoBrowserCreate( 130cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context* ppContext, 131cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pURL, 132cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 DrawMode, 133cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_FileReadPointer* ptrF, 134cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoBrowser_Callback pfCallback, 135cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pCallbackData, 136cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoBrowser_VideoColorType clrType) 137cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 138cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoBrowserContext* pContext = M4OSA_NULL; 139cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4READER_MediaFamily mediaFamily = M4READER_kMediaFamilyUnknown; 140cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4_StreamHandler* pStreamHandler = M4OSA_NULL; 141cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4_VideoStreamHandler* pVideoStreamHandler = M4OSA_NULL; 142cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4DECODER_VideoType decoderType; 143cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4DECODER_OutputFilter FilterOption; 144cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 145cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Bool deb = M4OSA_TRUE; 146cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 147cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 148cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_2( 149cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoBrowserCreate: entering with 0x%x 0x%x", ppContext, pURL); 150cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 151cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Sanity checks ---*/ 152cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserCreate, ppContext, err, M4ERR_PARAMETER); 153cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi *ppContext = M4OSA_NULL ; 154cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserCreate, pURL, err, M4ERR_PARAMETER); 155cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 156cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Create context ---*/ 157cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (VideoBrowserContext*)M4OSA_malloc( 158cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(VideoBrowserContext), 159cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOBROWSER, (M4OSA_Char*)"Video browser context"); 160cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 161cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserCreate, pContext,err, M4ERR_ALLOC); 1623feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu memset((void *)pContext, 0,sizeof(VideoBrowserContext)); 163cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 164cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Initialize the context parameters ---*/ 165cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_state = VideoBrowser_kVBCreating ; 166cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_frameColorType = clrType; 167cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 168cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Copy the file reader functions ---*/ 1693feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu memcpy((void *)&pContext->m_fileReadPtr, 1703feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu (void *)ptrF, 171cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4OSA_FileReadPointer)) ; 172cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 173cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* PR#SP00013 DGR bug 13 : first frame is not visible */ 174cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_drawmode = DrawMode; 175cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 176cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 177cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Retrieve the 3gp reader interface */ 178cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoEditor3gpReader_getInterface(&pContext->m_mediaType, 179cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &pContext->m_3gpReader, &pContext->m_3gpData); 180cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 181cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserCreate, pContext->m_3gpReader, err, M4ERR_ALLOC); 182cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserCreate, pContext->m_3gpData, err, M4ERR_ALLOC); 183cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 184cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Create the file reader ---*/ 185cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pContext->m_3gpReader->m_pFctCreate(&pContext->m_pReaderCtx); 186cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err); 187cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserCreate, pContext->m_pReaderCtx, err, M4ERR_ALLOC); 188cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_3gpData->m_readerContext = pContext->m_pReaderCtx; 189cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 190cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Set the OSAL file reader functions ---*/ 191cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pContext->m_3gpReader->m_pFctSetOption( 192cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pReaderCtx, 193cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4READER_kOptionID_SetOsaFileReaderFctsPtr, 194cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_DataOption)(&pContext->m_fileReadPtr)); 195cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 196cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err) ; 197cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 198cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Open the file ---*/ 199cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pContext->m_3gpReader->m_pFctOpen(pContext->m_pReaderCtx, pURL); 200cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err) ; 201cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 202cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Try to find a video stream ---*/ 203cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi while (err == M4NO_ERROR) 204cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 205cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pContext->m_3gpReader->m_pFctGetNextStream( 206cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pReaderCtx, &mediaFamily, &pStreamHandler); 207cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 208cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*in case we found a bifs stream or something else...*/ 2094fad6762c6429379c4f7fe5d78e84d0718f52817Basavapatna Dattaguru if ((err == (M4OSA_UInt32)M4ERR_READER_UNKNOWN_STREAM_TYPE) || 2104fad6762c6429379c4f7fe5d78e84d0718f52817Basavapatna Dattaguru (err == (M4OSA_UInt32)M4WAR_TOO_MUCH_STREAMS)) 211cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 212cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4NO_ERROR; 213cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi continue; 214cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 215cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 216cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4WAR_NO_MORE_STREAM) 217cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 218cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4READER_kMediaFamilyVideo != mediaFamily) 219cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 220cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4NO_ERROR; 221cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi continue; 222cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 223cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 224cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pStreamHandler = pStreamHandler; 225cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 226cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pContext->m_3gpReader->m_pFctReset( 227cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pReaderCtx, pContext->m_pStreamHandler); 228cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 229cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err); 230cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 231cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pContext->m_3gpReader->m_pFctFillAuStruct( 232cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pReaderCtx, 233cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pStreamHandler, 234cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &pContext->m_accessUnit); 235cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 236cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err); 237cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 238cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pVideoStreamHandler = 239cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4_VideoStreamHandler*)pContext->m_pStreamHandler; 240cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 241cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi switch (pContext->m_pStreamHandler->m_streamType) 242cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 243cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi case M4DA_StreamTypeVideoMpeg4: 244cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi case M4DA_StreamTypeVideoH263: 245cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 246cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pCodecLoaderContext = M4OSA_NULL; 247cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi decoderType = M4DECODER_kVideoTypeMPEG4; 248cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 249b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma#ifdef USE_SOFTWARE_DECODER 250b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma err = VideoEditorVideoDecoder_getSoftwareInterface_MPEG4( 251b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma &decoderType, &pContext->m_pDecoder); 252b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma#else 253b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma err = VideoEditorVideoDecoder_getInterface_MPEG4( 2544fad6762c6429379c4f7fe5d78e84d0718f52817Basavapatna Dattaguru &decoderType, (void **)&pContext->m_pDecoder); 255b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma#endif 256cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err) ; 257cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 258cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pContext->m_pDecoder->m_pFctCreate( 259cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &pContext->m_pDecoderCtx, 260cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pStreamHandler, 261cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_3gpData, 262cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &pContext->m_accessUnit, 263cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pCodecLoaderContext) ; 264cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 265cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err) ; 266cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 267cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 268cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 269cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi case M4DA_StreamTypeVideoMpeg4Avc: 270cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 271cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pCodecLoaderContext = M4OSA_NULL; 272cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 273cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi decoderType = M4DECODER_kVideoTypeAVC; 274b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma 275b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma#ifdef USE_SOFTWARE_DECODER 276b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma err = VideoEditorVideoDecoder_getSoftwareInterface_H264( 277b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma &decoderType, &pContext->m_pDecoder); 278b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma#else 279b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma err = VideoEditorVideoDecoder_getInterface_H264( 2804fad6762c6429379c4f7fe5d78e84d0718f52817Basavapatna Dattaguru &decoderType, (void **)&pContext->m_pDecoder); 281b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma#endif 282cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err) ; 283cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 284cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pContext->m_pDecoder->m_pFctCreate( 285cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &pContext->m_pDecoderCtx, 286cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pStreamHandler, 287cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_3gpData, 288cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &pContext->m_accessUnit, 289cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pCodecLoaderContext) ; 290cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 291cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err) ; 292cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 293cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 294cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 295cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi default: 296cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4ERR_VB_MEDIATYPE_NOT_SUPPORTED; 297cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi goto videoBrowserCreate_cleanUp; 298cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 299cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 300cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 301cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 302cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err == M4WAR_NO_MORE_STREAM) 303cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 304cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4NO_ERROR ; 305cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 306cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 307cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL == pContext->m_pStreamHandler) 308cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 309cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4ERR_VB_NO_VIDEO ; 310cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi goto videoBrowserCreate_cleanUp ; 311cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 312cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 313cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pContext->m_pDecoder->m_pFctSetOption( 314cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pDecoderCtx, 315cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4DECODER_kOptionID_DeblockingFilter, 316cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_DataOption)&deb); 317cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 318cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err == M4WAR_DEBLOCKING_FILTER_NOT_IMPLEMENTED) 319cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 320cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4NO_ERROR; 321cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 322cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err); 323cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 324cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi FilterOption.m_pFilterUserData = M4OSA_NULL; 325cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 326cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 327cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->m_frameColorType == VideoBrowser_kGB565) { 328cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi FilterOption.m_pFilterFunction = 329cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Void*)M4VIFI_ResizeBilinearYUV420toBGR565; 330cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 331cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (pContext->m_frameColorType == VideoBrowser_kYUV420) { 332cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi FilterOption.m_pFilterFunction = 333cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Void*)M4VIFI_ResizeBilinearYUV420toYUV420; 334cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 335cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else { 336cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4ERR_PARAMETER; 337cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi goto videoBrowserCreate_cleanUp; 338cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 339cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 340cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pContext->m_pDecoder->m_pFctSetOption( 341cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pDecoderCtx, 342cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4DECODER_kOptionID_OutputFilter, 343cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_DataOption)&FilterOption); 344cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 345cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err); 346cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 347cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* store the callback details */ 348cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pfCallback = pfCallback; 349cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pCallbackUserData = pCallbackData; 350cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* store the callback details */ 351cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 352cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_state = VideoBrowser_kVBOpened; 353cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi *ppContext = pContext; 354cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 355cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("videoBrowserCreate returned NO ERROR"); 356cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4NO_ERROR; 357cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 358cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoBrowserCreate_cleanUp: 359cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 360cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext) 361cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 362cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext->m_pDecoderCtx) 363cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 364cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pDecoder->m_pFctDestroy(pContext->m_pDecoderCtx); 365cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pDecoderCtx = M4OSA_NULL; 366cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 367cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 368cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext->m_pReaderCtx) 369cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 370cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_3gpReader->m_pFctClose(pContext->m_pReaderCtx); 371cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_3gpReader->m_pFctDestroy(pContext->m_pReaderCtx); 372cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pReaderCtx = M4OSA_NULL; 373cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 374cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pContext->m_pDecoder); 375cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pContext->m_3gpReader); 376cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pContext->m_3gpData); 377cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pContext); 378cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 379cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 380cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_1("videoBrowserCreate returned 0x%x", err); 381cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 382cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 383cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 384cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/****************************************************************************** 385cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* M4OSA_ERR videoBrowserCleanUp(M4OSA_Context pContext); 386cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @brief This function frees the resources needed for browsing a 387cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* video file. 388cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param pContext (IN) : Video browser context 389cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @return M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE 390cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi******************************************************************************/ 391cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR videoBrowserCleanUp(M4OSA_Context pContext) 392cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 393cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoBrowserContext* pC = (VideoBrowserContext*)pContext; 394cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 395cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 396cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_1("videoBrowserCleanUp: entering with 0x%x", pContext); 397cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 398cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Sanity checks ---*/ 399cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserCleanUp, pContext, err, M4ERR_PARAMETER); 400cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 401cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pC->m_pDecoderCtx) 402cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 403cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pDecoder->m_pFctDestroy(pC->m_pDecoderCtx); 404cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pDecoderCtx = M4OSA_NULL ; 405cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 406cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 407cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pC->m_pReaderCtx) 408cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 409cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_3gpReader->m_pFctClose(pC->m_pReaderCtx) ; 410cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_3gpReader->m_pFctDestroy(pC->m_pReaderCtx); 411cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pReaderCtx = M4OSA_NULL; 412cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 413cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 414cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pC->m_pDecoder); 415cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pC->m_3gpReader); 416cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pC->m_3gpData); 417cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 418cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pC->m_frameColorType != VideoBrowser_kYUV420) { 419cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pC->m_outputPlane[0].pac_data); 420cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 421cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pC); 422cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 423cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_0("videoBrowserCleanUp returned NO ERROR"); 424cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4NO_ERROR; 425cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 426cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoBrowserCleanUp_cleanUp: 427cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 428cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_1("videoBrowserCleanUp returned 0x%x", err); 429cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 430cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 431cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/****************************************************************************** 432cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* M4OSA_ERR videoBrowserPrepareFrame( 433cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* M4OSA_Context pContext, M4OSA_UInt32* pTime); 434cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @brief This function prepares the frame. 435cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param pContext (IN) : Video browser context 436cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param pTime (IN/OUT) : Pointer on the time to reach. Updated 437cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* by this function with the reached time 438cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @return M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC 439cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi******************************************************************************/ 440cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR videoBrowserPrepareFrame(M4OSA_Context pContext, M4OSA_UInt32* pTime) 441cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 442cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoBrowserContext* pC = (VideoBrowserContext*)pContext; 443cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 444cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 targetTime = 0; 445cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 jumpTime = 0; 446cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4_MediaTime timeMS = 0; 447cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Int32 rapTime = 0; 448cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Bool isBackward = M4OSA_FALSE; 449cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Bool bJumpNeeded = M4OSA_FALSE; 450cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 451cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 452cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Sanity checks ---*/ 453cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserPrepareFrame, pContext, err, M4ERR_PARAMETER); 454cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserPrepareFrame, pTime, err, M4ERR_PARAMETER); 455cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 456cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi targetTime = *pTime ; 457cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 458cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Check the state, if this is the first call to this function 459cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi we move to the state "browsing" ---*/ 460cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (VideoBrowser_kVBOpened == pC->m_state) 461cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 462cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_state = VideoBrowser_kVBBrowsing; 463cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 464cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (VideoBrowser_kVBBrowsing != pC->m_state) 465cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 466cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4ERR_STATE ; 467cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi goto videoBrowserPrepareFrame_cleanUp; 468cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 469cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 470cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Check the duration ---*/ 471cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- If we jump backward, we need to jump ---*/ 472cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (targetTime < pC->m_currentCTS) 473cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 474cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi isBackward = M4OSA_TRUE; 475cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bJumpNeeded = M4OSA_TRUE; 476cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 477cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- If we jumpt to a time greater than "currentTime" + "predecodeTime" 478cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi we need to jump ---*/ 479cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (targetTime > (pC->m_currentCTS + VIDEO_BROWSER_PREDECODE_TIME)) 480cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 481cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bJumpNeeded = M4OSA_TRUE; 482cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 483cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 484cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_TRUE == bJumpNeeded) 485cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 486cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi rapTime = targetTime; 487cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Retrieve the previous RAP time ---*/ 488cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pC->m_3gpReader->m_pFctGetPrevRapTime( 489cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pReaderCtx, pC->m_pStreamHandler, &rapTime); 490cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 491cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserPrepareFrame, err); 492cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 493cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jumpTime = rapTime; 494cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 495cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pC->m_3gpReader->m_pFctJump(pC->m_pReaderCtx, 496cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pStreamHandler, 497cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Int32*)&jumpTime); 498cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserPrepareFrame, err); 499cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 500cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 501cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi timeMS = (M4_MediaTime)targetTime; 502cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pC->m_pDecoder->m_pFctDecode( 503cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pDecoderCtx, &timeMS, bJumpNeeded); 504cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 505cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((err != M4NO_ERROR) && (err != M4WAR_NO_MORE_AU)) 506cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 507cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 508cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 509cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 510cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // FIXME: 511cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Not sure that I understand why we need a second jump logic here 512cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((timeMS >= pC->m_currentCTS) && (M4OSA_TRUE == isBackward)) 513cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 514cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jumpTime = rapTime; 515cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pC->m_3gpReader->m_pFctJump( 516cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pReaderCtx, pC->m_pStreamHandler, (M4OSA_Int32*)&jumpTime); 517cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 518cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserPrepareFrame, err); 519cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 520cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi timeMS = (M4_MediaTime)rapTime; 521cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pC->m_pDecoder->m_pFctDecode( 522cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pDecoderCtx, &timeMS, M4OSA_TRUE); 523cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 524cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((err != M4NO_ERROR) && (err != M4WAR_NO_MORE_AU)) 525cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 526cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 527cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 528cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 529cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 530cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pC->m_pDecoder->m_pFctRender( 531cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pDecoderCtx, &timeMS, pC->m_outputPlane, M4OSA_TRUE); 532cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 533cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4WAR_VIDEORENDERER_NO_NEW_FRAME == err) 534cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 535b21827d1bc543e6c3fe31f0b0bc02e8ce306f43fDheeraj Sharma return err; 536cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 537cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserPrepareFrame, err) ; 538cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 539cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_currentCTS = (M4OSA_UInt32)timeMS; 540cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 541cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi *pTime = pC->m_currentCTS; 542cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 543cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4NO_ERROR; 544cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 545cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoBrowserPrepareFrame_cleanUp: 546cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 547cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((M4WAR_INVALID_TIME == err) || (M4WAR_NO_MORE_AU == err)) 548cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 549cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4NO_ERROR; 550cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 551cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (M4OSA_NULL != pC) 552cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 553cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_currentCTS = 0; 554cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 555cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 556cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_1("videoBrowserPrepareFrame returned 0x%x", err); 557cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 558cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 559cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 560cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/****************************************************************************** 561cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* M4OSA_ERR videoBrowserDisplayCurrentFrame(M4OSA_Context pContext); 562cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @brief This function displays the current frame. 563cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param pContext (IN) : Video browser context 564cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @return M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC 565cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi******************************************************************************/ 566cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR videoBrowserDisplayCurrentFrame(M4OSA_Context pContext) 567cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 568cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoBrowserContext* pC = (VideoBrowserContext*)pContext ; 569cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR ; 570cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 571cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Sanity checks ---*/ 572cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserDisplayCurrentFrame, pContext, err, M4ERR_PARAMETER); 573cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 574cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Request display of the frame 575cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pfCallback((M4OSA_Context) pC, // VB context 576cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOBROWSER_DISPLAY_FRAME, // action requested 577cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4NO_ERROR, // error code 578cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Void*) &(pC->m_outputPlane[0]), // image to be displayed 579cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Void*) pC->m_pCallbackUserData); // user-provided data 580cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 581cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#ifdef DUMPTOFILE 582cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 583cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context fileContext; 584cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* fileName = "/sdcard/textBuffer_RGB565.rgb"; 585cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName, 586cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_kFileWrite | M4OSA_kFileCreate); 587cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 588cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteData(fileContext, 589cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_MemAddr8) pC->m_outputPlane[0].pac_data, 590cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[0].u_height*pC->m_outputPlane[0].u_width*2); 591cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 592cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteClose(fileContext); 593cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 594cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#endif 595cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 596cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_0("videoBrowserDisplayCurrentFrame returned NO ERROR") ; 597cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4NO_ERROR; 598cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 599cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoBrowserDisplayCurrentFrame_cleanUp: 600cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 601cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_1("videoBrowserDisplayCurrentFrame returned 0x%x", err) ; 602cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 603cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 604