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_H__
18 #define __TIZEN_MEDIA_STREAMER_H__
22 #include <media_format.h>
23 #include <media_packet.h>
30 * @file media_streamer.h
31 * @brief This file contains the capi media streamer API.
35 * @addtogroup CAPI_MEDIA_STREAMER_MODULE
40 * @brief Media Streamer handle type.
44 typedef void *media_streamer_h;
47 * @brief Media Streamer node handle type.
51 typedef void *media_streamer_node_h;
54 * @brief Enumeration for media streamer node type.
59 MEDIA_STREAMER_NODE_TYPE_NONE, /**< Not defined type */
60 MEDIA_STREAMER_NODE_TYPE_SRC, /**< Source node type. Not available for media_streamer_node_create(). Use media_streamer_node_create_src() */
61 MEDIA_STREAMER_NODE_TYPE_SINK, /**< Sink node type. Not available for media_streamer_node_create(). Use media_streamer_node_create_sink() */
62 MEDIA_STREAMER_NODE_TYPE_VIDEO_ENCODER, /**< Video encoder node type */
63 MEDIA_STREAMER_NODE_TYPE_VIDEO_DECODER, /**< Video decoder node type */
64 MEDIA_STREAMER_NODE_TYPE_AUDIO_ENCODER, /**< Audio encoder node type */
65 MEDIA_STREAMER_NODE_TYPE_AUDIO_DECODER, /**< Audio decoder node type */
66 MEDIA_STREAMER_NODE_TYPE_VIDEO_CONVERTER, /**< Video converter node type */
67 MEDIA_STREAMER_NODE_TYPE_AUDIO_CONVERTER, /**< Audio converter node type */
68 MEDIA_STREAMER_NODE_TYPE_AUDIO_RESAMPLE, /**< Audio resample node type */
69 MEDIA_STREAMER_NODE_TYPE_VIDEO_PAY, /**< RTP video payloader */
70 MEDIA_STREAMER_NODE_TYPE_AUDIO_PAY, /**< RTP audio payloader */
71 MEDIA_STREAMER_NODE_TYPE_VIDEO_DEPAY, /**< RTP video depayloader */
72 MEDIA_STREAMER_NODE_TYPE_AUDIO_DEPAY, /**< RTP audio depayloader */
73 MEDIA_STREAMER_NODE_TYPE_VIDEO_RATE, /**< Rate node type */
74 MEDIA_STREAMER_NODE_TYPE_VIDEO_SCALE, /**< Scale node type */
75 MEDIA_STREAMER_NODE_TYPE_TEXT_OVERLAY, /**< Overlay node type */
76 MEDIA_STREAMER_NODE_TYPE_PARSER, /**< Parser node type */
77 MEDIA_STREAMER_NODE_TYPE_FILTER, /**< Filter node type, to limit formats of data */
78 MEDIA_STREAMER_NODE_TYPE_TEE, /**< Tee node type, splits data to multiple path */
79 MEDIA_STREAMER_NODE_TYPE_QUEUE, /**< Queue node type */
80 MEDIA_STREAMER_NODE_TYPE_MQUEUE, /**< Multiple data queue node type */
81 MEDIA_STREAMER_NODE_TYPE_MUXER, /**< Muxer node type */
82 MEDIA_STREAMER_NODE_TYPE_DEMUXER, /**< Demuxer node type */
83 MEDIA_STREAMER_NODE_TYPE_RTP, /**< RTP component to send and receive data */
84 MEDIA_STREAMER_NODE_TYPE_INPUT_SELECTOR, /**< N-to-1 input stream selector */
85 MEDIA_STREAMER_NODE_TYPE_OUTPUT_SELECTOR, /**< 1-to-N output stream selector */
86 MEDIA_STREAMER_NODE_TYPE_INTERLEAVE, /**< Folds many mono channel into one interleaved audio stream */
87 MEDIA_STREAMER_NODE_TYPE_DEINTERLEAVE, /**< Splits multi channel audio into many mono audio */
88 MEDIA_STREAMER_NODE_TYPE_WEBRTC /**< WebRTC component to send and receive data */
89 } media_streamer_node_type_e;
92 * @brief Enumeration for media streamer source node type.
97 MEDIA_STREAMER_NODE_SRC_TYPE_NONE, /**< Not defined source type */
98 MEDIA_STREAMER_NODE_SRC_TYPE_FILE, /**< Local file source type */
99 MEDIA_STREAMER_NODE_SRC_TYPE_HTTP, /**< HTTP source type, Network internet feature is required */
100 MEDIA_STREAMER_NODE_SRC_TYPE_RTSP, /**< RTSP source type, Network internet feature is required */
101 MEDIA_STREAMER_NODE_SRC_TYPE_CAMERA, /**< Camera source type, Camera feature is required */
102 MEDIA_STREAMER_NODE_SRC_TYPE_AUDIO_CAPTURE, /**< Audio capture source type, Microphone feature is required */
103 MEDIA_STREAMER_NODE_SRC_TYPE_VIDEO_CAPTURE, /**< Video capture source type, Camera feature is required */
104 MEDIA_STREAMER_NODE_SRC_TYPE_AUDIO_TEST, /**< Audio test source type */
105 MEDIA_STREAMER_NODE_SRC_TYPE_VIDEO_TEST, /**< Video test source type */
106 MEDIA_STREAMER_NODE_SRC_TYPE_CUSTOM, /**< Custom source type */
107 MEDIA_STREAMER_NODE_SRC_TYPE_ADAPTIVE /**< Adaptive source type, Network internet feature is required */
108 } media_streamer_node_src_type_e;
111 * @brief Enumeration for media streamer sink node type.
116 MEDIA_STREAMER_NODE_SINK_TYPE_NONE, /**< Not defined sink type */
117 MEDIA_STREAMER_NODE_SINK_TYPE_FILE, /**< Local file sink type */
118 MEDIA_STREAMER_NODE_SINK_TYPE_RTSP, /**< RTSP sink type, Network internet feature is required */
119 MEDIA_STREAMER_NODE_SINK_TYPE_HTTP, /**< HTTP sink type, Network internet feature is required */
120 MEDIA_STREAMER_NODE_SINK_TYPE_AUDIO, /**< Audio sink type */
121 MEDIA_STREAMER_NODE_SINK_TYPE_OVERLAY,/**< Overlay sink type */
122 MEDIA_STREAMER_NODE_SINK_TYPE_FAKE, /**< Fake sink type */
123 MEDIA_STREAMER_NODE_SINK_TYPE_CUSTOM, /**< Custom sink type */
124 MEDIA_STREAMER_NODE_SINK_TYPE_ADAPTIVE /**< Adaptive sink type to generate fragmented files */
125 } media_streamer_node_sink_type_e;
128 * @brief Enumeration for media streamer state.
133 MEDIA_STREAMER_STATE_NONE, /**< Streamer is not created */
134 MEDIA_STREAMER_STATE_IDLE, /**< Streamer is created but not prepared */
135 MEDIA_STREAMER_STATE_READY, /**< Streamer is ready to play */
136 MEDIA_STREAMER_STATE_PLAYING, /**< Streamer is playing */
137 MEDIA_STREAMER_STATE_PAUSED, /**< Streamer is paused */
138 MEDIA_STREAMER_STATE_SEEKING /**< Seek is under operation */
139 } media_streamer_state_e;
142 * @brief Enumeration for media streamer error.
147 MEDIA_STREAMER_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful */
148 MEDIA_STREAMER_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */
149 MEDIA_STREAMER_ERROR_INVALID_OPERATION = TIZEN_ERROR_INVALID_OPERATION, /**< Invalid operation */
150 MEDIA_STREAMER_ERROR_FILE_NO_SPACE_ON_DEVICE = TIZEN_ERROR_FILE_NO_SPACE_ON_DEVICE, /**< No space left on the device */
151 MEDIA_STREAMER_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED, /**< The feature is not supported */
152 MEDIA_STREAMER_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permission denied */
153 MEDIA_STREAMER_ERROR_INVALID_STATE = TIZEN_ERROR_MEDIA_STREAMER | 0x01, /**< Invalid state */
154 MEDIA_STREAMER_ERROR_CONNECTION_FAILED = TIZEN_ERROR_MEDIA_STREAMER | 0x02, /**< Connection failed */
155 MEDIA_STREAMER_ERROR_RESOURCE_CONFLICT = TIZEN_ERROR_MEDIA_STREAMER | 0x03, /**< Resource conflict */
156 MEDIA_STREAMER_ERROR_SEEK_FAILED = TIZEN_ERROR_MEDIA_STREAMER | 0x04, /**< Seek operation failure */
157 } media_streamer_error_e;
160 * @brief Enumeration for media streamer buffer status of custom source.
165 MEDIA_STREAMER_CUSTOM_BUFFER_UNDERRUN, /**< Buffer underrun of custom source */
166 MEDIA_STREAMER_CUSTOM_BUFFER_OVERFLOW, /**< Buffer overflow of custom source */
167 } media_streamer_custom_buffer_status_e;
170 * @brief Enumeration for media streamer's interruption type.
175 MEDIA_STREAMER_INTERRUPTED_BY_RESOURCE_CONFLICT, /**< Interrupted by a resource conflict */
176 MEDIA_STREAMER_INTERRUPTED_BY_SECURITY, /**< Interrupted by a security policy */
177 } media_streamer_interrupted_code_e;
180 * @brief Definition for camera-id parameter of source node.
181 * @details Index number of camera to activate.
182 * Data type is integer and default value is 0.
184 * @see media_streamer_node_get_params()
186 #define MEDIA_STREAMER_PARAM_CAMERA_ID "camera-id"
189 * @brief Definition for capture-width parameter of source node.
190 * @details Width for camera size to capture.
191 * Data type is integer and default value is 1600.
193 * @see media_streamer_node_get_params()
195 #define MEDIA_STREAMER_PARAM_CAPTURE_WIDTH "capture-width"
198 * @brief Definition for capture-height parameter of source node.
199 * @details Height for camera size to capture.
200 * Data type is integer and default value is 1200.
202 * @see media_streamer_node_get_params()
204 #define MEDIA_STREAMER_PARAM_CAPTURE_HEIGHT "capture-height"
207 * @brief Definition for is-live parameter of source node.
208 * @details Whether to act as a live source.
209 * Data type is boolean and default value is false.
211 * @see media_streamer_node_get_params()
213 #define MEDIA_STREAMER_PARAM_IS_LIVE_STREAM "is-live"
216 * @brief Definition for uri parameter of source node.
217 * @details URI to read from
218 * Data type is string.
220 * @see media_streamer_node_get_params()
222 #define MEDIA_STREAMER_PARAM_URI "uri"
225 * @brief Definition for user-agent parameter of source node.
226 * @details Value of the User-Agent HTTP request header field.
227 * Data type is string.
229 * @see media_streamer_node_get_params()
231 #define MEDIA_STREAMER_PARAM_USER_AGENT "user-agent"
234 * @brief Definition for stream type parameter of source node.
235 * @details The type of the push data stream.
236 * 0:stream, 1:seekable, 2:random-access (default:0)
238 * @see media_streamer_node_get_params()
240 #define MEDIA_STREAMER_PARAM_STREAM_TYPE "stream-type"
243 * @brief Definition for port parameter of source or sink node.
244 * @details The port to receive the packets from.
245 * Data type is integer and default value is 5004.
247 * @see media_streamer_node_get_params()
249 #define MEDIA_STREAMER_PARAM_PORT "port"
252 * @brief Definition for video port parameter of source node.
253 * @details The port to receive the video packets from.
254 * Data type is integer.
256 * @see media_streamer_node_get_params()
258 #define MEDIA_STREAMER_PARAM_VIDEO_IN_PORT "video_in_port"
261 * @brief Definition for audio port parameter of source node.
262 * @details The port to receive the audio packets from.
263 * Data type is integer.
265 * @see media_streamer_node_get_params()
267 #define MEDIA_STREAMER_PARAM_AUDIO_IN_PORT "audio_in_port"
270 * @brief Definition for video port parameter of sink node.
271 * @details The port to send the video packets to.
272 * Data type is integer.
274 * @see media_streamer_node_get_params()
276 #define MEDIA_STREAMER_PARAM_VIDEO_OUT_PORT "video_out_port"
279 * @brief Definition for audio port parameter of sink node.
280 * @details The port to send the audio packets to.
281 * Data type is integer.
283 * @see media_streamer_node_get_params()
285 #define MEDIA_STREAMER_PARAM_AUDIO_OUT_PORT "audio_out_port"
288 * @brief Definition for IP address parameter of source node.
289 * @details IP address to send/receive packets for.
290 * Data type is string and default value is "0.0.0.0".
292 * @see media_streamer_node_get_params()
294 #define MEDIA_STREAMER_PARAM_IP_ADDRESS "address"
297 * @brief Definition for the peer type of WebRTC node.
298 * @details The type of WebRTC peer, it can be "answer" or "offer".
299 * Data type is string and default value is "answer".
301 * @see media_streamer_node_get_params()
303 #define MEDIA_STREAMER_PARAM_WEBRTC_PEER_TYPE "webrtc-peer-type"
306 * @brief Definition for the STUN server URL for WebRTC node.
307 * @details Data type is string and default value is "stun://stun.l.google.com:19302".
309 * @see media_streamer_node_get_params()
311 #define MEDIA_STREAMER_PARAM_WEBRTC_STUN_SERVER "webrtc-stun-server"
314 * @brief Definition for remote session description.
315 * @details Value of the session description of the remote peer over its signaling channel.
316 * Data type is string.
318 * @see media_streamer_node_get_params() */
319 #define MEDIA_STREAMER_PARAM_WEBRTC_REMOTE_SESSION_DESCRIPTION "webrtc-remote-session-description"
322 * @brief Definition for ICE candidate of WebRTC node.
323 * @details Value of ICE candidate of the remote peer over its signaling channel.
324 * Data type is string.
326 * @see media_streamer_node_get_params() */
327 #define MEDIA_STREAMER_PARAM_WEBRTC_ADD_ICE_CANDIDATE "webrtc-add-ice-candidate"
330 * @brief Definition for audio device name parameter of source or sink node.
331 * @details ALSA device, as defined in an asound configuration file.
332 * ex) "hw:0,0", "hw:0,1"
333 * Data type is string and default value is "default".
335 * @see media_streamer_node_get_params()
337 #define MEDIA_STREAMER_PARAM_AUDIO_DEVICE "audio_device"
340 * @brief Definition for sync parameter of sink node.
341 * @details Synchronize on the clock
342 * Data type is boolean and default value is true.
344 * @see media_streamer_node_get_params()
346 #define MEDIA_STREAMER_PARAM_CLOCK_SYNCHRONIZED "sync"
349 * @brief Definition for rotate parameter of sink node.
350 * @details Rotate angle of display output.
351 * 0:none/1:rotate 90 degree/2:rotate 180 degree/3:rotate 270 degree
352 * Default value is 3(rotate 270 degree).
354 * @see media_streamer_node_get_params()
356 #define MEDIA_STREAMER_PARAM_ROTATE "rotate"
359 * @brief Definition for flip parameter of sink node.
360 * @details Flip for display.
361 * 0:none, 1:horizontal, 2:vertical, 3:both
362 * Default value is 0.
364 * @see media_streamer_node_get_params()
366 #define MEDIA_STREAMER_PARAM_FLIP "flip"
369 * @brief Definition for display geometry method parameter of sink node.
370 * @details Geometrical method for display.
374 * 3:Cropped full screen
375 * 4:Original size if surface size is larger than video size(width/height),
376 * or Letter box if video size(width/height) is larger than surface size.
378 * Default value is 0(Letter box).
380 * @see media_streamer_node_get_params()
382 #define MEDIA_STREAMER_PARAM_DISPLAY_GEOMETRY_METHOD "display-geometry-method"
385 * @brief Definition for display parameter of sink node.
386 * @details It is a object to draw video frame on.
387 * Data type is pointer.
389 * @see media_streamer_node_get_params()
391 #define MEDIA_STREAMER_PARAM_DISPLAY "display"
394 * @brief Definition for visible parameter of sink node.
395 * @details Draws screen or blacks out.
396 * Data type is boolean and default value is true(visible).
398 * @see media_streamer_node_get_params()
400 #define MEDIA_STREAMER_PARAM_VISIBLE "visible"
403 * @brief Definition for use-tbm parameter of sink node.
404 * @details Use Tizen Buffer Memory instead of Shared Memory.
405 * The sink node must receive the tbm-buffer created by the previous node.
406 * The value is changeable only in the #MEDIA_STREAMER_STATE_IDLE state.
407 * Data type is boolean and default value is false.
409 * @see media_streamer_node_get_params()
411 #define MEDIA_STREAMER_PARAM_USE_TBM "use-tbm"
414 * @brief Definition for host parameter of sink node.
415 * @details The host/IP/Multicast group to send the packets to.
416 * Data type is string and default value is "localhost".
418 * @see media_streamer_node_get_params()
420 #define MEDIA_STREAMER_PARAM_HOST "host"
423 * @brief Definition for segment location parameter of adaptive sink node.
424 * @details Path for writing playlist from
425 * Data type is string.
427 * @see media_streamer_node_get_params()
429 #define MEDIA_STREAMER_PARAM_SEGMENT_LOCATION "location"
432 * @brief Definition for playlist location parameter of adaptive sink node.
433 * @details Path for writing playlist from. Data type is string.
435 * @see media_streamer_node_get_params()
437 #define MEDIA_STREAMER_PARAM_PLAYLIST_LOCATION "playlist-location"
440 * @brief Called when error occurs in media streamer.
442 * @remarks Following error codes can be delivered.
443 * #MEDIA_STREAMER_ERROR_INVALID_OPERATION,
444 * #MEDIA_STREAMER_ERROR_FILE_NO_SPACE_ON_DEVICE,
445 * #MEDIA_STREAMER_ERROR_NOT_SUPPORTED,
446 * #MEDIA_STREAMER_ERROR_CONNECTION_FAILED,
447 * #MEDIA_STREAMER_ERROR_RESOURCE_CONFLICT
448 * @param[in] streamer Media streamer handle
449 * @param[in] error The error that occurred in media steamer
450 * @param[in] user_data The user data passed from the code where
451 * media_streamer_set_error_cb() was invoked
452 * This data will be accessible from media_streamer_error_cb()
453 * @pre Create media streamer handle by calling media_streamer_create().
454 * @see media_streamer_set_error_cb()
455 * @see media_streamer_unset_error_cb()
457 typedef void (*media_streamer_error_cb)(media_streamer_h streamer,
458 media_streamer_error_e error, void *user_data);
461 * @brief Called when media streamer state is changed.
463 * @param[in] streamer Media streamer handle
464 * @param[in] previous_state The previous state of the media streamer
465 * @param[in] current_state The current state of media streamer
466 * @param[in] user_data The user data passed from the code where
467 * media_streamer_set_state_changed_cb() was invoked
468 * This data will be accessible from media_streamer_state_changed_cb()
469 * @pre Create media streamer handle by calling media_streamer_create().
470 * @see media_streamer_set_state_change_cb()
471 * @see media_streamer_unset_state_change_cb()
473 typedef void (*media_streamer_state_changed_cb)(media_streamer_h streamer,
474 media_streamer_state_e previous_state, media_streamer_state_e current_state, void *user_data);
477 * @brief Called when the custom source needs more data or has enough data.
478 * @details This callback will be invoked when the buffer level drops below the threshold of max size
479 * or no free space in custom source buffer.
481 * @remarks Callback can be applied only for #MEDIA_STREAMER_NODE_SRC_TYPE_CUSTOM source type
482 * @param[in] src Media streamer source node handle
483 * @param[in] status Media streamer custom buffer status
484 * @param[in] user_data The user data passed from the callback registration function
485 * @see media_streamer_src_set_buffer_status_cb()
486 * @see media_streamer_node_get_param()
487 * @see media_streamer_node_set_param()
489 typedef void (*media_streamer_custom_buffer_status_cb)(media_streamer_node_h src,
490 media_streamer_custom_buffer_status_e status, void *user_data);
493 * @brief Called when new data is available from custom sink.
494 * @details This callback can be applied only to #MEDIA_STREAMER_NODE_SINK_TYPE_CUSTOM sink type
496 * @param[in] sink Media streamer sink node handle
497 * @param[in] user_data The user data passed from the code where
498 * media_streamer_sink_set_data_ready_cb() was invoked
499 * This data will be accessible from media_streamer_sink_data_ready_cb()
500 * @pre media_streamer_sink_set_data_ready_cb()
501 * @see MEDIA_STREAMER_NODE_SINK_TYPE_CUSTOM
502 * @see media_streamer_sink_set_data_ready_cb()
503 * @see media_streamer_sink_unset_data_ready_cb()
505 typedef void (*media_streamer_sink_data_ready_cb)(media_streamer_node_h sink, void *user_data);
508 * @brief Called when the end-of-stream has been reached.
509 * @details This callback can be applied only to #MEDIA_STREAMER_NODE_SINK_TYPE_CUSTOM sink type
511 * @param[in] sink Media streamer sink node handle
512 * @param[in] user_data The user data passed from the code where
513 * media_streamer_sink_set_eos_cb() was invoked
514 * This data will be accessible from media_streamer_sink_eos_cb()
515 * @pre media_streamer_sink_set_eos_cb()
516 * @see MEDIA_STREAMER_NODE_SINK_TYPE_CUSTOM
517 * @see media_streamer_sink_set_eos_cb()
518 * @see media_streamer_sink_unset_eos_cb()
520 typedef void (*media_streamer_sink_eos_cb)(media_streamer_node_h sink, void *user_data);
523 * @brief Called when the seek operation is completed.
525 * @param[in] user_data The user data passed from the callback registration function
526 * @see media_streamer_set_play_position()
528 typedef void (*media_streamer_position_changed_cb)(void *user_data);
531 * @brief Called when the media streamer is interrupted.
533 * @param[in] code The interrupted error code
534 * @param[in] user_data The user data passed from the callback registration function
535 * @see media_streamer_set_interrupted_cb()
536 * @see media_streamer_unset_interrupted_cb()
538 typedef void (*media_streamer_interrupted_cb)(media_streamer_interrupted_code_e code, void *user_data);
541 * @brief Called when a source pad of a media streamer node is ready to provide decoded data.
543 * @param[in] node Media streamer node handle
544 * @param[in] src_pad_name The source pad name that can give decoded data to another one
545 * @param[in] media_type The media type of the data from the given source pad such as 'video/x-raw', 'audio/x-raw', and so on
546 * @param[in] user_data The user data passed from the callback registration function
547 * @see media_streamer_node_set_decoded_ready_cb()
548 * @see media_streamer_node_link()
549 * @see media_streamer_node_unset_decoded_ready_cb()
551 typedef void (*media_streamer_node_decoded_ready_cb)(media_streamer_node_h node, const char *src_pad_name, const char *media_type, void *user_data);
554 * @brief Called when the media streamer WebRTC node needs to send the message to the remote peer of the WebRTC connection.
556 * @remarks Two types will be delivered with @a message which is a JSON string.
557 * One is for the remote session description and the other is for a new ICE candidate.
558 * For the remote session description, @a message will be {"sdp":{"type":"offer or answer","sdp":"..."}}.
559 * For the new ICE candidate, @a message will be {"ice":{"candidate":"..."}}.
560 * @param[in] webrtc Media streamer WebRTC node handle
561 * @param[in] message The message to be passed to the remote peer over the signaling channel
562 * @param[in] user_data The user data passed from the callback registration function
563 * @see media_streamer_webrtc_node_set_message_cb()
564 * @see media_streamer_webrtc_node_unset_message_cb()
566 typedef void (*media_streamer_webrtc_message_cb)(media_streamer_node_h webrtc, const char *message, void *user_data);
569 * @brief Sets a error callback function to be invoked when an error occurs.
570 * @details Following error codes can be delivered by error callback.
571 * #MEDIA_STREAMER_ERROR_INVALID_OPERATION,
572 * #MEDIA_STREAMER_ERROR_FILE_NO_SPACE_ON_DEVICE,
573 * #MEDIA_STREAMER_ERROR_NOT_SUPPORTED,
574 * #MEDIA_STREAMER_ERROR_CONNECTION_FAILED,
575 * #MEDIA_STREAMER_ERROR_RESOURCE_CONFLICT
577 * @param[in] streamer Media streamer handle
578 * @param[in] callback Callback function pointer
579 * @param[in] user_data The user data passed from the code where
580 * media_streamer_set_error_cb() was invoked
581 * This data will be accessible from media_streamer_error_cb()
582 * @return @c 0 on success,
583 * otherwise a negative error value
584 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
585 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
586 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
587 * @pre Create a media streamer handle by calling media_streamer_create().
588 * @post media_streamer_error_cb() will be invoked.
589 * @see media_streamer_unset_error_cb()
590 * @see media_streamer_error_cb()
592 int media_streamer_set_error_cb(media_streamer_h streamer, media_streamer_error_cb callback, void *user_data);
595 * @brief Unsets the error callback function.
597 * @param[in] streamer Media streamer handle
598 * @return @c 0 on success,
599 * otherwise a negative error value
600 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
601 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
602 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
603 * @see media_streamer_error_cb()
605 int media_streamer_unset_error_cb(media_streamer_h streamer);
608 * @brief Sets a callback that will be triggered after media streamer state is changed.
610 * @param[in] streamer Media streamer handle
611 * @param[in] callback Callback function pointer
612 * @param[in] user_data The user data passed from the code
613 * where media_streamer_set_state_change_cb() was invoked
614 * This data will be accessible from media_streamer_state_changed_cb()
615 * @return @c 0 on success,
616 * otherwise a negative error value
617 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
618 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
619 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
620 * @pre Create a media streamer handle by calling media_streamer_create().
621 * @post media_streamer_state_changed_cb() will be invoked.
622 * @see media_streamer_unset_state_change_cb()
623 * @see media_streamer_state_changed_cb()
625 int media_streamer_set_state_change_cb(media_streamer_h streamer, media_streamer_state_changed_cb callback, void *user_data);
628 * @brief Unsets the state changed callback function.
630 * @param[in] streamer Media streamer handle
631 * @return @c 0 on success,
632 * otherwise a negative error value
633 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
634 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
635 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
636 * @see media_streamer_set_state_change_cb()
638 int media_streamer_unset_state_change_cb(media_streamer_h streamer);
641 * @brief Sets a callback function to be invoked when the media streamer is interrupted.
643 * @param[in] streamer Media streamer handle
644 * @param[in] callback The callback function to register
645 * @param[in] user_data The user data to be passed to the callback function
646 * @return @c 0 on success,
647 * otherwise a negative error value
648 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
649 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
650 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
651 * @post media_streamer_interrupted_cb() will be invoked.
652 * @see media_streamer_unset_interrupted_cb()
653 * @see #media_streamer_interrupted_code_e
655 int media_streamer_set_interrupted_cb(media_streamer_h streamer, media_streamer_interrupted_cb callback, void *user_data);
658 * @brief Unsets the callback function.
660 * @param[in] streamer Media streamer handle
661 * @return @c 0 on success,
662 * otherwise a negative error value
663 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
664 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
665 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
666 * @see media_streamer_set_interrupted_cb()
668 int media_streamer_unset_interrupted_cb(media_streamer_h streamer);
671 * @brief Sets a callback function to be invoked when buffer underrun or overflow is occurred.
672 * @details This function can be called only for #MEDIA_STREAMER_NODE_SRC_TYPE_CUSTOM source type
674 * @remarks This function is used for media stream playback only.
675 * @param[in] src Media streamer source node handle
676 * @param[in] callback The buffer status callback function to register
677 * @param[in] user_data The user data passed from the code where
678 * media_streamer_src_set_buffer_status_cb() was invoked
679 * This data will be accessible from media_streamer_custom_buffer_status_cb()
680 * @return @c 0 on success,
681 * otherwise a negative error value
682 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
683 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
684 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
685 * @pre Create a media streamer source node handle by calling media_streamer_node_create_src().
686 * @pre Add created media streamer source node to media streamer by calling media_streamer_node_add().
687 * @post media_streamer_custom_buffer_status_cb() will be invoked.
688 * @see media_streamer_src_unset_buffer_status_cb()
689 * @see media_streamer_custom_buffer_status_cb()
691 int media_streamer_src_set_buffer_status_cb(media_streamer_node_h src, media_streamer_custom_buffer_status_cb callback, void *user_data);
694 * @brief Unsets the source buffer status callback function.
696 * @param[in] src Media streamer source node handle
697 * @return @c 0 on success,
698 * otherwise a negative error value
699 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
700 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
701 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
702 * @see media_streamer_src_set_buffer_status_cb()
704 int media_streamer_src_unset_buffer_status_cb(media_streamer_node_h src);
707 * @brief Sets a callback function to be called when the custom sink is ready for data processing.
708 * @details This function can be called only for #MEDIA_STREAMER_NODE_SINK_TYPE_CUSTOM sink type
710 * @param[in] sink Media streamer sink node handle
711 * @param[in] callback Callback function pointer
712 * @param[in] user_data The user data passed from the code where
713 * media_streamer_sink_set_data_ready_cb() was invoked
714 * This data will be accessible from media_streamer_sink_data_ready_cb()
715 * @return @c 0 on success,
716 * otherwise a negative error value
717 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
718 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
719 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
720 * @pre Create a media streamer sink handle by calling media_streamer_node_create_sink().
721 * @pre Add created media streamer sink node to media streamer by calling media_streamer_node_add().
722 * @post media_streamer_sink_data_ready_cb() will be invoked.
723 * @see media_streamer_sink_unset_data_ready_cb()
724 * @see media_streamer_sink_data_ready_cb()
726 int media_streamer_sink_set_data_ready_cb(media_streamer_node_h sink, media_streamer_sink_data_ready_cb callback, void *user_data);
729 * @brief Unsets the sink data ready callback function.
731 * @param[in] sink Media streamer sink node handle
732 * @return @c 0 on success,
733 * otherwise a negative error value
734 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
735 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
736 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
737 * @see media_streamer_sink_set_data_ready_cb()
739 int media_streamer_sink_unset_data_ready_cb(media_streamer_node_h sink);
742 * @brief Sets a callback function to be called when custom sink detect the end-of-stream.
744 * @param[in] sink Media streamer sink node handle
745 * @param[in] callback Callback function pointer
746 * @param[in] user_data The user data passed from the code where
747 * media_streamer_sink_set_eos_cb() was invoked.
748 * This data will be accessible from media_streamer_sink_eos_cb()
749 * @return @c 0 on success,
750 * otherwise a negative error value
751 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
752 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
753 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
754 * @pre Create a media streamer sink handle by calling media_streamer_node_create_sink().
755 * @pre Add created media streamer sink node to media streamer by calling media_streamer_node_add().
756 * @post media_streamer_sink_eos_cb() will be invoked.
757 * @see media_streamer_sink_unset_eos_cb()
758 * @see media_streamer_sink_eos_cb()
760 int media_streamer_sink_set_eos_cb(media_streamer_node_h sink, media_streamer_sink_eos_cb callback, void *user_data);
763 * @brief Unsets the sink end-of-stream callback function.
765 * @param[in] sink Media streamer sink node handle
766 * @return @c 0 on success,
767 * otherwise a negative error value
768 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
769 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
770 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
771 * @see media_streamer_sink_set_eos_cb()
773 int media_streamer_sink_unset_eos_cb(media_streamer_node_h sink);
776 * @brief Creates an instance of media streamer and
777 * passes the handle to the caller.
779 * @remarks You must release @a streamer using media_streamer_destroy()
780 * @param[out] streamer Media streamer handle
781 * @return @c 0 on success,
782 * otherwise a negative error value
783 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
784 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
785 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
786 * @post The media streamer state will be #MEDIA_STREAMER_STATE_IDLE.
787 * @see media_streamer_destroy()
789 int media_streamer_create(media_streamer_h *streamer);
792 * @brief Sets media streamer state to #MEDIA_STREAMER_STATE_READY.
794 * @param[in] streamer Media streamer handle
795 * @return @c 0 on success,
796 * otherwise a negative error value
797 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
798 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
799 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
800 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
801 * @pre The media streamer state must be set to #MEDIA_STREAMER_STATE_IDLE
802 * by calling media_streamer_create() or media_streamer_unprepare().
803 * @pre At least one source and one sink should be added and linked in the streamer
804 * by calling media_streamer_node_create_src(), media_streamer_node_create_sink() and media_streamer_node_link().
805 * @post The media streamer state will be #MEDIA_STREAMER_STATE_READY.
806 * @see media_streamer_unprepare()
807 * @see media_streamer_create()
809 int media_streamer_prepare(media_streamer_h streamer);
812 * @brief Sets media streamer state to #MEDIA_STREAMER_STATE_IDLE.
813 * @details The most recently used media is reset and no longer associated with the media streamer.
815 * @param[in] streamer Media streamer handle
816 * @return @c 0 on success,
817 * otherwise a negative error value
818 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
819 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
820 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
821 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
822 * @pre The media streamer state should be higher than #MEDIA_STREAMER_STATE_IDLE.
823 * @post The media streamer state will be #MEDIA_STREAMER_STATE_IDLE.
824 * @see media_streamer_prepare()
826 int media_streamer_unprepare(media_streamer_h streamer);
829 * @brief Sets media streamer state to #MEDIA_STREAMER_STATE_PLAYING.
830 * @details Start running the current streamer, or resumes it if paused.
832 * @param[in] streamer Media streamer handle
833 * @return @c 0 on success,
834 * otherwise a negative error value
835 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
836 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
837 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
838 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
839 * @pre The media streamer state must be set to #MEDIA_STREAMER_STATE_READY by calling media_streamer_prepare() or
840 * set to #MEDIA_STREAMER_STATE_PAUSED by calling media_streamer_pause().
841 * @post The media streamer state will be #MEDIA_STREAMER_STATE_PLAYING.
842 * @see media_streamer_create()
843 * @see media_streamer_pause()
844 * @see media_streamer_stop()
846 int media_streamer_play(media_streamer_h streamer);
849 * @brief Pauses the media streamer.
851 * @param[in] streamer Media streamer handle
852 * @return @c 0 on success,
853 * otherwise a negative error value
854 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
855 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
856 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
857 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
858 * @pre The media streamer state must be set to #MEDIA_STREAMER_STATE_PLAYING.
859 * @post The media streamer state will be #MEDIA_STREAMER_STATE_PAUSED.
860 * @see media_streamer_create()
861 * @see media_streamer_play()
863 int media_streamer_pause(media_streamer_h streamer);
866 * @brief Stops the media streamer.
868 * @param[in] streamer Media streamer handle
869 * @return @c 0 on success,
870 * otherwise a negative error value
871 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
872 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
873 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
874 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
875 * @pre The media streamer state must be set to #MEDIA_STREAMER_STATE_PLAYING by calling media_streamer_play() or
876 * set to #MEDIA_STREAMER_STATE_PAUSED by calling media_streamer_pause().
877 * @post The media streamer state will be #MEDIA_STREAMER_STATE_READY.
878 * @see media_streamer_create()
879 * @see media_streamer_play()
880 * @see media_streamer_pause()
882 int media_streamer_stop(media_streamer_h streamer);
885 * @brief Destroys media streamer.
887 * @remarks Nodes in streamer will be removed automatically.
888 * Don't need to remove nodes by calling media_streamer_node_remove().
889 * If you want to change the node without destroying streamer handle,
890 * you can call the media_streamer_node_remove().
891 * after setting the streamer state to #MEDIA_STREAMER_STATE_IDLE state.
892 * @param[in] streamer Media streamer handle
893 * @return @c 0 on success,
894 * otherwise a negative error value
895 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
896 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
897 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
898 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
899 * @pre Create a media streamer handle by calling media_streamer_create().
900 * @post The media streamer state will be #MEDIA_STREAMER_STATE_NONE.
901 * @see media_streamer_create()
903 int media_streamer_destroy(media_streamer_h streamer);
906 * @brief Changes playback position to the defined time value, asynchronously.
908 * @param[in] streamer Media streamer handle
909 * @param[in] time Time in millisecond
910 * @param[in] accurate If @c true, it will seek to the accurate position, but this might be considerably slower for some formats,
911 * otherwise @c false, it will seek to the nearest keyframe
912 * @param[in] callback The callback function to register
913 * @param[in] user_data The user data to be passed to the callback function
914 * @return @c 0 on success,
915 * otherwise a negative error value
916 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
917 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
918 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
919 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
920 * @retval #MEDIA_STREAMER_ERROR_SEEK_FAILED Seek operation failure
921 * @pre The media streamer state must be one of these: #MEDIA_STREAMER_STATE_PAUSED, or #MEDIA_STREAMER_STATE_PLAYING.
922 * @post It invokes media_streamer_set_play_position() when seek operation completes, if you set a callback.
923 * @see media_streamer_get_play_position()
925 int media_streamer_set_play_position(media_streamer_h streamer, int time,
926 bool accurate, media_streamer_position_changed_cb callback, void *user_data);
929 * @brief Gets the current position in milliseconds.
931 * @param[in] streamer Media streamer handle
932 * @param[out] time The current position in milliseconds
933 * @return @c 0 on success,
934 * otherwise a negative error value
935 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
936 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
937 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
938 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
939 * @pre The media streamer state must be one of these: #MEDIA_STREAMER_STATE_PAUSED, or #MEDIA_STREAMER_STATE_PLAYING.
940 * @see media_streamer_set_play_position()
942 int media_streamer_get_play_position(media_streamer_h streamer, int *time);
945 * @brief Gets the total running time of the associated media.
947 * @remarks The streamer's source node type should be #MEDIA_STREAMER_NODE_SRC_TYPE_FILE or #MEDIA_STREAMER_NODE_SRC_TYPE_HTTP.
948 * If not, return value will be #MEDIA_STREAMER_ERROR_NONE and duration will be -1.
949 * @param[in] streamer Media streamer handle
950 * @param[out] duration The duration in milliseconds
951 * @return @c 0 on success,
952 * otherwise a negative error value
953 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
954 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
955 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
956 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
957 * @pre The media streamer state must be one of these: #MEDIA_STREAMER_STATE_PAUSED, or #MEDIA_STREAMER_STATE_PLAYING.
959 int media_streamer_get_duration(media_streamer_h streamer, int *duration);
962 * @brief Gets media streamer state.
964 * @param[in] streamer Media streamer handle
965 * @param[out] state Media streamer state
966 * @return @c 0 on success,
967 * otherwise a negative error value
968 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
969 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
970 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
971 * @pre Create a media streamer handle by calling media_streamer_create().
972 * @see #media_streamer_state_e
974 int media_streamer_get_state(media_streamer_h streamer, media_streamer_state_e *state);
977 * @brief Creates media streamer source node.
979 * @remarks The internet privilege(%http://tizen.org/privilege/internet) should be added if any URIs are used to play from network.
980 * The camera privilege(%http://tizen.org/privilege/camera) should be added if the source node handles the camera device.
981 * The recorder privilege(%http://tizen.org/privilege/recorder) should be added if the source node handles the recorder device.
982 * You can release source node using media_streamer_node_destroy().
983 * @param[in] type Media streamer source node type
984 * @param[out] src Media streamer source node handle
985 * @return @c 0 on success,
986 * otherwise a negative error value
987 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
988 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
989 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
990 * @retval #MEDIA_STREAMER_ERROR_PERMISSION_DENIED Permission denied
991 * @retval #MEDIA_STREAMER_ERROR_NOT_SUPPORTED Not supported
992 * @see #media_streamer_node_src_type_e
993 * @see media_streamer_node_destroy()
995 int media_streamer_node_create_src(media_streamer_node_src_type_e type, media_streamer_node_h *src);
998 * @brief Pushes packet into custom source node.
999 * @details This function can be called only for #MEDIA_STREAMER_NODE_SRC_TYPE_CUSTOM.
1001 * @param[in] src Media streamer source node handle
1002 * @param[in] packet Media packet handle
1003 * @return @c 0 on success,
1004 * otherwise a negative error value
1005 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1006 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1007 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1008 * @pre Create a source node handle by calling media_streamer_node_create_src().
1009 * @pre The media streamer state must be set to #MEDIA_STREAMER_STATE_IDLE at least.
1010 * @see #media_packet_h
1012 int media_streamer_node_push_packet(media_streamer_node_h src, media_packet_h packet);
1015 * @brief Creates media streamer sink node.
1017 * @remarks The internet privilege(%http://tizen.org/privilege/internet) should be added if any URIs are used to transmit the output data.
1018 * You can release @a sink node using media_streamer_node_destroy()
1019 * @remarks If @a type is #MEDIA_STREAMER_NODE_SINK_TYPE_ADAPTIVE, the HTTP server will be started and the server will be able to transmit the output data to the other device.
1020 * The application must have an authentication responsibility between a server and client because the data transmission is not secure.
1021 * @param[in] type Type of sink node to be created
1022 * @param[out] sink Media streamer sink node handle
1023 * @return @c 0 on success,
1024 * otherwise a negative error value
1025 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1026 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1027 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1028 * @retval #MEDIA_STREAMER_ERROR_PERMISSION_DENIED Permission denied
1029 * @retval #MEDIA_STREAMER_ERROR_NOT_SUPPORTED Not supported
1030 * @see #media_streamer_node_sink_type_e
1031 * @see media_streamer_node_destroy()
1033 int media_streamer_node_create_sink(media_streamer_node_sink_type_e type, media_streamer_node_h *sink);
1036 * @brief Pulls packet from custom sink node.
1037 * @details This function can be called only for #MEDIA_STREAMER_NODE_SINK_TYPE_CUSTOM
1039 * @param[in] sink Media streamer sink node handle
1040 * @param[out] packet Media packet handle
1041 * @return @c 0 on success,
1042 * otherwise a negative error value
1043 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1044 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
1045 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1046 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1047 * @pre Create a sink node handle by calling media_streamer_node_create_sink().
1048 * @pre Set media_streamer_sink_data_ready_cb by calling media_streamer_sink_set_data_ready_cb().
1049 * @see #media_packet_h
1050 * @see media_streamer_node_create_sink()
1052 int media_streamer_node_pull_packet(media_streamer_node_h sink, media_packet_h *packet);
1055 * @brief Creates media streamer node except #MEDIA_STREAMER_NODE_TYPE_SRC and #MEDIA_STREAMER_NODE_TYPE_SINK.
1056 * @details Creates node specific @a type with specific format of input
1059 * @remarks The node type should not be #MEDIA_STREAMER_NODE_TYPE_SRC and #MEDIA_STREAMER_NODE_TYPE_SINK.
1060 * To create source / sink type node, media_streamer_node_create_src() / media_streamer_node_create_sink() should be called.
1061 * The internet privilege (%http://tizen.org/privilege/internet) should be added if #MEDIA_STREAMER_NODE_TYPE_WEBRTC is set.
1062 * You can release @a node using media_streamer_node_destroy().
1063 * @param[in] type Created node type
1064 * @param[in] in_fmt Media format handle for input data
1065 * @param[in] out_fmt Media format handle for output data
1066 * @param[out] node Media streamer node handle to be created
1067 * @return @c 0 on success,
1068 * otherwise a negative error value
1069 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1070 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1071 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1072 * @retval #MEDIA_STREAMER_ERROR_PERMISSION_DENIED Permission denied
1073 * @retval #MEDIA_STREAMER_ERROR_NOT_SUPPORTED Not supported
1074 * @see #media_streamer_node_type_e
1075 * @see #media_format_h
1076 * @see media_streamer_node_destroy()
1078 int media_streamer_node_create(media_streamer_node_type_e type, media_format_h in_fmt,
1079 media_format_h out_fmt, media_streamer_node_h *node);
1082 * @brief Adds node to media streamer.
1084 * @param[in] streamer Media streamer handle
1085 * @param[in] node Media streamer node handle to be added
1086 * @return @c 0 on success,
1087 * otherwise a negative error value
1088 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1089 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
1090 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1091 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1092 * @pre Create media streamer handle by calling media_streamer_create().
1093 * @pre Create node handle by calling media_streamer_node_create().
1094 * @see media_streamer_create()
1095 * @see media_streamer_node_create()
1096 * @see media_streamer_node_create_src()
1097 * @see media_streamer_node_create_sink()
1099 int media_streamer_node_add(media_streamer_h streamer, media_streamer_node_h node);
1102 * @brief Destroys media streamer node.
1104 * @param[in] node Media streamer node handle
1105 * @return @c 0 on success,
1106 * otherwise a negative error value
1107 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1108 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
1109 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1110 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1111 * @pre Create node handle by calling media_streamer_node_create().
1112 * @pre If the node was added to media streamer, it has to be removed by calling media_streamer_node_remove().
1113 * @see media_streamer_node_create()
1114 * @see media_streamer_node_create_src()
1115 * @see media_streamer_node_create_sink()
1116 * @see media_streamer_node_remove()
1118 int media_streamer_node_destroy(media_streamer_node_h node);
1121 * @brief Removes media streamer node from streamer.
1123 * @remarks To remove node without error posting, the state of streamer should be #MEDIA_STREAMER_STATE_IDLE.
1124 * If the node is linked, it will be unlinked before removing.
1125 * @param[in] streamer Media streamer handle
1126 * @param[in] node Media streamer node handle
1127 * @return @c 0 on success,
1128 * otherwise a negative error value
1129 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1130 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
1131 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1132 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1133 * @pre Add node to streamer by calling media_streamer_node_add().
1134 * @see media_streamer_node_add()
1136 int media_streamer_node_remove(media_streamer_h streamer, media_streamer_node_h node);
1139 * @brief Links two media streamer nodes.
1141 * @remarks Pads are node's input and output, where you can connect other nodes.
1142 * (@a node1) - (@a node2)
1143 * @a node1 and @a node2 are determined relatively.
1144 * In case of (A)-(B)-(C),
1145 * (B) can be @a node2 with (A) or (B) can be @a node1 with (C).
1146 * However, source type node is always @a node1 and sink type node is always @a node2.
1147 * (A) is source type node and it should be @a node1.
1148 * (C) is sink type node and it should be @a node2.
1149 * @param[in] node1 Media streamer node handle which has the @a src_pad_name pad
1150 * @param[in] src_pad_name The name of the source pad of the @a node1
1151 * @param[in] node2 Media streamer node handle which has the @a sink_pad_name pad
1152 * @param[in] sink_pad_name The name of the sink pad of the @a node2
1153 * @return @c 0 on success,
1154 * otherwise a negative error value
1155 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1156 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
1157 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1158 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1159 * @pre Create node handles by calling media_streamer_node_create(), media_streamer_node_create_src(), or media_streamer_node_create_sink().
1160 * And add the nodes into streamer by calling media_streamer_node_add().
1161 * @see media_streamer_node_create()
1162 * @see media_streamer_node_create_src()
1163 * @see media_streamer_node_create_sink()
1164 * @see media_streamer_node_add()
1166 int media_streamer_node_link(media_streamer_node_h node1, const char *src_pad_name,
1167 media_streamer_node_h node2, const char *sink_pad_name);
1170 * @brief Sets media format for pad of media streamer node.
1172 * @param[in] node Media streamer node handle
1173 * @param[in] pad_name Pad name
1174 * @param[in] fmt Media format handle
1175 * @return @c 0 on success,
1176 * otherwise a negative error value
1177 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1178 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
1179 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1180 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1181 * @pre Create a node handle by calling media_streamer_node_create(), media_streamer_node_create_src(), or media_streamer_node_create_sink().
1182 * @pre Get pad name by calling media_streamer_node_get_pad_name().
1183 * @see #media_format_h
1185 int media_streamer_node_set_pad_format(media_streamer_node_h node, const char *pad_name, media_format_h fmt);
1188 * @brief Gets media format for pad of media streamer node.
1190 * @param[in] node Media streamer node handle
1191 * @param[in] pad_name Pad name
1192 * @param[out] fmt Media format handle
1193 * @return @c 0 on success,
1194 * otherwise a negative error value
1195 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1196 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
1197 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1198 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1199 * @pre Create a node handle by calling media_streamer_node_create(), media_streamer_node_create_src(), or media_streamer_node_create_sink().
1200 * @pre Get pad name by calling media_streamer_node_get_pad_name().
1201 * @see #media_format_h
1203 int media_streamer_node_get_pad_format(media_streamer_node_h node, const char *pad_name, media_format_h *fmt);
1206 * @brief Gets name of node pads.
1208 * @remarks After using the src_pad_name and sink_pad_name, it has to be freed.
1209 * src_pad_name or sink_pad_name can be null according to the node type.
1210 * In case of source type node, sink_pad_name will be null.
1211 * In case of sink type node, src_pad_name will be null.
1212 * @param[in] node Media streamer node handle
1213 * @param[out] src_pad_name Array of source pad name
1214 * @param[out] src_pad_num The number of source pads
1215 * @param[out] sink_pad_name Array of sink pad name
1216 * @param[out] sink_pad_num The number of sink pads
1217 * @return @c 0 on success,
1218 * otherwise a negative error value
1219 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1220 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1221 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1222 * @pre Create a node handle by calling media_streamer_node_create(), media_streamer_node_create_src(), or media_streamer_node_create_sink().
1223 * @see media_streamer_node_create()
1224 * @see media_streamer_node_create_src()
1225 * @see media_streamer_node_create_sink()
1227 int media_streamer_node_get_pad_name(media_streamer_node_h node, char ***src_pad_name,
1228 int *src_pad_num, char ***sink_pad_name, int *sink_pad_num);
1231 * @brief Sets parameters of node.
1232 * @details Many parameters can be set at one time all together by using bundle.
1234 * @remarks The mediastorage privilege(%http://tizen.org/privilege/mediastorage) should be added if any video/audio files are written in the internal storage devices.
1235 * The externalstorage privilege(%http://tizen.org/privilege/externalstorage) should be added if any video/audio files are written in the external storage devices.
1236 * @param[in] node Media streamer node handle
1237 * @param[in] param_list Key value array of media streamer node parameters
1238 * @return @c 0 on success,
1239 * otherwise a negative error value
1240 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1241 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
1242 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1243 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1244 * @retval #MEDIA_STREAMER_ERROR_PERMISSION_DENIED Permission denied
1245 * @pre Create a node handle by calling media_streamer_node_create(), media_streamer_node_create_src(), or media_streamer_node_create_sink().
1246 * @pre Get param list to set by calling media_streamer_node_get_params().
1247 * @see media_streamer_node_create()
1248 * @see media_streamer_node_create_src()
1249 * @see media_streamer_node_create_sink()
1250 * @see media_streamer_node_get_params()
1252 int media_streamer_node_set_params(media_streamer_node_h node, bundle *param_list);
1254 * @brief Gets node parameter list.
1256 * @remarks After using param_list, it has to be freed by calling bundle_free() in bundle.h
1257 * Refer to the "Parameter information of node" in this file to get info.
1258 * @param[in] node Media streamer node handle
1259 * @param[out] param_list Key value array of media streamer node parameters
1260 * @return @c 0 on success,
1261 * otherwise a negative error value
1262 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1263 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
1264 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1265 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1266 * @pre Create a node handle by calling media_streamer_node_create(), media_streamer_node_create_src(), or media_streamer_node_create_sink().
1267 * @post Set params which are needed to set by calling media_streamer_node_set_params() or media_streamer_node_set_param().
1268 * @see media_streamer_node_create()
1269 * @see media_streamer_node_create_src()
1270 * @see media_streamer_node_create_sink()
1271 * @see media_streamer_node_set_params()
1272 * @see media_streamer_node_set_param()
1274 int media_streamer_node_get_params(media_streamer_node_h node, bundle **param_list);
1277 * @brief Sets single parameter of node.
1278 * @details Sets parameter one by one without creating param bundle.
1280 * @remarks The mediastorage privilege(%http://tizen.org/privilege/mediastorage) should be added if any video/audio files are written in the internal storage devices.
1281 * The externalstorage privilege(%http://tizen.org/privilege/externalstorage) should be added if any video/audio files are written in the external storage devices.
1282 * @param[in] node Media streamer node handle
1283 * @param[in] param_name Param name of node
1284 * @param[in] param_value Param value of node
1285 * @return @c 0 on success,
1286 * otherwise a negative error value
1287 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1288 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
1289 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1290 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1291 * @retval #MEDIA_STREAMER_ERROR_PERMISSION_DENIED Permission denied
1292 * @pre Create a node handle by calling media_streamer_node_create(), media_streamer_node_create_src(), or media_streamer_node_create_sink().
1293 * @pre Get param list to set by calling media_streamer_node_get_params().
1294 * @see media_streamer_node_create()
1295 * @see media_streamer_node_create_src()
1296 * @see media_streamer_node_create_sink()
1297 * @see media_streamer_node_get_params()
1298 * @see media_streamer_node_get_param()
1300 int media_streamer_node_set_param(media_streamer_node_h node,
1301 const char *param_name, const char *param_value);
1304 * @brief Gets value of parameter.
1305 * @details Gets parameter one by one without creating param bundle.
1307 * @param[in] node Media streamer node handle
1308 * @param[in] param_name Param name of node
1309 * @param[out] param_value Param value of node
1310 * @return @c 0 on success,
1311 * otherwise a negative error value
1312 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1313 * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state
1314 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1315 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1316 * @pre Create a node handle by calling media_streamer_node_create(), media_streamer_node_create_src(), or media_streamer_node_create_sink().
1317 * @pre Get param list to know the param name by calling media_streamer_node_get_params().
1318 * @see media_streamer_node_create()
1319 * @see media_streamer_node_create_src()
1320 * @see media_streamer_node_create_sink()
1321 * @see media_streamer_node_get_params()
1322 * @see media_streamer_node_set_param()
1324 int media_streamer_node_get_param(media_streamer_node_h node,
1325 const char *param_name, char **param_value);
1328 * @brief Sets a callback function to be invoked when a source pad of @a node is ready to give decoded data.
1330 * @remarks The available type of @a node for this function is #MEDIA_STREAMER_NODE_TYPE_WEBRTC.
1331 * @param[in] node Media streamer node handle
1332 * @param[in] callback The decoded ready callback function to register
1333 * @param[in] user_data The user data to be passed to the callback function
1334 * @return @c 0 on success,
1335 * otherwise a negative error value
1336 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1337 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1338 * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation
1339 * @pre Create a media streamer node handle by calling media_streamer_node_create().
1340 * @post media_streamer_node_decoded_ready_cb() will be invoked.
1341 * @see media_streamer_node_unset_decoded_ready_cb()
1342 * @see media_streamer_node_decoded_ready_cb()
1344 int media_streamer_node_set_decoded_ready_cb(media_streamer_node_h node, media_streamer_node_decoded_ready_cb callback, void *user_data);
1347 * @brief Unsets the decoded ready callback function.
1349 * @param[in] node Media streamer node handle
1350 * @return @c 0 on success,
1351 * otherwise a negative error value
1352 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1353 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1354 * @see media_streamer_node_set_decoded_ready_cb()
1356 int media_streamer_node_unset_decoded_ready_cb(media_streamer_node_h node);
1359 * @brief Sets a callback function to be invoked when WebRTC node needs to send a message to the remote peer of WebRTC connection.
1360 * @details This function can be called only for #MEDIA_STREAMER_NODE_TYPE_WEBRTC type node.
1362 * @param[in] webrtc Media streamer WebRTC node handle
1363 * @param[in] callback The WebRTC message callback function to register
1364 * @param[in] user_data The user data to be passed to the callback function
1365 * @return @c 0 on success,
1366 * otherwise a negative error value
1367 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1368 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1369 * @pre Create a media streamer WebRTC node handle by calling media_streamer_node_create().
1370 * @post media_streamer_webrtc_message_cb() will be invoked.
1371 * @see media_streamer_webrtc_node_unset_message_cb()
1372 * @see media_streamer_webrtc_message_cb()
1374 int media_streamer_webrtc_node_set_message_cb(media_streamer_node_h webrtc, media_streamer_webrtc_message_cb callback, void *user_data);
1377 * @brief Unsets the WebRTC message callback function.
1379 * @param[in] webrtc Media streamer WebRTC node handle
1380 * @return @c 0 on success,
1381 * otherwise a negative error value
1382 * @retval #MEDIA_STREAMER_ERROR_NONE Successful
1383 * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter
1384 * @see media_streamer_webrtc_node_set_message_cb()
1386 int media_streamer_webrtc_node_unset_message_cb(media_streamer_node_h webrtc);
1396 #endif /* __TIZEN_MEDIA_STREAMER_H__ */