[0.2.222] Add concat element for gapless playback
[platform/core/multimedia/libmm-player.git] / src / include / mm_player_gst.h
1 /*
2  * libmm-player
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: JongHyuk Choi <jhchoi.choi@samsung.com>, heechul jeon <heechul.jeon@samsung.co>,
7  * YoungHwan An <younghwan_.an@samsung.com>, Eunhae Choi <eunhae1.choi@samsung.com>
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  * http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  */
22
23 #ifndef __MM_PLAYER_GST_H__
24 #define __MM_PLAYER_GST_H__
25
26 /*=======================================================================================
27 | INCLUDE FILES                                                                         |
28 ========================================================================================*/
29 #include <mm_types.h>
30 #include "mm_player_priv.h"
31
32 #ifdef __cplusplus
33 extern "C"
34 {
35 #endif
36
37 /* get caps info */
38 #define MMPLAYER_GST_GET_CAPS_INFO(x_caps, x_str, x_name, x_ret) \
39         do { \
40                 x_ret = TRUE; \
41                 if (!(x_caps)) { \
42                         LOGE("input caps is NULL"); \
43                         x_ret = FALSE; \
44                         break; \
45                 } \
46                 x_str = gst_caps_get_structure(x_caps, 0); \
47                 if (x_str) \
48                         x_name = gst_structure_get_name(x_str); \
49                 if (!(x_str) || !(x_name)) { \
50                         LOGE("failed to get caps info"); \
51                         x_ret = FALSE; \
52                 } \
53         } while (0)
54
55 #define MMPLAYER_GST_GET_CAPS_INFO_FROM_PAD(x_pad, x_caps, x_str, x_name, x_ret) \
56         do { \
57                 x_caps = gst_pad_get_current_caps(x_pad); \
58                 if (!(x_caps)) \
59                         x_caps = gst_pad_query_caps(x_pad, NULL); \
60                 MMPLAYER_GST_GET_CAPS_INFO(x_caps, x_str, x_name, x_ret); \
61         } while (0)
62
63 /*=======================================================================================
64 | GLOBAL FUNCTION PROTOTYPES                                                            |
65 ========================================================================================*/
66
67 int _mmplayer_gst_set_state(mmplayer_t *player, GstElement *element,  GstState state, gboolean async, gint timeout);
68
69 int _mmplayer_gst_start(mmplayer_t *player);
70 int _mmplayer_gst_stop(mmplayer_t *player);
71 int _mmplayer_gst_pause(mmplayer_t *player, gboolean async);
72 int _mmplayer_gst_resume(mmplayer_t *player, gboolean async);
73 gboolean _mmplayer_gst_send_event_to_sink(mmplayer_t *player, GstEvent *event);
74 gboolean _mmplayer_gst_seek(mmplayer_t *player, GstElement *element, gdouble rate,
75                         GstFormat format, GstSeekFlags flags, GstSeekType cur_type,
76                         gint64 cur, GstSeekType stop_type, gint64 stop);
77 int _mmplayer_gst_set_position(mmplayer_t *player, gint64 position, gboolean internal_called);
78 int _mmplayer_gst_get_position(mmplayer_t *player, gint64 *position);
79 int _mmplayer_gst_get_buffer_position(mmplayer_t *player, int *start_pos, int *end_pos);
80 GstElement *_mmplayer_gst_create_source(mmplayer_t *player);
81 int _mmplayer_gst_build_es_pipeline(mmplayer_t *player);
82 int _mmplayer_gst_build_pipeline(mmplayer_t *player);
83 int _mmplayer_gst_build_pipeline_with_src(mmplayer_t *player);
84 int _mmplayer_gst_add_bus_watch(mmplayer_t *player);
85 void _mmplayer_activate_next_source(mmplayer_t *player, GstState target);
86
87 #ifdef __cplusplus
88 }
89 #endif
90
91 #endif /* __MM_PLAYER_GST_H__ */