2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #ifndef __TIZEN_MEDIA_STREAMER_GST_H__
18 #define __TIZEN_MEDIA_STREAMER_GST_H__
21 #include "media_streamer_priv.h"
27 #define DOT_FILE_NAME "streamer"
29 #define MEDIA_STREAMER_PIPELINE_NAME "media-streamer-pipeline"
30 #define MEDIA_STREAMER_SRC_BIN_NAME "streamer_src"
31 #define MEDIA_STREAMER_SINK_BIN_NAME "streamer_sink"
32 #define MEDIA_STREAMER_TRANSFORM_BIN_NAME "streamer_transform"
34 #define MEDIA_STREAMER_PAYLOADER_KLASS "Codec/Payloader/Network/RTP"
35 #define MEDIA_STREAMER_RTP_KLASS "Filter/Network/RTP"
37 #define MEDIA_STREAMER_DEPAYLOADER_KLASS "Depayloader/Network/RTP"
38 #define MEDIA_STREAMER_BIN_KLASS "Generic/Bin"
39 #define MEDIA_STREAMER_QUEUE_KLASS "Generic"
40 #define MEDIA_STREAMER_OVERLAY_KLASS "Filter/Editor"
41 #define MEDIA_STREAMER_PARSER_KLASS "Codec/Parser"
42 #define MEDIA_STREAMER_CONVERTER_KLASS "Filter/Converter"
43 #define MEDIA_STREAMER_DECODER_KLASS "Codec/Decoder"
44 #define MEDIA_STREAMER_SINK_KLASS "Sink"
45 #define MEDIA_STREAMER_STRICT "_strict_"
48 * @brief Generates dot files for GStreamer pipeline.
50 void ms_generate_dots(GstElement *bin, gchar *name_tag);
53 * @brief Creates GstElement by plugin name.
55 GstElement *ms_element_create(const char *plugin_name, const char *name);
58 * @brief Creates GstBin name for adaptive streaming.
60 GstElement *ms_adaptive_element_create(void);
63 * @brief Creates GstElement from specified node_plug_s structure.
65 GstElement *ms_node_element_create(node_plug_s *plug_info, media_streamer_node_type_e type);
68 * @brief Creates rtp container GstElement.
70 GstElement *ms_rtp_element_create(void);
73 * @brief Unlink all pads into GstElement.
75 gboolean ms_element_unlink(GstElement *element);
78 * @brief Remove GstElement from bin.
80 gboolean ms_bin_remove_element(GstElement *element);
83 * @brief Add GstElement into bin if not added before and refs it.
85 gboolean ms_bin_add_element(GstElement *bin, GstElement *element, gboolean do_ref);
88 * @brief Gets pad type of element pad.
90 const gchar *ms_get_pad_type(GstPad *element_pad);
93 * @brief Creates decodebin to link with sink part.
95 GstElement *ms_decodebin_create(media_streamer_s *ms_streamer, char *name);
98 * @brief Creates next element by klass or by properties and links with the previous one.
100 GstElement *ms_combine_next_element(GstElement *previous_element, GstPad *prev_elem_src_pad, GstElement *bin_to_find_in, media_streamer_node_type_e node_type);
103 * @brief Locks gst_element being contained in GValue data.
105 gboolean ms_element_lock_state(const GValue *item, GValue *ret, gpointer user_data);
108 * @brief Unlocks gst_element being contained in GValue data.
110 gboolean ms_element_unlock_state(const GValue *item, GValue *ret, gpointer user_data);
113 * @brief Creates pipeline, bus and src/sink/transform bins.
115 int ms_pipeline_create(media_streamer_s *ms_streamer);
118 * @brief Prepares Media Streamer pipeline and autoplug nodes if needed.
121 int ms_pipeline_prepare(media_streamer_s *ms_streamer);
124 * @brief Unprepares Media Streamer pipeline and unlink nodes
125 * which user didn't link before.
127 int ms_pipeline_unprepare(media_streamer_s *ms_streamer);
130 * @brief Gets pipeline state of media streamer.
132 void ms_pipeline_get_state(media_streamer_s *ms_streamer);
135 * @brief Sets GstElement into state.
137 int ms_element_set_state(GstElement *element, GstState state);
140 * @brief Iterates pas inside gst element.
142 int ms_element_pad_names(GstElement *element, GstPadDirection pad_type, char ***pad_name_array, int *pads_count);
145 * @brief Gets mediaformat from the GstElement's pad by pad name.
147 int ms_element_get_pad_fmt(GstElement *element, const char *pad_name, media_format_h *fmt);
150 * @brief Sets mediaformat to the GstElement's pad.
152 int ms_element_set_fmt(GstElement *element, const char *pad_name, media_format_h fmt);
155 * @brief Creates GstCap's from mediaformat.
157 GstCaps *ms_create_caps_from_fmt(media_format_h fmt);
160 * @brief Seeks GstElement to according time value.
162 gboolean ms_gst_seek(GstElement *element, gint64 g_time, GstSeekFlags seek_flag);
165 * @brief Push the media packet buffer to the source element.
167 int ms_element_push_packet(GstElement *src_element, media_packet_h packet);
170 * @brief Pull the media packet buffer from sink element.
172 int ms_element_pull_packet(GstElement *sink_element, media_packet_h *packet);
175 * @brief Finds type of media
177 int ms_find_type(media_streamer_s *ms_streamer, GstElement *element);
179 GstElement *ms_find_element_in_bin_by_type(GstElement *bin, node_info_s *node_klass_type);
181 void ms_rtpbin_pad_added_cb(GstElement *element, GstPad *new_pad, gpointer user_data);
183 void ms_demux_pad_added_cb(GstElement *element, GstPad *new_pad, gpointer user_data);
185 void ms_hlsdemux_pad_added_cb(GstElement *element, GstPad *new_pad, gpointer user_data);
187 void ms_demux_nomore_pads_cb(GstElement *element, gpointer user_data);
194 #endif /* __TIZEN_MEDIA_STREAMER_GST_H__ */