h264: remove some remnants of data partitioning
authorAnton Khirnov <anton@khirnov.net>
Tue, 27 Jan 2015 13:21:09 +0000 (14:21 +0100)
committerAnton Khirnov <anton@khirnov.net>
Sat, 21 Mar 2015 10:27:14 +0000 (11:27 +0100)
libavcodec/h264.c
libavcodec/h264.h
libavcodec/h264_cavlc.c
libavcodec/h264_slice.c

index 13f3aa4..a2e3e01 100644 (file)
@@ -221,7 +221,6 @@ const uint8_t *ff_h264_decode_nal(H264Context *h, const uint8_t *src,
 {
     int i, si, di;
     uint8_t *dst;
-    int bufidx;
 
     // src[0]&0x80; // forbidden bit
     h->nal_ref_idc   = src[0] >> 5;
@@ -283,11 +282,9 @@ const uint8_t *ff_h264_decode_nal(H264Context *h, const uint8_t *src,
         return src;
     }
 
-    // use second escape buffer for inter data
-    bufidx = h->nal_unit_type == NAL_DPC ? 1 : 0;
-    av_fast_malloc(&h->rbsp_buffer[bufidx], &h->rbsp_buffer_size[bufidx],
+    av_fast_malloc(&h->rbsp_buffer, &h->rbsp_buffer_size,
                    length + FF_INPUT_BUFFER_PADDING_SIZE);
-    dst = h->rbsp_buffer[bufidx];
+    dst = h->rbsp_buffer;
 
     if (!dst)
         return NULL;
@@ -394,10 +391,8 @@ void ff_h264_free_tables(H264Context *h, int free_rbsp)
         av_freep(&hx->er.mbskip_table);
 
         if (free_rbsp) {
-            av_freep(&hx->rbsp_buffer[1]);
-            av_freep(&hx->rbsp_buffer[0]);
-            hx->rbsp_buffer_size[0] = 0;
-            hx->rbsp_buffer_size[1] = 0;
+            av_freep(&hx->rbsp_buffer);
+            hx->rbsp_buffer_size = 0;
         }
         if (i)
             av_freep(&h->thread_context[i]);
@@ -717,10 +712,8 @@ static int decode_init_thread_copy(AVCodecContext *avctx)
         h->slice_ctx[i].h264 = h;
 
     h->avctx               = avctx;
-    h->rbsp_buffer[0]      = NULL;
-    h->rbsp_buffer[1]      = NULL;
-    h->rbsp_buffer_size[0] = 0;
-    h->rbsp_buffer_size[1] = 0;
+    h->rbsp_buffer         = NULL;
+    h->rbsp_buffer_size    = 0;
     h->context_initialized = 0;
 
     return 0;
@@ -1535,8 +1528,6 @@ again:
                 idr(h); // FIXME ensure we don't lose some frames if there is reordering
             case NAL_SLICE:
                 init_get_bits(&hx->gb, ptr, bit_length);
-                hx->intra_gb_ptr      =
-                hx->inter_gb_ptr      = &hx->gb;
 
                 if ((err = ff_h264_decode_slice_header(hx, sl, h)))
                     break;
index 282de69..06a4ab0 100644 (file)
@@ -500,12 +500,6 @@ typedef struct H264Context {
 
     uint8_t *list_counts;               ///< Array of list_count per MB specifying the slice type
 
-    // data partitioning
-    GetBitContext intra_gb;
-    GetBitContext inter_gb;
-    GetBitContext *intra_gb_ptr;
-    GetBitContext *inter_gb_ptr;
-
     /* 0x100 -> non null luma_dc, 0x80/0x40 -> non null chroma_dc (cb/cr), 0x?0 -> chroma_cbp(0, 1, 2), 0x0? luma_cbp */
     uint16_t *cbp_table;
 
@@ -539,8 +533,8 @@ typedef struct H264Context {
 
     int nal_ref_idc;
     int nal_unit_type;
-    uint8_t *rbsp_buffer[2];
-    unsigned int rbsp_buffer_size[2];
+    uint8_t *rbsp_buffer;
+    unsigned int rbsp_buffer_size;
 
     /**
      * Used to parse AVC variant of h264
index 95b09a9..6b0c7b7 100644 (file)
@@ -636,7 +636,7 @@ static av_always_inline int decode_luma_residual(H264Context *h, H264SliceContex
         AV_ZERO128(sl->mb_luma_dc[p]+8);
         AV_ZERO128(sl->mb_luma_dc[p]+16);
         AV_ZERO128(sl->mb_luma_dc[p]+24);
-        if( decode_residual(h, sl, h->intra_gb_ptr, sl->mb_luma_dc[p], LUMA_DC_BLOCK_INDEX+p, scan, NULL, 16) < 0){
+        if (decode_residual(h, sl, gb, sl->mb_luma_dc[p], LUMA_DC_BLOCK_INDEX + p, scan, NULL, 16) < 0) {
             return -1; //FIXME continue if partitioned and other return -1 too
         }
 
@@ -646,7 +646,7 @@ static av_always_inline int decode_luma_residual(H264Context *h, H264SliceContex
             for(i8x8=0; i8x8<4; i8x8++){
                 for(i4x4=0; i4x4<4; i4x4++){
                     const int index= i4x4 + 4*i8x8 + p*16;
-                    if( decode_residual(h, sl, h->intra_gb_ptr, sl->mb + (16*index << pixel_shift),
+                    if( decode_residual(h, sl, gb, sl->mb + (16*index << pixel_shift),
                         index, scan + 1, h->dequant4_coeff[p][qscale], 15) < 0 ){
                         return -1;
                     }
@@ -1083,7 +1083,7 @@ decode_intra_mb:
         int i4x4, i8x8, chroma_idx;
         int dquant;
         int ret;
-        GetBitContext *gb= IS_INTRA(mb_type) ? h->intra_gb_ptr : h->inter_gb_ptr;
+        GetBitContext *gb = &h->gb;
         const uint8_t *scan, *scan8x8;
         const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
 
index fea263a..e409847 100644 (file)
@@ -528,10 +528,8 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
             return ret;
         }
 
-        for (i = 0; i < 2; i++) {
-            h->rbsp_buffer[i]      = NULL;
-            h->rbsp_buffer_size[i] = 0;
-        }
+        h->rbsp_buffer      = NULL;
+        h->rbsp_buffer_size = 0;
         h->bipred_scratchpad = NULL;
         h->edge_emu_buffer   = NULL;