vaaph264enc: suppress avc if the driver does not support packed headers

Do not negotiate AVC output if the driver does not support it.
This commit is contained in:
Philipp Zabel 2020-01-08 17:37:22 +01:00 committed by Víctor Manuel Jáquez Leal
parent 209e1b5bf0
commit d576963979

View file

@ -195,6 +195,9 @@ find_best_profile (GstCaps * caps)
static GstCaps * static GstCaps *
get_available_caps (GstVaapiEncodeH264 * encode) get_available_caps (GstVaapiEncodeH264 * encode)
{ {
GstVaapiEncode *const base_encode = GST_VAAPIENCODE_CAST (encode);
GstVaapiEncoderH264 *const encoder =
GST_VAAPI_ENCODER_H264 (base_encode->encoder);
GstCaps *out_caps; GstCaps *out_caps;
GArray *profiles; GArray *profiles;
GstVaapiProfile profile; GstVaapiProfile profile;
@ -232,6 +235,13 @@ get_available_caps (GstVaapiEncodeH264 * encode)
g_value_unset (&profile_list); g_value_unset (&profile_list);
g_value_unset (&profile_v); g_value_unset (&profile_v);
if (!gst_vaapi_encoder_h264_supports_avc (encoder)) {
GST_INFO_OBJECT (encode,
"avc requires packed header support, outputting byte-stream");
gst_caps_set_simple (out_caps, "stream-format", G_TYPE_STRING,
"byte-stream", NULL);
}
encode->available_caps = out_caps; encode->available_caps = out_caps;
return encode->available_caps; return encode->available_caps;
@ -384,8 +394,23 @@ gst_vaapiencode_h264_get_caps (GstVaapiEncode * base_encode)
GstVaapiEncoderH264 *const encoder = GstVaapiEncoderH264 *const encoder =
GST_VAAPI_ENCODER_H264 (base_encode->encoder); GST_VAAPI_ENCODER_H264 (base_encode->encoder);
GstVaapiProfile profile; GstVaapiProfile profile;
GstCaps *available_caps;
GstStructure *structure;
const char *stream_format;
GstCaps *caps; GstCaps *caps;
if (encode->is_avc) {
available_caps = get_available_caps (encode);
structure = gst_caps_get_structure (available_caps, 0);
stream_format = gst_structure_get_string (structure, "stream-format");
if (g_strcmp0 (stream_format, "byte-stream") == 0) {
GST_WARNING_OBJECT (encode,
"downstream prefers avc, but the driver does not support it");
encode->is_avc = FALSE;
base_encode->need_codec_data = FALSE;
}
}
caps = gst_caps_from_string (GST_CODEC_CAPS); caps = gst_caps_from_string (GST_CODEC_CAPS);
gst_caps_set_simple (caps, "stream-format", G_TYPE_STRING, gst_caps_set_simple (caps, "stream-format", G_TYPE_STRING,