From bf43460018eceb5942e7f0a135bc86f212b9f638 Mon Sep 17 00:00:00 2001 From: Barun Kumar Singh Date: Thu, 28 Apr 2016 15:19:17 +0530 Subject: [PATCH] player: Add audio-video-offset property and setter/getter API https://bugzilla.gnome.org/show_bug.cgi?id=765315 --- docs/libs/gst-plugins-bad-libs-sections.txt | 3 ++ gst-libs/gst/player/gstplayer.c | 52 +++++++++++++++++++++++++++++ gst-libs/gst/player/gstplayer.h | 4 ++- win32/common/libgstplayer.def | 2 ++ 4 files changed, 60 insertions(+), 1 deletion(-) diff --git a/docs/libs/gst-plugins-bad-libs-sections.txt b/docs/libs/gst-plugins-bad-libs-sections.txt index 5e913bc..5014d89 100644 --- a/docs/libs/gst-plugins-bad-libs-sections.txt +++ b/docs/libs/gst-plugins-bad-libs-sections.txt @@ -1750,6 +1750,9 @@ gst_player_set_multiview_mode gst_player_get_multiview_flags gst_player_set_multiview_flags +gst_player_get_audio_video_offset +gst_player_set_audio_video_offset + gst_player_get_rate gst_player_set_rate diff --git a/gst-libs/gst/player/gstplayer.c b/gst-libs/gst/player/gstplayer.c index 3ba51b2..5a01dc5 100644 --- a/gst-libs/gst/player/gstplayer.c +++ b/gst-libs/gst/player/gstplayer.c @@ -65,6 +65,7 @@ GST_DEBUG_CATEGORY_STATIC (gst_player_debug); #define DEFAULT_MUTE FALSE #define DEFAULT_RATE 1.0 #define DEFAULT_POSITION_UPDATE_INTERVAL_MS 100 +#define DEFAULT_AUDIO_VIDEO_OFFSET 0 GQuark gst_player_error_quark (void) @@ -97,6 +98,7 @@ enum PROP_POSITION_UPDATE_INTERVAL, PROP_VIDEO_MULTIVIEW_MODE, PROP_VIDEO_MULTIVIEW_FLAGS, + PROP_AUDIO_VIDEO_OFFSET, PROP_LAST }; @@ -342,6 +344,10 @@ gst_player_class_init (GstPlayerClass * klass) GST_TYPE_VIDEO_MULTIVIEW_FLAGS, GST_VIDEO_MULTIVIEW_FLAGS_NONE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + param_specs[PROP_AUDIO_VIDEO_OFFSET] = + g_param_spec_int64 ("audio-video-offset", "Audio Video Offset", + "The synchronisation offset between audio and video in nanoseconds", + G_MININT64, G_MAXINT64, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (gobject_class, PROP_LAST, param_specs); @@ -600,6 +606,9 @@ gst_player_set_property (GObject * object, guint prop_id, g_object_set_property (G_OBJECT (self->playbin), "video-multiview-flags", value); break; + case PROP_AUDIO_VIDEO_OFFSET: + g_object_set_property (G_OBJECT (self->playbin), "av-offset", value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -706,6 +715,9 @@ gst_player_get_property (GObject * object, guint prop_id, g_value_get_flags (value)); break; } + case PROP_AUDIO_VIDEO_OFFSET: + g_object_get_property (G_OBJECT (self->playbin), "av-offset", value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -3787,6 +3799,46 @@ gst_player_set_multiview_flags (GstPlayer * self, GstVideoMultiviewFlags flags) g_object_set (self, "video-multiview-flags", flags, NULL); } +/** + * gst_player_get_audio_video_offset: + * @player: #GstPlayer instance + * + * Retrieve the current value of audio-video-offset property + * + * Returns: The current value of audio-video-offset in nanoseconds + * + * Since 1.10 + */ +gint64 +gst_player_get_audio_video_offset (GstPlayer * self) +{ + gint64 val = 0; + + g_return_val_if_fail (GST_IS_PLAYER (self), DEFAULT_AUDIO_VIDEO_OFFSET); + + g_object_get (self, "audio-video-offset", &val, NULL); + + return val; +} + +/** + * gst_player_set_audio_video_offset: + * @player: #GstPlayer instance + * @offset: #gint64 in nanoseconds + * + * Sets audio-video-offset property by value of @offset + * + * Returns: void + * + * Since 1.10 + */ +void +gst_player_set_audio_video_offset (GstPlayer * self, gint64 offset) +{ + g_return_if_fail (GST_IS_PLAYER (self)); + + g_object_set (self, "audio-video-offset", offset, NULL); +} #define C_ENUM(v) ((gint) v) #define C_FLAGS(v) ((guint) v) diff --git a/gst-libs/gst/player/gstplayer.h b/gst-libs/gst/player/gstplayer.h index f3bd09d..0ab4233 100644 --- a/gst-libs/gst/player/gstplayer.h +++ b/gst-libs/gst/player/gstplayer.h @@ -188,7 +188,9 @@ GstVideoMultiviewFlags gst_player_get_multiview_flags (GstPlayer * player); void gst_player_set_multiview_flags (GstPlayer * player, GstVideoMultiviewFlags flags); - +gint64 gst_player_get_audio_video_offset (GstPlayer * player); +void gst_player_set_audio_video_offset (GstPlayer * player, + gint64 offset); G_END_DECLS diff --git a/win32/common/libgstplayer.def b/win32/common/libgstplayer.def index 609af69..53fab85 100644 --- a/win32/common/libgstplayer.def +++ b/win32/common/libgstplayer.def @@ -13,6 +13,7 @@ EXPORTS gst_player_g_main_context_signal_dispatcher_get_type gst_player_g_main_context_signal_dispatcher_new gst_player_get_audio_streams + gst_player_get_audio_video_offset gst_player_get_color_balance gst_player_get_current_audio_track gst_player_get_current_subtitle_track @@ -50,6 +51,7 @@ EXPORTS gst_player_seek gst_player_set_audio_track gst_player_set_audio_track_enabled + gst_player_set_audio_video_offset gst_player_set_color_balance gst_player_set_multiview_flags gst_player_set_multiview_mode -- 2.7.4