Skip to content

Commit

Permalink
encodebin: handle video encoder preset fail.
Browse files Browse the repository at this point in the history
Check video encoder preset before request muxer pad as MOV/MP4 don't
support addition/removal of tracks at random times.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1064>
  • Loading branch information
Bing Song authored and GStreamer Marge Bot committed Mar 19, 2021
1 parent 98249a5 commit d7de78e
Showing 1 changed file with 16 additions and 12 deletions.
28 changes: 16 additions & 12 deletions gst/encoding/gstencodebasebin.c
Expand Up @@ -1434,6 +1434,22 @@ _create_stream_group (GstEncodeBaseBin * ebin, GstEncodingProfile * sprof,
* * One for already encoded data
*/

/* Put _get_encoder() before request pad from muxer as _get_encoder() may fail and
* MOV/MP4 muxer don't support addition/removal of tracks at random times */
sgroup->encoder = _get_encoder (ebin, sprof);
if (!sgroup->encoder && (gst_encoding_profile_get_preset (sgroup->profile)
|| gst_encoding_profile_get_preset_name (sgroup->profile))) {

if (!encoder_not_found)
_post_missing_plugin_message (ebin, sprof);
else
*encoder_not_found = TRUE;
goto cleanup;
} else {
/* passthrough can still work, if we discover that *
* encoding is required we post a missing plugin message */
}

/* Muxer.
* If we are handling a container profile, figure out if the muxer has a
* sinkpad compatible with the selected profile */
Expand Down Expand Up @@ -1497,7 +1513,6 @@ _create_stream_group (GstEncodeBaseBin * ebin, GstEncodingProfile * sprof,
goto outfilter_link_failure;
last = sgroup->outfilter;

sgroup->encoder = _get_encoder (ebin, sprof);
sgroup->parser = _get_parser (ebin, sgroup->profile, sgroup->encoder);
if (sgroup->parser != NULL) {
GST_DEBUG ("Got a parser %s", GST_ELEMENT_NAME (sgroup->parser));
Expand Down Expand Up @@ -1622,17 +1637,6 @@ _create_stream_group (GstEncodeBaseBin * ebin, GstEncodingProfile * sprof,
gst_object_unref (sinkpad);
gst_object_unref (srcpad);
srcpad = NULL;
} else if (gst_encoding_profile_get_preset (sgroup->profile)
|| gst_encoding_profile_get_preset_name (sgroup->profile)) {

if (!encoder_not_found)
_post_missing_plugin_message (ebin, sprof);
else
*encoder_not_found = TRUE;
goto cleanup;
} else {
/* passthrough can still work, if we discover that *
* encoding is required we post a missing plugin message */
}


Expand Down

0 comments on commit d7de78e

Please sign in to comment.