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
17cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
18cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <jni.h>
19cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <JNIHelp.h>
20cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <utils/Log.h>
21cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include "VideoBrowserMain.h"
22cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include "VideoBrowserInternal.h"
23cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
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 * Memory format of 'ARGB8888' in skia is RGBA, so ABGR in 32bit little-endian packed format
38cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * bitmap format is rgb565
39cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi */
40cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi//                                RED                 GREEN               BLUE            ALPHA
41cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define RGB565toSKCOLOR(c) ( (((c)&0xF800)>>8) | (((c)&0x7E0)<<5) | (((c)&0x1F)<<19) | 0xFF000000)
42cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
43cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define GetIntField(env, obj, name) env->GetIntField(obj,\
44cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargienv->GetFieldID(env->GetObjectClass(obj), name, "I"))
45cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
46cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargiextern "C" M4OSA_ERR NXPSW_FileReaderOptim_init(M4OSA_Void *lowLevel_functionPointers,
47cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        M4OSA_Void *optimized_functionPointers);
48cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
49cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/*
50cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * Video Browser execution context.
51cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * Based on request for RGB565 or RGB888, m_dst16 or m_dst32
52cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * will be initialized and used
53cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi */
54cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargitypedef struct
55cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{
56cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_Context       m_pVideoBrowser;
57cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_UInt32        m_previousTime;
58cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_Int32*        m_dst32;
59cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_Int16*        m_dst16;
60cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    unsigned int        m_width;
61cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    unsigned int        m_height;
62cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_Bool          m_bRender;
63cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} ThumbnailContext;
64cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
65cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/**
66cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ************************************************************************
67cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @brief    Interface to retrieve the thumbnail pixels
68cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param    pContext   (IN)    Thumbnail Context.
69cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param    width      (IN)    Width of thumbnail
70cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param    height     (IN)    Height of thumbnail
71cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param    pTimeMS    (IN/OUT)Time stamp at which thumbnail is retrieved.
72cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ************************************************************************
73cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi*/
74cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR ThumbnailGetPixels(const M4OSA_Context pContext,
75cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                             M4OSA_Int32* pixelArray,
76cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                             M4OSA_UInt32 width, M4OSA_UInt32 height,
77cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang                             M4OSA_UInt32* pTimeMS, M4OSA_UInt32 tolerance);
78cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
79cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
80cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/**
81cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ************************************************************************
82cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @brief    Video browser callback, called when a frame must be displayed
83cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param    pInstance          (IN) Thumbnail context.
84cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param    notificationID     (IN) Id of the callback which generated the error
85cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param    errCode            (IN) Error code from the Core
86cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param    pCbData            (IN) pointer to data associated wit the callback.
87cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @param    pCbUserData        (IN) pointer to application user data passed in init.
88cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * @note     This callback mechanism is used to request display of an image
89cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ************************************************************************
90cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi*/
91cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_Void VBcallback(  M4OSA_Context  pInstance,
92cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                        VideoBrowser_Notification notificationID,
93cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                        M4OSA_ERR errCode, M4OSA_Void* pCbData,
94cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                        M4OSA_Void* pCallbackUserData)
95cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{
96cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_UInt32 i, j;
97cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_ERR err;
98cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
99cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_TRACE3_0("inside VBcallback");
100cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4VIFI_ImagePlane* pPlane=NULL;
101cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_UInt16* src=NULL;
102cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    ThumbnailContext* pC = NULL;
103cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
104cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    CHECK_PTR(VBcallback, pCbData, err, M4ERR_PARAMETER);
105cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    CHECK_PTR(VBcallback, pInstance,err, M4ERR_PARAMETER);
106cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
107cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    pC = (ThumbnailContext*)pCallbackUserData ;
108cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    CHECK_PTR(VBcallback, pC->m_pVideoBrowser, err, M4ERR_PARAMETER);
109cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
110cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    pPlane = (M4VIFI_ImagePlane*)pCbData;
111cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    src = (M4OSA_UInt16*)pPlane->pac_data;
112cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
113cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    if (pC->m_dst32 != NULL)
114cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    {
115cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        M4OSA_Int32* dst = pC->m_dst32;
116cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
117cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        for (j = 0; j < pPlane->u_height; j++)
118cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        {
119cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            for (i = 0; i < pPlane->u_width; i++)
120cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            {
121cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                dst[i] = RGB565toSKCOLOR(src[i]);
122cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            }
123cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            for (i = pPlane->u_width; i < pC->m_width; i++)
124cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            {
125cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                dst[i] = 0;
126cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            }
127cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            src = (M4OSA_UInt16*)((M4OSA_UInt8*)src + pPlane->u_stride);
128cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            dst += pC->m_width;
129cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        }
130cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    }
131cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    else if (pC->m_dst16 != NULL)
132cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    {
133cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        M4OSA_Int16* dst = pC->m_dst16;
134cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
135cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        for (j = 0; j < pPlane->u_height; j++)
136cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        {
1373feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu            memcpy((void * )dst, (void * )src, pPlane->u_stride);
138cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            for (i = pPlane->u_width; i < pC->m_width; i++)
139cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            {
140cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                dst[i] = 0;
141cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            }
142cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            src = (M4OSA_UInt16*)((M4OSA_UInt8*)src + pPlane->u_stride);
143cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            dst += pC->m_width;
144cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        }
145cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    }
146cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    else
147cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    {
148cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        CHECK_PTR(VBcallback, NULL, err, M4ERR_PARAMETER);
149cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    }
150cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
151cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiVBcallback_cleanUp:
152cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
153cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    return;
154cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi}
155cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
156cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR ThumbnailOpen(M4OSA_Context *pPContext,
157cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                  const M4OSA_Char *pString,
158cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                  M4OSA_Bool bRender)
159cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{
160cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
161cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_ERR err;
162cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    ThumbnailContext *pContext = M4OSA_NULL;
163cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    VideoBrowser_VideoColorType vbColorType;
164cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
165cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    CHECK_PTR(ThumbnailOpen, pString, err, M4ERR_BAD_CONTEXT);
166cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
167cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    /*--- Create context ---*/
168c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu    pContext = (ThumbnailContext*)M4OSA_32bitAlignedMalloc(sizeof(ThumbnailContext), VIDEOBROWSER,
169cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        (M4OSA_Char*)"Thumbnail context") ;
170cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_TRACE3_1("context value is = %d",pContext);
171cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    CHECK_PTR(ThumbnailOpen, pContext, err, M4ERR_ALLOC);
172cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
1733feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu    memset((void *)pContext, 0,sizeof(ThumbnailContext));
174cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
175cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_FileReadPointer optFP;
176cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_FileReadPointer llFP;
177cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
178cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    NXPSW_FileReaderOptim_init(&llFP, &optFP);
179cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_TRACE1_2("ThumbnailOpen: entering videoBrowserCreate with 0x%x %s",
180cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        &pContext->m_pVideoBrowser, pString) ;
181cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
182cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    pContext->m_bRender = bRender;
183cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    if (bRender == M4OSA_TRUE) {
184cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        //Open is called for rendering the frame.
185cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        //So set YUV420 as the output color format.
186cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        vbColorType = VideoBrowser_kYUV420;
187cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    } else {
188cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        //Open is called for thumbnail Extraction
189cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        //So set BGR565 as the output.
190cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        vbColorType = VideoBrowser_kGB565;
191cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    }
192cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
193cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    err = videoBrowserCreate(&pContext->m_pVideoBrowser, (M4OSA_Char*)pString,
194cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        VideoBrowser_kVBNormalBliting, &optFP, VBcallback, pContext, vbColorType);
195cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
196cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_TRACE1_1("err value is = 0x%x",err);
197cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    CHECK_ERR(ThumbnailOpen, err);
198cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    CHECK_PTR(ThumbnailOpen, pContext->m_pVideoBrowser, err, M4ERR_ALLOC);
199cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
200cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    *pPContext = pContext;
201cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_TRACE1_1("context value is = %d",*pPContext);
202cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
203cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    return M4NO_ERROR;
204cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
205cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiThumbnailOpen_cleanUp:
206cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
207cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_TRACE1_0("i am inside cleanUP");
208cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    if (M4OSA_NULL != pContext)
209cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    {
210cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        if (M4OSA_NULL != pContext->m_pVideoBrowser)
211cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        {
212cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            videoBrowserCleanUp(pContext->m_pVideoBrowser) ;
213cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        }
214c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu        free(pContext) ;
215cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    }
216cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    return err;
217cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi}
218cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
219cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR ThumbnailGetPixels(const M4OSA_Context pContext,
220cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                             M4OSA_Int32* pixelArray,
221cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                             M4OSA_UInt32 width, M4OSA_UInt32 height,
222cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang                             M4OSA_UInt32* pTimeMS, M4OSA_UInt32 tolerance)
223cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{
224cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_ERR err;
225cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
226cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    ThumbnailContext* pC = (ThumbnailContext*)pContext;
227cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
228cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    if ((pC->m_width != width) || (pC->m_height != height))
229cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    {
230cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        err = videoBrowserSetWindow(pC->m_pVideoBrowser, pixelArray,
231cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                                      0, 0, width, height);
232cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        CHECK_ERR(ThumbnailGetPixels, err);
233cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        pC->m_width  = width;
234cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        pC->m_height = height;
235cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    }
236cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
237cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    // Alter the pTimeMS to a valid value at which a frame is found
238cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    // m_currentCTS has the actual frame time stamp just ahead of the
239cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    // pTimeMS supplied.
240cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    if ((((VideoBrowserContext*)pC->m_pVideoBrowser)->m_currentCTS != 0) &&
241cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        (*pTimeMS >= pC->m_previousTime) &&
242cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        (*pTimeMS < ((VideoBrowserContext*)pC->m_pVideoBrowser)->m_currentCTS))
243cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    {
244cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        pC->m_previousTime = *pTimeMS;
245cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        *pTimeMS = ((VideoBrowserContext*)pC->m_pVideoBrowser)->m_currentCTS;
246cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    }
247cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    else
248cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    {
249cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        pC->m_previousTime = *pTimeMS;
250cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    }
251cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
252cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang    err = videoBrowserPrepareFrame(pC->m_pVideoBrowser, pTimeMS, tolerance);
253cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    CHECK_ERR(ThumbnailGetPixels, err);
254cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
255cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    if (pC->m_bRender != M4OSA_TRUE) {
256cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        err = videoBrowserDisplayCurrentFrame(pC->m_pVideoBrowser);
257cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        CHECK_ERR(ThumbnailGetPixels, err);
258cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    }
259cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
260cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiThumbnailGetPixels_cleanUp:
261cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
262cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    return err;
263cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi}
264cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
265cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR ThumbnailGetPixels32(const M4OSA_Context pContext,
266cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                         M4OSA_Int32* pixelArray, M4OSA_UInt32 width,
267cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang                         M4OSA_UInt32 height, M4OSA_UInt32* timeMS,
268cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang                         M4OSA_UInt32 tolerance)
269cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{
270cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
271cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
272cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
273cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    ThumbnailContext* pC = (ThumbnailContext*)pContext;
274cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
275cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    CHECK_PTR(ThumbnailGetPixels32, pC->m_pVideoBrowser, err, M4ERR_ALLOC) ;
276cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    CHECK_PTR(ThumbnailGetPixels32, pixelArray, err, M4ERR_ALLOC) ;
277cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
278cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    pC->m_dst16 = NULL;
279cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    pC->m_dst32 = pixelArray;
280cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
281cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang    err = ThumbnailGetPixels(pContext, pixelArray, width, height, timeMS, tolerance);
282cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
283cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiThumbnailGetPixels32_cleanUp:
284cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
285cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    return err;
286cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi}
287cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
288cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR ThumbnailGetPixels16(const M4OSA_Context pContext,
289cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi                         M4OSA_Int16* pixelArray, M4OSA_UInt32 width,
290cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang                         M4OSA_UInt32 height, M4OSA_UInt32* timeMS,
291cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang                         M4OSA_UInt32 tolerance)
292cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{
293cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
294cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
295cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    ThumbnailContext* pC = (ThumbnailContext*)pContext;
296cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
297cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    CHECK_PTR(ThumbnailGetPixels16, pC->m_pVideoBrowser, err, M4ERR_ALLOC);
298cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    CHECK_PTR(ThumbnailGetPixels16, pixelArray, err, M4ERR_ALLOC);
299cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
300cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    pC->m_dst16 = pixelArray;
301cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    pC->m_dst32 = NULL;
302cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
303cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang    err = ThumbnailGetPixels(pContext, (M4OSA_Int32*)pixelArray, width, height,
304cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang            timeMS, tolerance);
305cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
306cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiThumbnailGetPixels16_cleanUp:
307cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
308cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    return err;
309cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi}
310cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
311cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
312cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargivoid ThumbnailClose(const M4OSA_Context pContext)
313cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{
314cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    M4OSA_ERR err;
315cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
316cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    ThumbnailContext* pC = (ThumbnailContext*)pContext;
317cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
318cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    CHECK_PTR(ThumbnailClose, pC, err, M4ERR_ALLOC);
319cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
320cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    if (M4OSA_NULL != pC)
321cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    {
322cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        if (M4OSA_NULL != pC->m_pVideoBrowser)
323cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        {
324cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi            videoBrowserCleanUp(pC->m_pVideoBrowser);
325cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi        }
326c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu        free(pC);
327cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    }
328cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
329cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiThumbnailClose_cleanUp:
330cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
331cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi    return;
332cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi}
333cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi
334