# HG changeset patch # User michael # Date 1229814690 0 # Node ID b749b637ecfa2ba8e8a9c20eb2d0a65d43b0abdb # Parent b0ec9768b39b6f4586dd630a98a75f2ff26e7b88 Optimize get_dct8x8_allowed(). 30 cpu cycles faster on pentium dual. diff -r b0ec9768b39b -r b749b637ecfa h264.c --- a/h264.c Sat Dec 20 18:06:01 2008 +0000 +++ b/h264.c Sat Dec 20 23:11:30 2008 +0000 @@ -4039,13 +4039,10 @@ } static inline int get_dct8x8_allowed(H264Context *h){ - int i; - for(i=0; i<4; i++){ - if(!IS_SUB_8X8(h->sub_mb_type[i]) - || (!h->sps.direct_8x8_inference_flag && IS_DIRECT(h->sub_mb_type[i]))) - return 0; - } - return 1; + if(h->sps.direct_8x8_inference_flag) + return !(*(uint64_t*)h->sub_mb_type & ((MB_TYPE_16x8|MB_TYPE_8x16|MB_TYPE_8x8 )*0x0001000100010001ULL)); + else + return !(*(uint64_t*)h->sub_mb_type & ((MB_TYPE_16x8|MB_TYPE_8x16|MB_TYPE_8x8|MB_TYPE_DIRECT2)*0x0001000100010001ULL)); } /** diff -r b0ec9768b39b -r b749b637ecfa h264.h --- a/h264.h Sat Dec 20 18:06:01 2008 +0000 +++ b/h264.h Sat Dec 20 23:11:30 2008 +0000 @@ -339,7 +339,7 @@ int mb_field_decoding_flag; int mb_mbaff; ///< mb_aff_frame && mb_field_decoding_flag - unsigned int sub_mb_type[4]; + uint16_t sub_mb_type[4]; //POC stuff int poc_lsb;