[FFmpeg-cvslog] h264: move mb_skip_run into the per-slice context
Anton Khirnov
git at videolan.org
Sat Mar 21 16:18:12 CET 2015
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sat Jan 17 22:28:46 2015 +0100| [47a0d393504d6726c4a235951153bee0abb3f7d6] | committer: Anton Khirnov
h264: move mb_skip_run into the per-slice context
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=47a0d393504d6726c4a235951153bee0abb3f7d6
---
libavcodec/h264.h | 3 ++-
libavcodec/h264_cavlc.c | 8 ++++----
libavcodec/h264_slice.c | 4 ++--
libavcodec/svq3.c | 4 ++--
4 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 0696000..04ed625 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -356,6 +356,8 @@ typedef struct H264SliceContext {
ptrdiff_t mb_linesize; ///< may be equal to s->linesize or s->linesize * 2, for mbaff
ptrdiff_t mb_uvlinesize;
+ int mb_skip_run;
+
int redundant_pic_count;
/**
@@ -525,7 +527,6 @@ typedef struct H264Context {
int mb_x, mb_y;
int resync_mb_x;
int resync_mb_y;
- int mb_skip_run;
int mb_height, mb_width;
int mb_stride;
int mb_num;
diff --git a/libavcodec/h264_cavlc.c b/libavcodec/h264_cavlc.c
index b16b6b6..0ef5dcf 100644
--- a/libavcodec/h264_cavlc.c
+++ b/libavcodec/h264_cavlc.c
@@ -709,12 +709,12 @@ int ff_h264_decode_mb_cavlc(H264Context *h, H264SliceContext *sl)
cbp = 0; /* avoid warning. FIXME: find a solution without slowing
down the code */
if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
- if(h->mb_skip_run==-1)
- h->mb_skip_run= get_ue_golomb(&h->gb);
+ if (sl->mb_skip_run == -1)
+ sl->mb_skip_run = get_ue_golomb(&h->gb);
- if (h->mb_skip_run--) {
+ if (sl->mb_skip_run--) {
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);
}
decode_mb_skip(h, sl);
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 2e319e9..43185c5 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -2183,7 +2183,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg)
H264Context *h = sl->h264;
int lf_x_start = h->mb_x;
- h->mb_skip_run = -1;
+ sl->mb_skip_run = -1;
h->is_complex = FRAME_MBAFF(h) || h->picture_structure != PICT_FRAME ||
avctx->codec_id != AV_CODEC_ID_H264 ||
@@ -2314,7 +2314,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",
get_bits_count(&h->gb), h->gb.size_in_bits);
diff --git a/libavcodec/svq3.c b/libavcodec/svq3.c
index 316699c..d8aefa6 100644
--- a/libavcodec/svq3.c
+++ b/libavcodec/svq3.c
@@ -821,11 +821,11 @@ static int svq3_decode_slice_header(AVCodecContext *avctx)
if ((header & 0x9F) == 2) {
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);
} else {
skip_bits1(&h->gb);
- h->mb_skip_run = 0;
+ sl->mb_skip_run = 0;
}
sl->slice_num = get_bits(&h->gb, 8);
More information about the ffmpeg-cvslog
mailing list