[FFmpeg-cvslog] h264: move {prev, next}_mb_skipped into the per-slice context

Anton Khirnov git at videolan.org
Sat Mar 21 13:42:55 CET 2015


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sat Jan 17 22:28:46 2015 +0100| [5355ed6b20e941430c4f8fb82644e87a65366d61] | committer: Anton Khirnov

h264: move {prev,next}_mb_skipped into the per-slice context

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5355ed6b20e941430c4f8fb82644e87a65366d61
---

 libavcodec/h264.h        |    6 +++---
 libavcodec/h264_cabac.c  |   10 +++++-----
 libavcodec/h264_cavlc.c  |    2 +-
 libavcodec/h264_mvpred.h |    2 +-
 4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 5e65db3..1ba6e56 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -314,6 +314,9 @@ typedef struct H264SliceContext {
     int luma_weight[48][2][2];
     int chroma_weight[48][2][2][2];
     int implicit_weight[48][48][2];
+
+    int prev_mb_skipped;
+    int next_mb_skipped;
 } H264SliceContext;
 
 /**
@@ -350,9 +353,6 @@ typedef struct H264Context {
     int flags;
     int workaround_bugs;
 
-    int prev_mb_skipped;
-    int next_mb_skipped;
-
     // prediction stuff
     int chroma_pred_mode;
     int intra16x16_pred_mode;
diff --git a/libavcodec/h264_cabac.c b/libavcodec/h264_cabac.c
index 5699bce..4225fc1 100644
--- a/libavcodec/h264_cabac.c
+++ b/libavcodec/h264_cabac.c
@@ -1897,16 +1897,16 @@ int ff_h264_decode_mb_cabac(H264Context *h, H264SliceContext *sl)
     if( h->slice_type_nos != AV_PICTURE_TYPE_I ) {
         int skip;
         /* a skipped mb needs the aff flag from the following mb */
-        if (FRAME_MBAFF(h) && (h->mb_y & 1) == 1 && h->prev_mb_skipped)
-            skip = h->next_mb_skipped;
+        if (FRAME_MBAFF(h) && (h->mb_y & 1) == 1 && sl->prev_mb_skipped)
+            skip = sl->next_mb_skipped;
         else
             skip = decode_cabac_mb_skip( h, h->mb_x, h->mb_y );
         /* read skip flags */
         if( skip ) {
             if (FRAME_MBAFF(h) && (h->mb_y & 1) == 0) {
                 h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
-                h->next_mb_skipped = decode_cabac_mb_skip( h, h->mb_x, h->mb_y+1 );
-                if(!h->next_mb_skipped)
+                sl->next_mb_skipped = decode_cabac_mb_skip( h, h->mb_x, h->mb_y+1 );
+                if(!sl->next_mb_skipped)
                     h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
             }
 
@@ -1926,7 +1926,7 @@ int ff_h264_decode_mb_cabac(H264Context *h, H264SliceContext *sl)
             h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
     }
 
-    h->prev_mb_skipped = 0;
+    sl->prev_mb_skipped = 0;
 
     fill_decode_neighbors(h, -(MB_FIELD(h)));
 
diff --git a/libavcodec/h264_cavlc.c b/libavcodec/h264_cavlc.c
index 0c517f1..accb67b 100644
--- a/libavcodec/h264_cavlc.c
+++ b/libavcodec/h264_cavlc.c
@@ -721,7 +721,7 @@ int ff_h264_decode_mb_cavlc(H264Context *h, H264SliceContext *sl)
             h->mb_mbaff = h->mb_field_decoding_flag = get_bits1(&h->gb);
     }
 
-    h->prev_mb_skipped= 0;
+    sl->prev_mb_skipped = 0;
 
     mb_type= get_ue_golomb(&h->gb);
     if(h->slice_type_nos == AV_PICTURE_TYPE_B){
diff --git a/libavcodec/h264_mvpred.h b/libavcodec/h264_mvpred.h
index e89e91e..8f9932d 100644
--- a/libavcodec/h264_mvpred.h
+++ b/libavcodec/h264_mvpred.h
@@ -824,7 +824,7 @@ static void av_unused decode_mb_skip(H264Context *h, H264SliceContext *sl)
     h->cur_pic.mb_type[mb_xy]      = mb_type;
     h->cur_pic.qscale_table[mb_xy] = sl->qscale;
     h->slice_table[mb_xy]            = h->slice_num;
-    h->prev_mb_skipped               = 1;
+    sl->prev_mb_skipped            = 1;
 }
 
 #endif /* AVCODEC_H264_MVPRED_H */



More information about the ffmpeg-cvslog mailing list