#include <stdint.h>
#include <unistd.h>
-#include <sound_manager.h>
#include <asoundlib.h>
/* FIXME: This might be configurable (eg. property) */
gst_tinycompress_sink_init (GstTinycompressSink * sink)
{
int media_volume = -1;
+ int ret_sm = 0;
sink->dump = DEFAULT_DUMP;
sink->card = DEFAULT_COMPRESS_CARD_NUM;
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");
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
{
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);
}
{
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:
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)
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: