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; 76c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu pC->m_outputPlane[0].pac_data = (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc( 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 ---*/ 157c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu pContext = (VideoBrowserContext*)M4OSA_32bitAlignedMalloc( 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, 261cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang pContext->m_3gpReader, 262cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_3gpData, 263cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &pContext->m_accessUnit, 264cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pCodecLoaderContext) ; 265cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 266cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err) ; 267cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 268cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 269cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 270cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi case M4DA_StreamTypeVideoMpeg4Avc: 271cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 272cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pCodecLoaderContext = M4OSA_NULL; 273cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 274cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi decoderType = M4DECODER_kVideoTypeAVC; 275b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma 276b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma#ifdef USE_SOFTWARE_DECODER 277b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma err = VideoEditorVideoDecoder_getSoftwareInterface_H264( 278b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma &decoderType, &pContext->m_pDecoder); 279b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma#else 280b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma err = VideoEditorVideoDecoder_getInterface_H264( 2814fad6762c6429379c4f7fe5d78e84d0718f52817Basavapatna Dattaguru &decoderType, (void **)&pContext->m_pDecoder); 282b62d78bd0d6a7738cc75df6f14f65abebb9b7b5fDheeraj Sharma#endif 283cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err) ; 284cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 285cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pContext->m_pDecoder->m_pFctCreate( 286cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &pContext->m_pDecoderCtx, 287cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pStreamHandler, 288cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang pContext->m_3gpReader, 289cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_3gpData, 290cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &pContext->m_accessUnit, 291cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pCodecLoaderContext) ; 292cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 293cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err) ; 294cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 295cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 296cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 297cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi default: 298cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4ERR_VB_MEDIATYPE_NOT_SUPPORTED; 299cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi goto videoBrowserCreate_cleanUp; 300cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 301cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 302cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 303cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 304cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err == M4WAR_NO_MORE_STREAM) 305cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 306cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4NO_ERROR ; 307cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 308cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 309cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL == pContext->m_pStreamHandler) 310cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 311cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4ERR_VB_NO_VIDEO ; 312cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi goto videoBrowserCreate_cleanUp ; 313cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 314cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 315cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pContext->m_pDecoder->m_pFctSetOption( 316cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pDecoderCtx, 317cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4DECODER_kOptionID_DeblockingFilter, 318cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_DataOption)&deb); 319cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 320cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err == M4WAR_DEBLOCKING_FILTER_NOT_IMPLEMENTED) 321cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 322cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4NO_ERROR; 323cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 324cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err); 325cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 326cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi FilterOption.m_pFilterUserData = M4OSA_NULL; 327cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 328cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 329cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->m_frameColorType == VideoBrowser_kGB565) { 330cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi FilterOption.m_pFilterFunction = 331cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Void*)M4VIFI_ResizeBilinearYUV420toBGR565; 332cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 333cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (pContext->m_frameColorType == VideoBrowser_kYUV420) { 334cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi FilterOption.m_pFilterFunction = 335cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Void*)M4VIFI_ResizeBilinearYUV420toYUV420; 336cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 337cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else { 338cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4ERR_PARAMETER; 339cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi goto videoBrowserCreate_cleanUp; 340cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 341cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 342cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pContext->m_pDecoder->m_pFctSetOption( 343cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pDecoderCtx, 344cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4DECODER_kOptionID_OutputFilter, 345cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_DataOption)&FilterOption); 346cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 347cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserCreate, err); 348cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 349cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* store the callback details */ 350cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pfCallback = pfCallback; 351cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pCallbackUserData = pCallbackData; 352cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* store the callback details */ 353cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 354cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_state = VideoBrowser_kVBOpened; 355cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi *ppContext = pContext; 356cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 357cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("videoBrowserCreate returned NO ERROR"); 358cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4NO_ERROR; 359cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 360cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoBrowserCreate_cleanUp: 361cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 362cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext) 363cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 364cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext->m_pDecoderCtx) 365cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 366cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pDecoder->m_pFctDestroy(pContext->m_pDecoderCtx); 367cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pDecoderCtx = M4OSA_NULL; 368cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 369cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 370cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext->m_pReaderCtx) 371cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 372cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_3gpReader->m_pFctClose(pContext->m_pReaderCtx); 373cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_3gpReader->m_pFctDestroy(pContext->m_pReaderCtx); 374cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->m_pReaderCtx = M4OSA_NULL; 375cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 376cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pContext->m_pDecoder); 377cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pContext->m_3gpReader); 378cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pContext->m_3gpData); 379cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pContext); 380cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 381cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 382cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_1("videoBrowserCreate returned 0x%x", err); 383cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 384cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 385cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 386cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/****************************************************************************** 387cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* M4OSA_ERR videoBrowserCleanUp(M4OSA_Context pContext); 388cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @brief This function frees the resources needed for browsing a 389cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* video file. 390cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param pContext (IN) : Video browser context 391cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @return M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE 392cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi******************************************************************************/ 393cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR videoBrowserCleanUp(M4OSA_Context pContext) 394cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 395cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoBrowserContext* pC = (VideoBrowserContext*)pContext; 396cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 397cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 398cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_1("videoBrowserCleanUp: entering with 0x%x", pContext); 399cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 400cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Sanity checks ---*/ 401cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserCleanUp, pContext, err, M4ERR_PARAMETER); 402cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 403cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pC->m_pDecoderCtx) 404cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 405cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pDecoder->m_pFctDestroy(pC->m_pDecoderCtx); 406cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pDecoderCtx = M4OSA_NULL ; 407cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 408cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 409cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pC->m_pReaderCtx) 410cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 411cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_3gpReader->m_pFctClose(pC->m_pReaderCtx) ; 412cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_3gpReader->m_pFctDestroy(pC->m_pReaderCtx); 413cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pReaderCtx = M4OSA_NULL; 414cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 415cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 416cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pC->m_pDecoder); 417cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pC->m_3gpReader); 418cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pC->m_3gpData); 419cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 420cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pC->m_frameColorType != VideoBrowser_kYUV420) { 421cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pC->m_outputPlane[0].pac_data); 422cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 423cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi SAFE_FREE(pC); 424cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 425cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_0("videoBrowserCleanUp returned NO ERROR"); 426cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4NO_ERROR; 427cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 428cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoBrowserCleanUp_cleanUp: 429cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 430cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_1("videoBrowserCleanUp returned 0x%x", err); 431cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 432cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 433cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/****************************************************************************** 434cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* M4OSA_ERR videoBrowserPrepareFrame( 435cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* M4OSA_Context pContext, M4OSA_UInt32* pTime); 436cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @brief This function prepares the frame. 437cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param pContext (IN) : Video browser context 438cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param pTime (IN/OUT) : Pointer on the time to reach. Updated 439cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* by this function with the reached time 440cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang* @param tolerance (IN) : We may decode an earlier frame within the tolerance. 441cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang* The time difference is specified in milliseconds. 442cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @return M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC 443cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi******************************************************************************/ 444cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung ChangM4OSA_ERR videoBrowserPrepareFrame(M4OSA_Context pContext, M4OSA_UInt32* pTime, 445cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang M4OSA_UInt32 tolerance) 446cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 447cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoBrowserContext* pC = (VideoBrowserContext*)pContext; 448cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 449cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 targetTime = 0; 450cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4_MediaTime timeMS = 0; 451cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Bool bJumpNeeded = M4OSA_FALSE; 452cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 453cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Sanity checks ---*/ 454cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserPrepareFrame, pContext, err, M4ERR_PARAMETER); 455cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserPrepareFrame, pTime, err, M4ERR_PARAMETER); 456cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 457cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi targetTime = *pTime ; 458cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 459cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Check the state, if this is the first call to this function 460cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi we move to the state "browsing" ---*/ 461cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (VideoBrowser_kVBOpened == pC->m_state) 462cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 463cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_state = VideoBrowser_kVBBrowsing; 464cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 465cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (VideoBrowser_kVBBrowsing != pC->m_state) 466cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 467cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4ERR_STATE ; 468cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi goto videoBrowserPrepareFrame_cleanUp; 469cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 470cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 4711f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang // If we jump backward or forward to a time greater than current position by 4721f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang // 85ms (~ 2 frames), we want to jump. 4731f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang if (pC->m_currentCTS == 0 || 4741f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang targetTime < pC->m_currentCTS || 4751f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang targetTime > (pC->m_currentCTS + 85)) 476cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 477cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bJumpNeeded = M4OSA_TRUE; 478cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 479cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 480cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi timeMS = (M4_MediaTime)targetTime; 481cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pC->m_pDecoder->m_pFctDecode( 482cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang pC->m_pDecoderCtx, &timeMS, bJumpNeeded, tolerance); 483cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 484cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((err != M4NO_ERROR) && (err != M4WAR_NO_MORE_AU)) 485cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 486cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 487cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 488cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 489cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = pC->m_pDecoder->m_pFctRender( 490cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pDecoderCtx, &timeMS, pC->m_outputPlane, M4OSA_TRUE); 491cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 492cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4WAR_VIDEORENDERER_NO_NEW_FRAME == err) 493cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 494b21827d1bc543e6c3fe31f0b0bc02e8ce306f43fDheeraj Sharma return err; 495cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 496cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_ERR(videoBrowserPrepareFrame, err) ; 497cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 498cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_currentCTS = (M4OSA_UInt32)timeMS; 499cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 500cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi *pTime = pC->m_currentCTS; 501cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 502cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4NO_ERROR; 503cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 504cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoBrowserPrepareFrame_cleanUp: 505cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 506cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((M4WAR_INVALID_TIME == err) || (M4WAR_NO_MORE_AU == err)) 507cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 508cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4NO_ERROR; 509cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 510cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (M4OSA_NULL != pC) 511cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 512cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_currentCTS = 0; 513cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 514cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 515cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_1("videoBrowserPrepareFrame returned 0x%x", err); 516cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 517cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 518cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 519cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/****************************************************************************** 520cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* M4OSA_ERR videoBrowserDisplayCurrentFrame(M4OSA_Context pContext); 521cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @brief This function displays the current frame. 522cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @param pContext (IN) : Video browser context 523cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi* @return M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC 524cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi******************************************************************************/ 525cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR videoBrowserDisplayCurrentFrame(M4OSA_Context pContext) 526cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 527cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoBrowserContext* pC = (VideoBrowserContext*)pContext ; 528cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR ; 529cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 530cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*--- Sanity checks ---*/ 531cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CHECK_PTR(videoBrowserDisplayCurrentFrame, pContext, err, M4ERR_PARAMETER); 532cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 533cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Request display of the frame 534cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_pfCallback((M4OSA_Context) pC, // VB context 535cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOBROWSER_DISPLAY_FRAME, // action requested 536cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4NO_ERROR, // error code 537cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Void*) &(pC->m_outputPlane[0]), // image to be displayed 538cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Void*) pC->m_pCallbackUserData); // user-provided data 539cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 540cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#ifdef DUMPTOFILE 541cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 542cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context fileContext; 543cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* fileName = "/sdcard/textBuffer_RGB565.rgb"; 544cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName, 545cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_kFileWrite | M4OSA_kFileCreate); 546cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 547cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteData(fileContext, 548cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_MemAddr8) pC->m_outputPlane[0].pac_data, 549cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pC->m_outputPlane[0].u_height*pC->m_outputPlane[0].u_width*2); 550cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 551cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteClose(fileContext); 552cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 553cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#endif 554cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 555cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_0("videoBrowserDisplayCurrentFrame returned NO ERROR") ; 556cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4NO_ERROR; 557cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 558cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoBrowserDisplayCurrentFrame_cleanUp: 559cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 560cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE2_1("videoBrowserDisplayCurrentFrame returned 0x%x", err) ; 561cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 562cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 563