mirror of https://git.ffmpeg.org/ffmpeg.git
Merge commit '47a0d393504d6726c4a235951153bee0abb3f7d6'
* commit '47a0d393504d6726c4a235951153bee0abb3f7d6': h264: move mb_skip_run into the per-slice context Conflicts: libavcodec/h264_cavlc.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
70eec8f432
|
@ -393,6 +393,8 @@ typedef struct H264SliceContext {
|
||||||
ptrdiff_t mb_linesize; ///< may be equal to s->linesize or s->linesize * 2, for mbaff
|
ptrdiff_t mb_linesize; ///< may be equal to s->linesize or s->linesize * 2, for mbaff
|
||||||
ptrdiff_t mb_uvlinesize;
|
ptrdiff_t mb_uvlinesize;
|
||||||
|
|
||||||
|
int mb_skip_run;
|
||||||
|
|
||||||
int redundant_pic_count;
|
int redundant_pic_count;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -568,7 +570,6 @@ typedef struct H264Context {
|
||||||
int mb_x, mb_y;
|
int mb_x, mb_y;
|
||||||
int resync_mb_x;
|
int resync_mb_x;
|
||||||
int resync_mb_y;
|
int resync_mb_y;
|
||||||
int mb_skip_run;
|
|
||||||
int mb_height, mb_width;
|
int mb_height, mb_width;
|
||||||
int mb_stride;
|
int mb_stride;
|
||||||
int mb_num;
|
int mb_num;
|
||||||
|
|
|
@ -717,12 +717,12 @@ int ff_h264_decode_mb_cavlc(H264Context *h, H264SliceContext *sl)
|
||||||
cbp = 0; /* avoid warning. FIXME: find a solution without slowing
|
cbp = 0; /* avoid warning. FIXME: find a solution without slowing
|
||||||
down the code */
|
down the code */
|
||||||
if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
|
if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
|
||||||
if(h->mb_skip_run==-1)
|
if (sl->mb_skip_run == -1)
|
||||||
h->mb_skip_run= get_ue_golomb_long(&h->gb);
|
sl->mb_skip_run = get_ue_golomb_long(&h->gb);
|
||||||
|
|
||||||
if (h->mb_skip_run--) {
|
if (sl->mb_skip_run--) {
|
||||||
if(FRAME_MBAFF(h) && (h->mb_y&1) == 0){
|
if(FRAME_MBAFF(h) && (h->mb_y&1) == 0){
|
||||||
if(h->mb_skip_run==0)
|
if (sl->mb_skip_run == 0)
|
||||||
h->mb_mbaff = h->mb_field_decoding_flag = get_bits1(&h->gb);
|
h->mb_mbaff = h->mb_field_decoding_flag = get_bits1(&h->gb);
|
||||||
}
|
}
|
||||||
decode_mb_skip(h, sl);
|
decode_mb_skip(h, sl);
|
||||||
|
|
|
@ -2400,7 +2400,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg)
|
||||||
H264Context *h = sl->h264;
|
H264Context *h = sl->h264;
|
||||||
int lf_x_start = h->mb_x;
|
int lf_x_start = h->mb_x;
|
||||||
|
|
||||||
h->mb_skip_run = -1;
|
sl->mb_skip_run = -1;
|
||||||
|
|
||||||
av_assert0(h->block_offset[15] == (4 * ((scan8[15] - scan8[0]) & 7) << h->pixel_shift) + 4 * h->linesize * ((scan8[15] - scan8[0]) >> 3));
|
av_assert0(h->block_offset[15] == (4 * ((scan8[15] - scan8[0]) & 7) << h->pixel_shift) + 4 * h->linesize * ((scan8[15] - scan8[0]) >> 3));
|
||||||
|
|
||||||
|
@ -2546,7 +2546,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (get_bits_left(&h->gb) <= 0 && h->mb_skip_run <= 0) {
|
if (get_bits_left(&h->gb) <= 0 && sl->mb_skip_run <= 0) {
|
||||||
tprintf(h->avctx, "slice end %d %d\n",
|
tprintf(h->avctx, "slice end %d %d\n",
|
||||||
get_bits_count(&h->gb), h->gb.size_in_bits);
|
get_bits_count(&h->gb), h->gb.size_in_bits);
|
||||||
|
|
||||||
|
|
|
@ -828,11 +828,11 @@ static int svq3_decode_slice_header(AVCodecContext *avctx)
|
||||||
|
|
||||||
if ((header & 0x9F) == 2) {
|
if ((header & 0x9F) == 2) {
|
||||||
i = (h->mb_num < 64) ? 6 : (1 + av_log2(h->mb_num - 1));
|
i = (h->mb_num < 64) ? 6 : (1 + av_log2(h->mb_num - 1));
|
||||||
h->mb_skip_run = get_bits(&h->gb, i) -
|
sl->mb_skip_run = get_bits(&h->gb, i) -
|
||||||
(h->mb_y * h->mb_width + h->mb_x);
|
(h->mb_y * h->mb_width + h->mb_x);
|
||||||
} else {
|
} else {
|
||||||
skip_bits1(&h->gb);
|
skip_bits1(&h->gb);
|
||||||
h->mb_skip_run = 0;
|
sl->mb_skip_run = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sl->slice_num = get_bits(&h->gb, 8);
|
sl->slice_num = get_bits(&h->gb, 8);
|
||||||
|
|
Loading…
Reference in New Issue