Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Thompson <sw@jkqxz.net>2017-05-08 00:58:56 +0300
committerMark Thompson <sw@jkqxz.net>2017-10-17 22:56:30 +0300
commit281b68b0265953ab2623a39484d927a0e921c405 (patch)
tree77eb447519bf6ddd84e885eef424d481133ebc18 /libavcodec/vaapi_encode_h264.c
parent2e29ca2a9f19ba9a5b189f322f38497d2e2e3db0 (diff)
vaapi_h264: Add support for AUD NAL units
Adds a new private option to enable them (off by default). (cherry picked from commit 820a4483af13cf6fd51f13638e57bcd1c3f629d4)
Diffstat (limited to 'libavcodec/vaapi_encode_h264.c')
-rw-r--r--libavcodec/vaapi_encode_h264.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c
index 9a8019aa7b..b147457b75 100644
--- a/libavcodec/vaapi_encode_h264.c
+++ b/libavcodec/vaapi_encode_h264.c
@@ -53,6 +53,7 @@ typedef struct VAAPIEncodeH264Context {
int fixed_qp_p;
int fixed_qp_b;
+ H264RawAUD aud;
H264RawSPS sps;
H264RawPPS pps;
H264RawSEI sei;
@@ -77,6 +78,7 @@ typedef struct VAAPIEncodeH264Context {
CodedBitstreamContext *cbc;
CodedBitstreamFragment current_access_unit;
+ int aud_needed;
int sei_needed;
} VAAPIEncodeH264Context;
@@ -86,6 +88,7 @@ typedef struct VAAPIEncodeH264Options {
int low_power;
// Entropy encoder type.
int coder;
+ int aud;
int sei;
} VAAPIEncodeH264Options;
@@ -145,6 +148,13 @@ static int vaapi_encode_h264_write_sequence_header(AVCodecContext *avctx,
CodedBitstreamFragment *au = &priv->current_access_unit;
int err;
+ if (priv->aud_needed) {
+ err = vaapi_encode_h264_add_nal(avctx, au, &priv->aud);
+ if (err < 0)
+ goto fail;
+ priv->aud_needed = 0;
+ }
+
err = vaapi_encode_h264_add_nal(avctx, au, &priv->sps);
if (err < 0)
goto fail;
@@ -169,6 +179,13 @@ static int vaapi_encode_h264_write_slice_header(AVCodecContext *avctx,
CodedBitstreamFragment *au = &priv->current_access_unit;
int err;
+ if (priv->aud_needed) {
+ err = vaapi_encode_h264_add_nal(avctx, au, &priv->aud);
+ if (err < 0)
+ goto fail;
+ priv->aud_needed = 0;
+ }
+
err = vaapi_encode_h264_add_nal(avctx, au, &priv->slice);
if (err < 0)
goto fail;
@@ -191,6 +208,11 @@ static int vaapi_encode_h264_write_extra_header(AVCodecContext *avctx,
int err, i;
if (priv->sei_needed) {
+ if (priv->aud_needed) {
+ vaapi_encode_h264_add_nal(avctx, au, &priv->aud);
+ priv->aud_needed = 0;
+ }
+
memset(&priv->sei, 0, sizeof(priv->sei));
priv->sei.nal_unit_header.nal_unit_type = H264_NAL_SEI;
@@ -573,6 +595,14 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx,
priv->pic_order_cnt = pic->display_order - priv->last_idr_frame;
priv->dpb_delay = pic->display_order - pic->encode_order + 1;
+ if (opt->aud) {
+ priv->aud_needed = 1;
+ priv->aud.nal_unit_header.nal_unit_type = H264_NAL_AUD;
+ priv->aud.primary_pic_type = priv->primary_pic_type;
+ } else {
+ priv->aud_needed = 0;
+ }
+
if (opt->sei & SEI_IDENTIFIER && pic->encode_order == 0)
priv->sei_needed = 1;
@@ -931,6 +961,9 @@ static const AVOption vaapi_encode_h264_options[] = {
{ "vlc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, FLAGS, "coder" },
{ "ac", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, FLAGS, "coder" },
+ { "aud", "Include AUD",
+ OFFSET(aud), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, FLAGS },
+
{ "sei", "Set SEI to include",
OFFSET(sei), AV_OPT_TYPE_FLAGS,
{ .i64 = SEI_IDENTIFIER | SEI_TIMING },