diff h264.c @ 2792:0a8c847ad5e7 libavcodec

skip_idct skip_frame skip_loop_filter
author michael
date Thu, 14 Jul 2005 21:39:36 +0000
parents 899a2ea0907c
children ae85da6c5c2f
line wrap: on
line diff
--- a/h264.c	Thu Jul 14 15:30:39 2005 +0000
+++ b/h264.c	Thu Jul 14 21:39:36 2005 +0000
@@ -4349,6 +4349,11 @@
             h->slice_beta_offset = get_se_golomb(&s->gb) << 1;
         }
     }
+    if(   s->avctx->skip_loop_filter >= AVDISCARD_ALL
+       ||(s->avctx->skip_loop_filter >= AVDISCARD_NONKEY && h->slice_type != I_TYPE)
+       ||(s->avctx->skip_loop_filter >= AVDISCARD_BIDIR  && h->slice_type == B_TYPE)
+       ||(s->avctx->skip_loop_filter >= AVDISCARD_NONREF && h->nal_ref_idc == 0))
+        h->deblocking_filter= 0;
 
 #if 0 //FMO
     if( h->pps.num_slice_groups > 1  && h->pps.mb_slice_group_map_type >= 3 && h->pps.mb_slice_group_map_type <= 5)
@@ -7245,7 +7250,8 @@
 
         buf_index += consumed;
 
-        if( s->hurry_up == 1 && h->nal_ref_idc  == 0 )
+        if(  (s->hurry_up == 1 && h->nal_ref_idc  == 0)
+           ||(avctx->skip_frame >= AVDISCARD_NONREF && h->nal_ref_idc  == 0))
             continue;
         
         switch(h->nal_unit_type){
@@ -7261,7 +7267,7 @@
                 av_log(h->s.avctx, AV_LOG_ERROR, "decode_slice_header error\n");
                 break;
             }
-            if(h->redundant_pic_count==0 && s->hurry_up < 5 )
+            if(h->redundant_pic_count==0 && s->hurry_up < 5 && avctx->skip_frame < AVDISCARD_ALL)
                 decode_slice(h);
             break;
         case NAL_DPA:
@@ -7282,7 +7288,8 @@
             init_get_bits(&h->inter_gb, ptr, bit_length);
             h->inter_gb_ptr= &h->inter_gb;
 
-            if(h->redundant_pic_count==0 && h->intra_gb_ptr && s->data_partitioning && s->hurry_up < 5 )
+            if(h->redundant_pic_count==0 && h->intra_gb_ptr && s->data_partitioning 
+               && s->hurry_up < 5 && avctx->skip_frame < AVDISCARD_ALL)
                 decode_slice(h);
             break;
         case NAL_SEI: