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