Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
GStreamer
gst-editing-services
Commits
8e9e95b9
Commit
8e9e95b9
authored
Jan 12, 2021
by
Thibault Saunier
🌵
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
audio-track: Respect track restrictions in our gaps
Avoiding not negotiated errors in specific cases. Part-of: <
!225
>
parent
d1aa359c
Pipeline
#258127
waiting for manual action with stages
in 33 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
57 additions
and
4 deletions
+57
-4
ges/ges-audio-track.c
ges/ges-audio-track.c
+57
-4
No files found.
ges/ges-audio-track.c
View file @
8e9e95b9
...
...
@@ -69,15 +69,68 @@ G_DEFINE_TYPE_WITH_PRIVATE (GESAudioTrack, ges_audio_track, GES_TYPE_TRACK);
/****************************************************
* Private methods and utils *
****************************************************/
static
void
_sync_capsfilter_with_track
(
GESTrack
*
track
,
GstElement
*
capsfilter
)
{
GstCaps
*
restriction
,
*
caps
;
gint
rate
;
GstStructure
*
structure
;
g_object_get
(
track
,
"restriction-caps"
,
&
restriction
,
NULL
);
if
(
restriction
==
NULL
)
return
;
if
(
gst_caps_get_size
(
restriction
)
==
0
)
goto
done
;
structure
=
gst_caps_get_structure
(
restriction
,
0
);
if
(
!
gst_structure_get_int
(
structure
,
"rate"
,
&
rate
))
goto
done
;
caps
=
gst_caps_new_simple
(
"audio/x-raw"
,
"rate"
,
G_TYPE_INT
,
rate
,
NULL
);
g_object_set
(
capsfilter
,
"caps"
,
caps
,
NULL
);
gst_caps_unref
(
caps
);
done:
gst_caps_unref
(
restriction
);
}
static
void
_track_restriction_changed_cb
(
GESTrack
*
track
,
GParamSpec
*
arg
G_GNUC_UNUSED
,
GstElement
*
capsfilter
)
{
_sync_capsfilter_with_track
(
track
,
capsfilter
);
}
static
void
_weak_notify_cb
(
GESTrack
*
track
,
GstElement
*
capsfilter
)
{
g_signal_handlers_disconnect_by_func
(
track
,
(
GCallback
)
_track_restriction_changed_cb
,
capsfilter
);
}
static
GstElement
*
create_element_for_raw_audio_gap
(
GESTrack
*
track
)
{
GstElement
*
elem
;
GstElement
*
bin
;
GstElement
*
capsfilter
;
bin
=
gst_parse_bin_from_description
(
"audiotestsrc wave=silence name=src ! audioconvert ! audioresample ! audioconvert ! capsfilter name=gapfilter caps=audio/x-raw"
,
TRUE
,
NULL
);
capsfilter
=
gst_bin_get_by_name
(
GST_BIN
(
bin
),
"gapfilter"
);
g_object_weak_ref
(
G_OBJECT
(
capsfilter
),
(
GWeakNotify
)
_weak_notify_cb
,
track
);
g_signal_connect
(
track
,
"notify::restriction-caps"
,
(
GCallback
)
_track_restriction_changed_cb
,
capsfilter
);
_sync_capsfilter_with_track
(
track
,
capsfilter
);
elem
=
gst_element_factory_make
(
"audiotestsrc"
,
NULL
);
g_object_set
(
elem
,
"wave"
,
4
,
NULL
);
gst_object_unref
(
capsfilter
);
return
elem
;
return
bin
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment