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