if (err < 0)
goto fail;
- ff_cbs_fragment_uninit(&priv->cbc, au);
+ ff_cbs_fragment_uninit(priv->cbc, au);
- *type = VAEncPackedHeaderH264_SEI;
+ *type = VAEncPackedHeaderRawData;
return 0;
-#if !HAVE_VAAPI_1
+
++#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;
}
if (opt->sei & SEI_IDENTIFIER && pic->encode_order == 0)
priv->sei_needed = 1;
-#if !HAVE_VAAPI_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));