- vseq->bits_per_second = avctx->bit_rate;
- if (avctx->framerate.num > 0 && avctx->framerate.den > 0)
- vseq->frame_rate = (float)avctx->framerate.num / avctx->framerate.den;
- else
- vseq->frame_rate = (float)avctx->time_base.den / avctx->time_base.num;
-
- vseq->aspect_ratio_information = 1;
- vseq->vbv_buffer_size = avctx->rc_buffer_size / (16 * 1024);
-
- vseq->sequence_extension.bits.profile_and_level_indication =
- avctx->profile << 4 | avctx->level;
- vseq->sequence_extension.bits.progressive_sequence = 1;
- vseq->sequence_extension.bits.chroma_format = 1;
- vseq->sequence_extension.bits.low_delay = 0;
- vseq->sequence_extension.bits.frame_rate_extension_n = 0;
- vseq->sequence_extension.bits.frame_rate_extension_d = 0;
-
- vseq->new_gop_header = 0;
- vseq->gop_header.bits.time_code = 0;
- vseq->gop_header.bits.closed_gop = 1;
- vseq->gop_header.bits.broken_link = 0;
-
- vpic->forward_reference_picture = VA_INVALID_ID;
- vpic->backward_reference_picture = VA_INVALID_ID;
- vpic->reconstructed_picture = VA_INVALID_ID;
-
- vpic->coded_buf = VA_INVALID_ID;
-
- vpic->temporal_reference = 0;
- vpic->f_code[0][0] = 15;
- vpic->f_code[0][1] = 15;
- vpic->f_code[1][0] = 15;
- vpic->f_code[1][1] = 15;
-
- vpic->picture_coding_extension.bits.intra_dc_precision = 0;
- vpic->picture_coding_extension.bits.picture_structure = 3;
- vpic->picture_coding_extension.bits.top_field_first = 0;
- vpic->picture_coding_extension.bits.frame_pred_frame_dct = 1;
- vpic->picture_coding_extension.bits.concealment_motion_vectors = 0;
- vpic->picture_coding_extension.bits.q_scale_type = 0;
- vpic->picture_coding_extension.bits.intra_vlc_format = 0;
- vpic->picture_coding_extension.bits.alternate_scan = 0;
- vpic->picture_coding_extension.bits.repeat_first_field = 0;
- vpic->picture_coding_extension.bits.progressive_frame = 1;
- vpic->picture_coding_extension.bits.composite_display_flag = 0;
-
- priv->bit_rate = (avctx->bit_rate + 399) / 400;
- priv->vbv_buffer_size = avctx->rc_buffer_size / (16 * 1024);
+ se->profile_and_level_indication = avctx->profile << 4 | avctx->level;
+ se->progressive_sequence = 1;
+ se->chroma_format = 1;
+
+ se->horizontal_size_extension = avctx->width >> 12;
+ se->vertical_size_extension = avctx->height >> 12;
+
+ se->bit_rate_extension = priv->bit_rate >> 18;
+ se->vbv_buffer_size_extension = priv->vbv_buffer_size >> 10;
+ se->low_delay = ctx->b_per_p == 0;
+
+ se->frame_rate_extension_n = ext_n;
+ se->frame_rate_extension_d = ext_d;
+
+
+ // Sequence display extension
+
+ priv->sequence_display_extension.extension_start_code =
+ MPEG2_START_EXTENSION;
+ priv->sequence_display_extension.extension_start_code_identifier =
+ MPEG2_EXTENSION_SEQUENCE_DISPLAY;
+
+ sde->video_format = 5;
+ if (avctx->color_primaries != AVCOL_PRI_UNSPECIFIED ||
+ avctx->color_trc != AVCOL_TRC_UNSPECIFIED ||
+ avctx->colorspace != AVCOL_SPC_UNSPECIFIED) {
+ sde->colour_description = 1;
+ sde->colour_primaries = avctx->color_primaries;
+ sde->transfer_characteristics = avctx->color_trc;
+ sde->matrix_coefficients = avctx->colorspace;
+ } else {
+ sde->colour_description = 0;
+ }
+
+ sde->display_horizontal_size = avctx->width;
+ sde->display_vertical_size = avctx->height;
+
+
+ // GOP header
+
+ goph->group_start_code = MPEG2_START_GROUP;
+
+ goph->time_code = 0;
+ goph->closed_gop = 1;
+ goph->broken_link = 0;
+
+
+ // Defaults for picture header
+
+ ph->picture_start_code = MPEG2_START_PICTURE;
+
+ ph->vbv_delay = 0xffff; // Not currently calculated.
+
+ ph->full_pel_forward_vector = 0;
+ ph->forward_f_code = 7;
+ ph->full_pel_backward_vector = 0;
+ ph->forward_f_code = 7;
+
+
+ // Defaults for picture coding extension
+
+ priv->picture_coding_extension.extension_start_code =
+ MPEG2_START_EXTENSION;
+ priv->picture_coding_extension.extension_start_code_identifier =
+ MPEG2_EXTENSION_PICTURE_CODING;
+
+ pce->intra_dc_precision = 0;
+ pce->picture_structure = 3;
+ pce->top_field_first = 0;
+ pce->frame_pred_frame_dct = 1;
+ pce->concealment_motion_vectors = 0;
+ pce->q_scale_type = 0;
+ pce->intra_vlc_format = 0;
+ pce->alternate_scan = 0;
+ pce->repeat_first_field = 0;
+ pce->progressive_frame = 1;
+ pce->composite_display_flag = 0;
+
+
+
+ *vseq = (VAEncSequenceParameterBufferMPEG2) {
+ .intra_period = avctx->gop_size,
+ .ip_period = ctx->b_per_p + 1,
+
+ .picture_width = avctx->width,
+ .picture_height = avctx->height,
+
+ .bits_per_second = avctx->bit_rate,
+ .frame_rate = av_q2d(priv->frame_rate),
+ .aspect_ratio_information = sh->aspect_ratio_information,
+ .vbv_buffer_size = priv->vbv_buffer_size,
+
+ .sequence_extension.bits = {
+ .profile_and_level_indication = se->profile_and_level_indication,
+ .progressive_sequence = se->progressive_sequence,
+ .chroma_format = se->chroma_format,
+ .low_delay = se->low_delay,
+ .frame_rate_extension_n = se->frame_rate_extension_n,
+ .frame_rate_extension_d = se->frame_rate_extension_d,
+ },
+
+ .new_gop_header = 1,
+ .gop_header.bits = {
+ .time_code = goph->time_code,
+ .closed_gop = goph->closed_gop,
+ .broken_link = goph->broken_link,
+ },
+ };
+
+ *vpic = (VAEncPictureParameterBufferMPEG2) {
+ .forward_reference_picture = VA_INVALID_ID,
+ .backward_reference_picture = VA_INVALID_ID,
+ .reconstructed_picture = VA_INVALID_ID,
+ .coded_buf = VA_INVALID_ID,
+
+ .vbv_delay = 0xffff,
+ .f_code = { { 15, 15 }, { 15, 15 } },
+
+ .picture_coding_extension.bits = {
+ .intra_dc_precision = pce->intra_dc_precision,
+ .picture_structure = pce->picture_structure,
+ .top_field_first = pce->top_field_first,
+ .frame_pred_frame_dct = pce->frame_pred_frame_dct,
+ .concealment_motion_vectors = pce->concealment_motion_vectors,
+ .q_scale_type = pce->q_scale_type,
+ .intra_vlc_format = pce->intra_vlc_format,
+ .alternate_scan = pce->alternate_scan,
+ .repeat_first_field = pce->repeat_first_field,
+ .progressive_frame = pce->progressive_frame,
+ .composite_display_flag = pce->composite_display_flag,
+ },
+
+ .composite_display.bits = {
+ .v_axis = pce->v_axis,
+ .field_sequence = pce->field_sequence,
+ .sub_carrier = pce->sub_carrier,
+ .burst_amplitude = pce->burst_amplitude,
+ .sub_carrier_phase = pce->sub_carrier_phase,
+ },
+ };