mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-29 19:50:40 +00:00
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:
parent
209e1b5bf0
commit
d576963979
1 changed files with 25 additions and 0 deletions
|
@ -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,
|
||||||
|
|
Loading…
Reference in a new issue