f92dbec2c9415a11663486c1e05022223a8cbf7e
[platform/core/multimedia/libmm-evas-renderer.git] / src / include / mm_evas_renderer.h
1 /*
2  * libmm-evas-renderer
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: JongHyuk Choi <jhchoi.choi@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #ifndef __TIZEN_MEDIA_EVASRENDERER_H__
23 #define __TIZEN_MEDIA_EVASRENDERER_H__
24
25 /*===========================================================================================
26 |                                                                                                                                                                                       |
27 |  INCLUDE FILES                                                                                                                                                        |
28 |                                                                                                                                                                                       |
29 ========================================================================================== */
30 #include <stdio.h>
31
32 #include <Evas.h>
33 #include <Ecore.h>
34
35 #include <tbm_bufmgr.h>
36 #include <tbm_surface.h>
37 #include <tbm_surface_internal.h>
38
39 #include "mm_types.h"
40 #include "mm_debug.h"
41
42 #include <media/media_packet.h>
43 #include <media/media_format.h>
44
45 #define MAX_PACKET_NUM 20
46
47 /*===========================================================================================
48 |                                                                                                                                                                                       |
49 |  GLOBAL DEFINITIONS AND DECLARATIONS FOR MODULE                                                                                       |
50 |                                                                                                                                                                                       |
51 ========================================================================================== */
52
53 /*---------------------------------------------------------------------------
54 |    GLOBAL #defines:                                                                                                           |
55 ---------------------------------------------------------------------------*/
56
57 #ifdef __cplusplus
58 extern "C" {
59 #endif
60
61 typedef enum {
62         UPDATE_VISIBILITY,
63         UPDATE_TBM_SURF
64 } update_info;
65
66 typedef enum {
67         VISIBLE_NONE,                   /* if user dont set visibility, it will be changed to true */
68         VISIBLE_TRUE,
69         VISIBLE_FALSE
70 } visible_info;
71
72 typedef struct {
73         media_packet_h packet;
74         tbm_surface_h tbm_surf;
75         gint prev; /* keep previous index for destroying remained packets */
76 } packet_info;
77
78 typedef struct {
79         gint x;
80         gint y;
81         gint w;
82         gint h;
83 } rect_info;
84
85 typedef struct {
86         void *bo;
87         tbm_surface_h tbm_surf;
88 } flush_info;
89
90 /* evas info for evas surface type */
91 typedef struct {
92         Evas_Object *eo;
93         Ecore_Pipe *epipe;
94
95         /* video width & height */
96         gint w;
97         gint h;
98
99         /* properties */
100         gboolean update_needed; /* to update geometry information on pause state */
101         visible_info visible;
102         rect_info eo_size;
103         rect_info dst_roi;
104         gboolean use_ratio;
105         guint rotate_angle;
106         guint display_geometry_method;
107         guint flip;
108
109         tbm_surface_h tbm_surf;
110
111         /* media packet */
112         packet_info pkt_info[MAX_PACKET_NUM];
113         gint cur_idx;
114
115         /* count undestroyed media packet */
116         guint sent_buffer_cnt;
117
118         /* lock */
119         GMutex mp_lock; /* media_packet free lock */
120         GMutex idx_lock; /* to keep value of cur_idx */
121
122         /* flush buffer */
123         flush_info *flush_buffer;
124         gboolean retrieve_packet; /* after flush buffer is made by API, flush will be executed in main thread callback */
125         gboolean keep_screen;
126 } mm_evas_info;
127
128 /* create and initialize evas_info */
129 int mm_evas_renderer_create(MMHandleType *handle, Evas_Object *eo);
130 /* destroy and finalize evas_info */
131 int mm_evas_renderer_destroy(MMHandleType *handle);
132 /* set and get visibility value */
133 int mm_evas_renderer_set_visible(MMHandleType handle, bool visible);
134 int mm_evas_renderer_get_visible(MMHandleType handle, bool *visible);
135 /* set and get rotation value */
136 int mm_evas_renderer_set_rotation(MMHandleType handle, int rotate);
137 int mm_evas_renderer_get_rotation(MMHandleType handle, int *rotate);
138 /* set and get geometry value */
139 int mm_evas_renderer_set_geometry(MMHandleType handle, int mode);
140 int mm_evas_renderer_get_geometry(MMHandleType handle, int *mode);
141 /* set and get coordinate and resolution value for the destination */
142 /* it would be better not to call set_geometry for DISP_GEO_METHOD_CUSTOM_ROI */
143 int mm_evas_renderer_set_roi_area(MMHandleType handle, int x, int y, int w, int h);
144 int mm_evas_renderer_get_roi_area(MMHandleType handle, int *x, int *y, int *w, int *h);
145 /* set and get flip value */
146 int mm_evas_renderer_set_flip(MMHandleType handle, int flip);
147 int mm_evas_renderer_get_flip(MMHandleType handle, int *flip);
148 /* update all properties */
149 int mm_evas_renderer_update_param(MMHandleType handle);
150 /* call ecore_pipe_write, when packet is sent */
151 void mm_evas_renderer_write(media_packet_h packet, void *data);
152 /* if user want to retrieve all packets, this API will be called */
153 /* if keep_screen is set to true, flush buffer will be made */
154 int mm_evas_renderer_retrieve_all_packets (MMHandleType handle, bool keep_screen);
155
156 #ifdef __cplusplus
157 }
158 #endif
159 #endif                                                  /* __TIZEN_MEDIA_EVASRENDERER_H__ */