tinycompresssink: integrate sound-manager virtual stream 13/203413/1 accepted/tizen/unified/20190416.071502 submit/tizen/20190415.102201
authorSeungbae Shin <seungbae.shin@samsung.com>
Fri, 12 Apr 2019 10:41:54 +0000 (19:41 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Fri, 12 Apr 2019 10:42:44 +0000 (19:42 +0900)
Change-Id: I24ef9b2f32b4059eba12e8e134510acba12036ca

packaging/gst-plugins-tizen.spec
tinycompresssink/src/gsttinycompresssink.c
tinycompresssink/src/gsttinycompresssink.h

index eb21e6e..7ff853a 100644 (file)
@@ -5,7 +5,7 @@
 Name:       gst-plugins-tizen
 Version:    1.0.0
 Summary:    GStreamer tizen plugins (common)
-Release:    69
+Release:    70
 Group:      Multimedia/Framework
 Url:        http://gstreamer.freedesktop.org/
 License:    LGPL-2.1+
index 84671be..2d47d2c 100644 (file)
@@ -39,7 +39,6 @@
 #include <stdint.h>
 #include <unistd.h>
 
-#include <sound_manager.h>
 #include <asoundlib.h>
 
 /* FIXME: This might be configurable (eg. property) */
@@ -344,6 +343,7 @@ static void
 gst_tinycompress_sink_init (GstTinycompressSink * sink)
 {
   int media_volume = -1;
+  int ret_sm = 0;
 
   sink->dump = DEFAULT_DUMP;
   sink->card = DEFAULT_COMPRESS_CARD_NUM;
@@ -355,6 +355,7 @@ gst_tinycompress_sink_init (GstTinycompressSink * sink)
   sink->mute = DEFAULT_PROP_MUTE;
   sink->volume = DEFAULT_PROP_VOLUME;
 
+  /* volume setup */
   if (sound_manager_get_volume (SOUND_TYPE_MEDIA,
           &media_volume) != SOUND_MANAGER_ERROR_NONE)
     GST_ERROR_OBJECT (sink, "failed to get media volume");
@@ -367,6 +368,16 @@ gst_tinycompress_sink_init (GstTinycompressSink * sink)
       media_volume, sink->volume_cb_id);
 
   _update_volume (sink, media_volume);
+
+  /* virtual stream setup */
+  ret_sm = sound_manager_create_stream_information_internal(SOUND_STREAM_TYPE_MEDIA_COMPRESSED, NULL, NULL, &sink->stream_info_h);
+  if (ret_sm == SOUND_MANAGER_ERROR_NONE) {
+    ret_sm = sound_manager_create_virtual_stream(sink->stream_info_h, &sink->vstream_h);
+    if (ret_sm != SOUND_MANAGER_ERROR_NONE)
+      GST_ERROR_OBJECT (sink, "failed to create virtual stream : 0x%X\n", ret_sm);
+  } else {
+    GST_ERROR_OBJECT (sink, "failed to create stream information internal (MEDIA_COMPRESSED) : 0x%X\n", ret_sm);
+  }
 }
 
 static void
@@ -374,12 +385,23 @@ gst_tinycompress_sink_finalize (GObject * object)
 {
   GstTinycompressSink *sink = GST_TINYCOMPRESS_SINK (object);
 
+  /* volume cb */
   if (sink->volume_cb_id != -1)
     if (sound_manager_remove_volume_changed_cb (sink->volume_cb_id) !=
         SOUND_MANAGER_ERROR_NONE)
       GST_ERROR_OBJECT (sink, "failed to remove volume changed cb (id:%d)",
           sink->volume_cb_id);
 
+  /* virtual stream */
+  if (sink->vstream_h) {
+    sound_manager_destroy_virtual_stream(sink->vstream_h);
+    sink->vstream_h = NULL;
+  }
+  if (sink->stream_info_h) {
+    sound_manager_destroy_stream_information(sink->stream_info_h);
+    sink->stream_info_h = NULL;
+  }
+
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
@@ -730,6 +752,7 @@ gst_tinycompress_sink_change_state (GstElement * element,
 {
   GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
   GstTinycompressSink *sink = GST_TINYCOMPRESS_SINK (element);
+  int ret_sm = 0;
 
   switch (transition) {
     case GST_STATE_CHANGE_NULL_TO_READY:
@@ -742,6 +765,13 @@ gst_tinycompress_sink_change_state (GstElement * element,
 
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
       GST_INFO_OBJECT (sink, "PAUSED_TO_PLAYING");
+
+      if (sink->vstream_h) {
+        ret_sm = sound_manager_start_virtual_stream(sink->vstream_h);
+        if (ret_sm)
+            GST_ERROR_OBJECT (sink, "fail to sound_manager_start_virtual_stream(), ret(0x%x)\n", ret_sm);
+      }
+
       if (!sink->compress)
         gst_tinycompress_open (sink);
       if (sink->compress_paused)
@@ -757,7 +787,14 @@ gst_tinycompress_sink_change_state (GstElement * element,
   switch (transition) {
     case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
       GST_INFO_OBJECT (sink, "PLAYING_TO_PAUSED");
+
       gst_tinycompress_pause (sink);
+
+      if (sink->vstream_h) {
+        ret_sm = sound_manager_stop_virtual_stream(sink->vstream_h);
+        if (ret_sm)
+          GST_ERROR_OBJECT (sink, "fail to sound_manager_stop_virtual_stream(), ret(0x%x)\n", ret_sm);
+      }
       break;
 
     case GST_STATE_CHANGE_PAUSED_TO_READY:
index e1a99f6..439bd36 100644 (file)
@@ -26,6 +26,8 @@
 #include <stdbool.h>
 #include "tinycompress/tinycompress.h"
 #include <sound/compress_params.h>
+#include <sound_manager.h>
+#include <sound_manager_internal.h>
 
 G_BEGIN_DECLS
 #define GST_TYPE_TINYCOMPRESS_SINK \
@@ -68,6 +70,9 @@ struct _GstTinycompressSink
   struct compr_config t_config;
   struct snd_codec t_codec;
   struct compress *compress;
+
+  sound_stream_info_h stream_info_h;
+  virtual_sound_stream_h vstream_h;
 };
 
 struct _GstTinycompressSinkClass