diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-02-16 21:14:00 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-02-16 23:30:09 +0100 |
commit | b7fe35c9e50e1701274364adf7280bf4a02b092b (patch) | |
tree | 05d5ffb039ce76bbc782d36704bdf8b135df50ce /libavcodec/dxva2_h264.c | |
parent | ddbbfd95bee4105fcb75f3b7c039b6c08efe36b4 (diff) | |
parent | 2c541554076cc8a72e7145d4da30389ca763f32f (diff) | |
download | ffmpeg-b7fe35c9e50e1701274364adf7280bf4a02b092b.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
h264: deMpegEncContextize
Conflicts:
libavcodec/dxva2_h264.c
libavcodec/h264.c
libavcodec/h264.h
libavcodec/h264_cabac.c
libavcodec/h264_cavlc.c
libavcodec/h264_loopfilter.c
libavcodec/h264_mb_template.c
libavcodec/h264_parser.c
libavcodec/h264_ps.c
libavcodec/h264_refs.c
libavcodec/h264_sei.c
libavcodec/svq3.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/dxva2_h264.c')
-rw-r--r-- | libavcodec/dxva2_h264.c | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/libavcodec/dxva2_h264.c b/libavcodec/dxva2_h264.c index f7d4e5d4ec..ce9e3ff4a7 100644 --- a/libavcodec/dxva2_h264.c +++ b/libavcodec/dxva2_h264.c @@ -44,15 +44,14 @@ static void fill_picture_entry(DXVA_PicEntry_H264 *pic, static void fill_picture_parameters(struct dxva_context *ctx, const H264Context *h, DXVA_PicParams_H264 *pp) { - const MpegEncContext *s = &h->s; - const Picture *current_picture = s->current_picture_ptr; + const Picture *current_picture = h->cur_pic_ptr; int i, j; memset(pp, 0, sizeof(*pp)); /* Configure current picture */ fill_picture_entry(&pp->CurrPic, ff_dxva2_get_surface_index(ctx, current_picture), - s->picture_structure == PICT_BOTTOM_FIELD); + h->picture_structure == PICT_BOTTOM_FIELD); /* Configure the set of references */ pp->UsedForReferenceFlags = 0; pp->NonExistingFrameFlags = 0; @@ -88,13 +87,13 @@ static void fill_picture_parameters(struct dxva_context *ctx, const H264Context } } - pp->wFrameWidthInMbsMinus1 = s->mb_width - 1; - pp->wFrameHeightInMbsMinus1 = s->mb_height - 1; + pp->wFrameWidthInMbsMinus1 = h->mb_width - 1; + pp->wFrameHeightInMbsMinus1 = h->mb_height - 1; pp->num_ref_frames = h->sps.ref_frame_count; - pp->wBitFields = ((s->picture_structure != PICT_FRAME) << 0) | + pp->wBitFields = ((h->picture_structure != PICT_FRAME) << 0) | ((h->sps.mb_aff && - (s->picture_structure == PICT_FRAME)) << 1) | + (h->picture_structure == PICT_FRAME)) << 1) | (h->sps.residual_color_transform_flag << 2) | /* sp_for_switch_flag (not implemented by FFmpeg) */ (0 << 3) | @@ -120,11 +119,11 @@ static void fill_picture_parameters(struct dxva_context *ctx, const H264Context pp->Reserved16Bits = 3; /* FIXME is there a way to detect the right mode ? */ pp->StatusReportFeedbackNumber = 1 + ctx->report_id++; pp->CurrFieldOrderCnt[0] = 0; - if ((s->picture_structure & PICT_TOP_FIELD) && + if ((h->picture_structure & PICT_TOP_FIELD) && current_picture->field_poc[0] != INT_MAX) pp->CurrFieldOrderCnt[0] = current_picture->field_poc[0]; pp->CurrFieldOrderCnt[1] = 0; - if ((s->picture_structure & PICT_BOTTOM_FIELD) && + if ((h->picture_structure & PICT_BOTTOM_FIELD) && current_picture->field_poc[1] != INT_MAX) pp->CurrFieldOrderCnt[1] = current_picture->field_poc[1]; pp->pic_init_qs_minus26 = h->pps.init_qs - 26; @@ -200,7 +199,6 @@ static void fill_slice_long(AVCodecContext *avctx, DXVA_Slice_H264_Long *slice, { const H264Context *h = avctx->priv_data; struct dxva_context *ctx = avctx->hwaccel_context; - const MpegEncContext *s = &h->s; unsigned list; memset(slice, 0, sizeof(*slice)); @@ -208,9 +206,9 @@ static void fill_slice_long(AVCodecContext *avctx, DXVA_Slice_H264_Long *slice, slice->SliceBytesInBuffer = size; slice->wBadSliceChopping = 0; - slice->first_mb_in_slice = (s->mb_y >> FIELD_OR_MBAFF_PICTURE) * s->mb_width + s->mb_x; + slice->first_mb_in_slice = (h->mb_y >> FIELD_OR_MBAFF_PICTURE) * h->mb_width + h->mb_x; slice->NumMbsForSlice = 0; /* XXX it is set once we have all slices */ - slice->BitOffsetToSliceData = get_bits_count(&s->gb); + slice->BitOffsetToSliceData = get_bits_count(&h->gb); slice->slice_type = ff_h264_get_slice_type(h); if (h->slice_type_fixed) slice->slice_type += 5; @@ -260,7 +258,7 @@ static void fill_slice_long(AVCodecContext *avctx, DXVA_Slice_H264_Long *slice, } } slice->slice_qs_delta = 0; /* XXX not implemented by FFmpeg */ - slice->slice_qp_delta = s->qscale - h->pps.init_qp; + slice->slice_qp_delta = h->qscale - h->pps.init_qp; slice->redundant_pic_cnt = h->redundant_pic_count; if (h->slice_type == AV_PICTURE_TYPE_B) slice->direct_spatial_mv_pred_flag = h->direct_spatial_mv_pred; @@ -277,10 +275,9 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, DXVA2_DecodeBufferDesc *sc) { const H264Context *h = avctx->priv_data; - const MpegEncContext *s = &h->s; - const unsigned mb_count = s->mb_width * s->mb_height; + const unsigned mb_count = h->mb_width * h->mb_height; struct dxva_context *ctx = avctx->hwaccel_context; - const Picture *current_picture = h->s.current_picture_ptr; + const Picture *current_picture = h->cur_pic_ptr; struct dxva2_picture_context *ctx_pic = current_picture->f.hwaccel_picture_private; DXVA_Slice_H264_Short *slice = NULL; uint8_t *dxva_data, *current, *end; @@ -376,7 +373,7 @@ static int start_frame(AVCodecContext *avctx, { const H264Context *h = avctx->priv_data; struct dxva_context *ctx = avctx->hwaccel_context; - struct dxva2_picture_context *ctx_pic = h->s.current_picture_ptr->f.hwaccel_picture_private; + struct dxva2_picture_context *ctx_pic = h->cur_pic_ptr->f.hwaccel_picture_private; if (!ctx->decoder || !ctx->cfg || ctx->surface_count <= 0) return -1; @@ -399,7 +396,7 @@ static int decode_slice(AVCodecContext *avctx, { const H264Context *h = avctx->priv_data; struct dxva_context *ctx = avctx->hwaccel_context; - const Picture *current_picture = h->s.current_picture_ptr; + const Picture *current_picture = h->cur_pic_ptr; struct dxva2_picture_context *ctx_pic = current_picture->f.hwaccel_picture_private; unsigned position; @@ -427,16 +424,19 @@ static int decode_slice(AVCodecContext *avctx, static int end_frame(AVCodecContext *avctx) { H264Context *h = avctx->priv_data; - MpegEncContext *s = &h->s; struct dxva2_picture_context *ctx_pic = - h->s.current_picture_ptr->f.hwaccel_picture_private; + h->cur_pic_ptr->f.hwaccel_picture_private; + int ret; if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0) return -1; - return ff_dxva2_common_end_frame(avctx, s, - &ctx_pic->pp, sizeof(ctx_pic->pp), - &ctx_pic->qm, sizeof(ctx_pic->qm), - commit_bitstream_and_slice_buffer); + ret = ff_dxva2_common_end_frame(avctx, h->cur_pic_ptr, + &ctx_pic->pp, sizeof(ctx_pic->pp), + &ctx_pic->qm, sizeof(ctx_pic->qm), + commit_bitstream_and_slice_buffer); + if (!ret) + ff_h264_draw_horiz_band(h, 0, h->avctx->height); + return ret; } AVHWAccel ff_h264_dxva2_hwaccel = { |