[FFmpeg-cvslog] h264: move last_qscale_diff into the per-slice context

Anton Khirnov git at videolan.org
Sat Mar 21 15:56:25 CET 2015


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

h264: move last_qscale_diff into the per-slice context

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

 libavcodec/h264.h       |    2 +-
 libavcodec/h264_cabac.c |   12 ++++++------
 libavcodec/h264_slice.c |    2 +-
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index e08e5ba..7ced3b5 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -307,6 +307,7 @@ typedef struct H264SliceContext {
     int qscale;
     int chroma_qp[2];   // QPc
     int qp_thresh;      ///< QP threshold to skip loopfilter
+    int last_qscale_diff;
 
     // Weighted pred stuff
     int use_weight;
@@ -491,7 +492,6 @@ typedef struct H264Context {
 
     /* chroma_pred_mode for i4x4 or i16x16, else 0 */
     uint8_t *chroma_pred_mode_table;
-    int last_qscale_diff;
     uint8_t (*mvd_table[2])[2];
     DECLARE_ALIGNED(16, uint8_t, mvd_cache)[2][5 * 8][2];
     uint8_t *direct_table;
diff --git a/libavcodec/h264_cabac.c b/libavcodec/h264_cabac.c
index df6baee..24ce093 100644
--- a/libavcodec/h264_cabac.c
+++ b/libavcodec/h264_cabac.c
@@ -1937,7 +1937,7 @@ int ff_h264_decode_mb_cabac(H264Context *h, H264SliceContext *sl)
 
             h->cbp_table[mb_xy] = 0;
             h->chroma_pred_mode_table[mb_xy] = 0;
-            h->last_qscale_diff = 0;
+            sl->last_qscale_diff = 0;
 
             return 0;
 
@@ -2050,7 +2050,7 @@ decode_intra_mb:
         // All coeffs are present
         memset(h->non_zero_count[mb_xy], 16, 48);
         h->cur_pic.mb_type[mb_xy] = mb_type;
-        h->last_qscale_diff = 0;
+        sl->last_qscale_diff = 0;
         return 0;
     }
 
@@ -2358,7 +2358,7 @@ decode_intra_mb:
         }
 
         // decode_cabac_mb_dqp
-        if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (h->last_qscale_diff != 0)])){
+        if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
             int val = 1;
             int ctx= 2;
             const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
@@ -2376,7 +2376,7 @@ decode_intra_mb:
                 val=   (val + 1)>>1 ;
             else
                 val= -((val + 1)>>1);
-            h->last_qscale_diff = val;
+            sl->last_qscale_diff = val;
             sl->qscale += val;
             if (((unsigned)sl->qscale) > max_qp){
                 if (sl->qscale < 0) sl->qscale += max_qp + 1;
@@ -2385,7 +2385,7 @@ decode_intra_mb:
             sl->chroma_qp[0] = get_chroma_qp(h, 0, sl->qscale);
             sl->chroma_qp[1] = get_chroma_qp(h, 1, sl->qscale);
         }else
-            h->last_qscale_diff=0;
+            sl->last_qscale_diff=0;
 
         decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
         if (CHROMA444(h)) {
@@ -2442,7 +2442,7 @@ decode_intra_mb:
         fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
         fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
         fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
-        h->last_qscale_diff = 0;
+        sl->last_qscale_diff = 0;
     }
 
     h->cur_pic.qscale_table[mb_xy] = sl->qscale;
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index ac186a6..a32882e 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -1660,7 +1660,7 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl, H264Contex
         h->cabac_init_idc = tmp;
     }
 
-    h->last_qscale_diff = 0;
+    sl->last_qscale_diff = 0;
     tmp = h->pps.init_qp + get_se_golomb(&h->gb);
     if (tmp > 51 + 6 * (h->sps.bit_depth_luma - 8)) {
         av_log(h->avctx, AV_LOG_ERROR, "QP %u out of range\n", tmp);



More information about the ffmpeg-cvslog mailing list