summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEunhye Choi <eunhae1.choi@samsung.com>2019-07-08 20:20:16 +0900
committerEunhye Choi <eunhae1.choi@samsung.com>2019-07-08 20:20:16 +0900
commitcc16a2341a41f2501816181b051e825e29e71a25 (patch)
tree9bbcff8588f11cf8d692ebbcfe66f67681b43b0f
parentff53f76df65f38bf53e3b3cd8929d6a7e5a94210 (diff)
downloadlibmm-player-cc16a2341a41f2501816181b051e825e29e71a25.tar.gz
libmm-player-cc16a2341a41f2501816181b051e825e29e71a25.tar.bz2
libmm-player-cc16a2341a41f2501816181b051e825e29e71a25.zip
[0.6.198] Add state-holder in case of using deinterleave
Change-Id: I29f7da2084a93cfc03f1c3008b5628ee598a84e5
-rw-r--r--packaging/libmm-player.spec2
-rw-r--r--src/mm_player_gst.c3
-rw-r--r--src/mm_player_priv.c30
3 files changed, 31 insertions, 4 deletions
diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec
index 82c0f92..bc0cc88 100644
--- a/packaging/libmm-player.spec
+++ b/packaging/libmm-player.spec
@@ -1,6 +1,6 @@
Name: libmm-player
Summary: Multimedia Framework Player Library
-Version: 0.6.197
+Version: 0.6.198
Release: 0
Group: Multimedia/Libraries
License: Apache-2.0
diff --git a/src/mm_player_gst.c b/src/mm_player_gst.c
index 205c1cf..03411a7 100644
--- a/src/mm_player_gst.c
+++ b/src/mm_player_gst.c
@@ -3897,7 +3897,8 @@ _mmplayer_gst_build_pipeline(mmplayer_t *player)
}
/* FIXME: need to check whether this is required or not. */
- if (MMPLAYER_IS_HTTP_STREAMING(player) || MMPLAYER_IS_RTSP_STREAMING(player)) {
+ if (MMPLAYER_IS_HTTP_STREAMING(player) || MMPLAYER_IS_RTSP_STREAMING(player) ||
+ (player->audio_extract_opt & MM_PLAYER_AUDIO_EXTRACT_DEINTERLEAVE)) {
/* create fakesink element for keeping the pipeline state PAUSED. if needed */
mainbin[MMPLAYER_M_SRC_FAKESINK].id = MMPLAYER_M_SRC_FAKESINK;
mainbin[MMPLAYER_M_SRC_FAKESINK].gst = gst_element_factory_make("fakesink", "state-holder");
diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c
index bee6733..bc00417 100644
--- a/src/mm_player_priv.c
+++ b/src/mm_player_priv.c
@@ -2523,8 +2523,6 @@ __mmplayer_gst_audio_deinterleave_pad_added(GstElement *elem, GstPad *pad, gpoin
audiobin[MMPLAYER_A_SINK].gst = sink;
}
- gst_element_set_state(sink, GST_STATE_PAUSED);
- gst_element_set_state(queue, GST_STATE_PAUSED);
_mmplayer_add_signal_connection(player,
G_OBJECT(sink),
@@ -2535,6 +2533,16 @@ __mmplayer_gst_audio_deinterleave_pad_added(GstElement *elem, GstPad *pad, gpoin
__mmplayer_add_sink(player, sink);
+ if (gst_element_sync_state_with_parent(queue) == GST_STATE_CHANGE_FAILURE) {
+ LOGE("failed to sync state");
+ goto ERROR;
+ }
+
+ if (gst_element_sync_state_with_parent(sink) == GST_STATE_CHANGE_FAILURE) {
+ LOGE("failed to sync state");
+ goto ERROR;
+ }
+
MMPLAYER_FLEAVE();
return;
@@ -2557,6 +2565,21 @@ ERROR:
}
void
+__mmplayer_gst_audio_deinterleave_no_more_pads(GstElement* object, gpointer data)
+{
+ mmplayer_t *player = (mmplayer_t *)data;
+
+ MMPLAYER_FENTER();
+ MMPLAYER_RETURN_IF_FAIL(player && player->pipeline && player->pipeline->mainbin);
+
+ player->no_more_pad = TRUE;
+ __mmplayer_pipeline_complete(NULL, player);
+
+ MMPLAYER_FLEAVE();
+ return;
+}
+
+void
__mmplayer_gst_set_pulsesink_property(mmplayer_t *player)
{
#define MAX_PROPS_LEN 128
@@ -2937,6 +2960,9 @@ __mmplayer_gst_make_audio_extract_sink(mmplayer_t *player, GList **bucket)
/* audiosink will be added after getting signal for each channel */
_mmplayer_add_signal_connection(player, G_OBJECT(audiobin[MMPLAYER_A_EXTRACT_DEINTERLEAVE].gst),
MM_PLAYER_SIGNAL_TYPE_AUTOPLUG, "pad-added", G_CALLBACK(__mmplayer_gst_audio_deinterleave_pad_added), (gpointer)player);
+ _mmplayer_add_signal_connection(player, G_OBJECT(audiobin[MMPLAYER_A_EXTRACT_DEINTERLEAVE].gst),
+ MM_PLAYER_SIGNAL_TYPE_AUTOPLUG, "no-more-pads", G_CALLBACK(__mmplayer_gst_audio_deinterleave_no_more_pads), (gpointer)player);
+ player->no_more_pad = FALSE;
} else {
/* 4-2. create fakesink to extract interlevaed pcm */
LOGD("add audio fakesink for interleaved audio");