1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17
18#ifndef VIDEO_BROWSER_MAIN_H
19#define VIDEO_BROWSER_MAIN_H
20
21/**
22 ************************************************************************
23 * @file    VideoBrowserMain.h
24 * @brief   Video browser Interface functions
25 ************************************************************************
26*/
27
28#define VIDEOBROWSER    0x423
29
30#include "M4OSA_Memory.h"
31#include "M4OSA_CharStar.h"
32#include "M4OSA_OptionID.h"
33#include "M4OSA_Debug.h"
34#include "M4VIFI_FiltersAPI.h"
35#include "M4OSA_FileReader.h"
36
37
38/**
39 ************************************************************************
40 * @brief    Error codes definition.
41 * @note    These value are the Browser engine specific error codes.
42 ************************************************************************
43*/
44#define M4ERR_VB_MEDIATYPE_NOT_SUPPORTED    M4OSA_ERR_CREATE(M4_ERR, VIDEOBROWSER, 0x01)
45#define M4ERR_VB_NO_VIDEO                   M4OSA_ERR_CREATE(M4_ERR, VIDEOBROWSER, 0x02)
46
47#ifdef __cplusplus
48extern "C" {
49#endif
50
51/*
52 *  Video Browser draw mode, extension for angle based bliting can be done
53 */
54typedef enum
55{
56    VideoBrowser_kVBNormalBliting
57} VideoBrowser_videoBrowerDrawMode;
58
59
60/*--- Video Browser output frame color type ---*/
61typedef enum
62{
63    VideoBrowser_kYUV420,
64    VideoBrowser_kGB565
65} VideoBrowser_VideoColorType;
66
67/**
68 ************************************************************************
69 * enumeration  VideoBrowser_Notification
70 * @brief       Video Browser notification type.
71 * @note        This callback mechanism must be used to wait the completion of an asynchronous
72 * operation, before calling another API function.
73 ************************************************************************
74*/
75typedef enum
76{
77    /**
78     * A frame is ready to be displayed, it should be displayed in the callback function
79     * pCbData type = M4VIFI_ImagePlane*
80     */
81    VIDEOBROWSER_DISPLAY_FRAME            = 0x00000001,
82    VIDEOBROWSER_NOTIFICATION_NONE        = 0xffffffff
83}VideoBrowser_Notification;
84
85
86/**
87 ************************************************************************
88 * @brief    videoBrowser_Callback type definition
89 * @param    pInstance          (IN) Video Browser context.
90 * @param    notificationID     (IN) Id of the callback which generated the error
91 * @param    errCode            (IN) Error code from the core
92 * @param    pCbData            (IN) pointer to data associated wit the callback.
93 * @param    pCbUserData        (IN) pointer to application user data passed in init.
94 * @note    This callback mechanism is used to request display of an image
95 ************************************************************************
96*/
97typedef M4OSA_Void (*videoBrowser_Callback) (M4OSA_Context pInstance,
98                                        VideoBrowser_Notification notificationID,
99                                        M4OSA_ERR errCode,
100                                        M4OSA_Void* pCbData,
101                                        M4OSA_Void* pCallbackUserData);
102
103
104/******************************************************************************
105* @brief   This function allocates the resources needed for browsing a video file.
106* @param   ppContext     (OUT): Pointer on a context filled by this function.
107* @param   pURL          (IN) : Path of File to browse
108* @param   DrawMode      (IN) : Indicate which method is used to draw (Direct draw etc...)
109* @param   pfCallback    (IN) : Callback function to be called when a frame must be displayed
110* @param   pCallbackData (IN)  : User defined data that will be passed as parameter of the callback
111* @param   clrType       (IN) : Required color type.
112* @return  M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC
113******************************************************************************/
114M4OSA_ERR videoBrowserCreate(M4OSA_Context* ppContext, M4OSA_Char* pURL,
115                                        M4OSA_UInt32 DrawMode,
116                                        M4OSA_FileReadPointer* ptrF,
117                                        videoBrowser_Callback pfCallback,
118                                        M4OSA_Void* pCallbackData,
119                                        VideoBrowser_VideoColorType clrType);
120
121/******************************************************************************
122* @brief        This function frees the resources needed for browsing a video file.
123* @param        pContext     (IN) : Video browser context
124* @return       M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE
125******************************************************************************/
126M4OSA_ERR videoBrowserCleanUp(M4OSA_Context pContext) ;
127
128
129/******************************************************************************
130* @brief        This function allocates the resources needed for browsing a video file.
131* @param        pContext  (IN)      : Video browser context
132* @param        pTime     (IN/OUT)  : Pointer on the time to reach. Updated by
133*                                     this function with the reached time
134* @return       M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC
135******************************************************************************/
136M4OSA_ERR videoBrowserPrepareFrame(M4OSA_Context pContext, M4OSA_UInt32* pTime,
137        M4OSA_UInt32 tolerance);
138
139/******************************************************************************
140* @brief        This function sets the size and the position of the display.
141* @param        pContext     (IN) : Video Browser context
142* @param        pixelArray   (IN) : Array to hold the video frame.
143* @param        x            (IN) : Horizontal position of the top left corner
144* @param        y            (IN) : Vertical position of the top left corner
145* @param        dx           (IN) : Width of the display window
146* @param        dy           (IN) : Height of the video window
147* @return       M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC
148******************************************************************************/
149M4OSA_ERR videoBrowserSetWindow(M4OSA_Context pContext, M4OSA_Int32* pixelArray,
150                                M4OSA_UInt32 x, M4OSA_UInt32 y,
151                                M4OSA_UInt32 dx, M4OSA_UInt32 dy);
152
153/******************************************************************************
154* @brief        This function displays the current frame.
155* @param        pContext     (IN) : Video browser context
156* @return       M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC
157******************************************************************************/
158M4OSA_ERR videoBrowserDisplayCurrentFrame(M4OSA_Context pContext);
159
160#ifdef __cplusplus
161}
162#endif
163
164#endif /* VIDEO_BROWSER_MAIN_H */
165