Quoting Mark Thompson (2016-06-01 21:13:27)
> Send buffering_period and pic_timing messages when in modes
> targetting bitrate. Also adds NAL HRD parameters to VUI.
> ---
> Fixed dpb_output_delay.
>
> libavcodec/vaapi_encode_h264.c | 207
> ++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 206 insertions(+), 1 deletion(-)
>
> diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c
> index 139e6e9..573883f 100644
> --- a/libavcodec/vaapi_encode_h264.c
> +++ b/libavcodec/vaapi_encode_h264.c
> @@ -26,6 +26,7 @@
>
> #include "avcodec.h"
> #include "h264.h"
> +#include "h264_sei.h"
> #include "internal.h"
> #include "vaapi_encode.h"
> #include "vaapi_encode_h26x.h"
> @@ -84,6 +85,22 @@ typedef struct VAAPIEncodeH264MiscSequenceParams {
> char low_delay_hrd_flag;
> char pic_struct_present_flag;
> char bitstream_restriction_flag;
> +
> + unsigned int cpb_cnt_minus1;
> + unsigned int bit_rate_scale;
> + unsigned int cpb_size_scale;
> + unsigned int bit_rate_value_minus1[32];
> + unsigned int cpb_size_value_minus1[32];
> + char cbr_flag[32];
> + unsigned int initial_cpb_removal_delay_length_minus1;
> + unsigned int cpb_removal_delay_length_minus1;
> + unsigned int dpb_output_delay_length_minus1;
> + unsigned int time_offset_length;
> +
> + unsigned int initial_cpb_removal_delay;
> + unsigned int initial_cpb_removal_delay_offset;
> +
> + unsigned int pic_struct;
> } VAAPIEncodeH264MiscSequenceParams;
>
> // This structure contains all possibly-useful per-slice syntax elements
> @@ -126,7 +143,11 @@ typedef struct VAAPIEncodeH264Context {
> int next_frame_num;
> int64_t idr_pic_count;
>
> + int cpb_delay;
> + int dpb_delay;
> +
> // Rate control configuration.
> + int send_timing_sei;
> struct {
> VAEncMiscParameterBuffer misc;
> VAEncMiscParameterRateControl rc;
> @@ -183,6 +204,7 @@ static void vaapi_encode_h264_write_vui(PutBitContext
> *pbc,
> VAEncSequenceParameterBufferH264 *vseq = ctx->codec_sequence_params;
> VAAPIEncodeH264Context *priv = ctx->priv_data;
> VAAPIEncodeH264MiscSequenceParams *mseq = &priv->misc_sequence_params;
> + int i;
>
> u(1, vvui_field(aspect_ratio_info_present_flag));
> if (vseq->vui_fields.bits.aspect_ratio_info_present_flag) {
> @@ -224,7 +246,18 @@ static void vaapi_encode_h264_write_vui(PutBitContext
> *pbc,
>
> u(1, mseq_var(nal_hrd_parameters_present_flag));
> if (mseq->nal_hrd_parameters_present_flag) {
> - av_assert0(0 && "nal hrd parameters not supported");
> + ue(mseq_var(cpb_cnt_minus1));
> + u(4, mseq_var(bit_rate_scale));
> + u(4, mseq_var(cpb_size_scale));
> + for (i = 0; i < 1; i++) {
<= cpb_cnt_minus1?
Not that it makes any difference.
Generally looks fine.
--
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel