mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
Merge commit 'ff007e30d8d45ba1ff2b2a4615f1cd5bafb50626'
* commit 'ff007e30d8d45ba1ff2b2a4615f1cd5bafb50626': vaapi_h264: Add workaround for bad SEI in old Intel drivers Merged-by: Mark Thompson <sw@jkqxz.net>
This commit is contained in:
commit
4251e25272
@ -82,6 +82,7 @@ typedef struct VAAPIEncodeH264Context {
|
||||
CodedBitstreamFragment current_access_unit;
|
||||
int aud_needed;
|
||||
int sei_needed;
|
||||
int sei_cbr_workaround_needed;
|
||||
} VAAPIEncodeH264Context;
|
||||
|
||||
typedef struct VAAPIEncodeH264Options {
|
||||
@ -258,6 +259,19 @@ static int vaapi_encode_h264_write_extra_header(AVCodecContext *avctx,
|
||||
|
||||
*type = VAEncPackedHeaderRawData;
|
||||
return 0;
|
||||
|
||||
#if !CONFIG_VAAPI_1
|
||||
} else if (priv->sei_cbr_workaround_needed) {
|
||||
// Insert a zero-length header using the old SEI type. This is
|
||||
// required to avoid triggering broken behaviour on Intel platforms
|
||||
// in CBR mode where an invalid SEI message is generated by the
|
||||
// driver and inserted into the stream.
|
||||
*data_len = 0;
|
||||
*type = VAEncPackedHeaderH264_SEI;
|
||||
priv->sei_cbr_workaround_needed = 0;
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
} else {
|
||||
return AVERROR_EOF;
|
||||
}
|
||||
@ -614,6 +628,10 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx,
|
||||
|
||||
if (opt->sei & SEI_IDENTIFIER && pic->encode_order == 0)
|
||||
priv->sei_needed = 1;
|
||||
#if !CONFIG_VAAPI_1
|
||||
if (ctx->va_rc_mode == VA_RC_CBR)
|
||||
priv->sei_cbr_workaround_needed = 1;
|
||||
#endif
|
||||
|
||||
if (opt->sei & SEI_TIMING) {
|
||||
memset(&priv->pic_timing, 0, sizeof(priv->pic_timing));
|
||||
|
Loading…
Reference in New Issue
Block a user