diff options
author | Diego Biurrun <diego@biurrun.de> | 2005-12-17 18:14:38 +0000 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2005-12-17 18:14:38 +0000 |
commit | 115329f16062074e11ccf3b89ead6176606c9696 (patch) | |
tree | e98aa993905a702688bf821737ab9a443969fc28 /libavcodec/h264.c | |
parent | d76319b1ab716320f6e6a4d690b85fe4504ebd5b (diff) | |
download | ffmpeg-115329f16062074e11ccf3b89ead6176606c9696.tar.gz |
COSMETICS: Remove all trailing whitespace.
Originally committed as revision 4749 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h264.c')
-rw-r--r-- | libavcodec/h264.c | 776 |
1 files changed, 388 insertions, 388 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c index e20d7bbb91..19c2fea9e4 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ - + /** * @file h264.c * H.264 / AVC / MPEG4 part10 codec. @@ -58,7 +58,7 @@ * Sequence parameter set */ typedef struct SPS{ - + int profile_idc; int level_idc; int transform_bypass; ///< qpprime_y_zero_transform_bypass_flag @@ -127,7 +127,7 @@ typedef enum MMCOOpcode{ MMCO_LONG2UNUSED, MMCO_SHORT2LONG, MMCO_SET_MAX_LONG, - MMCO_RESET, + MMCO_RESET, MMCO_LONG, } MMCOOpcode; @@ -145,7 +145,7 @@ typedef struct MMCO{ */ typedef struct H264Context{ MpegEncContext s; - int nal_ref_idc; + int nal_ref_idc; int nal_unit_type; #define NAL_SLICE 1 #define NAL_DPA 2 @@ -181,7 +181,7 @@ typedef struct H264Context{ int top_mb_xy; int left_mb_xy[2]; - + int8_t intra4x4_pred_mode_cache[5*8]; int8_t (*intra4x4_pred_mode)[8]; void (*pred4x4 [9+3])(uint8_t *src, uint8_t *topright, int stride);//FIXME move to dsp? @@ -209,7 +209,7 @@ typedef struct H264Context{ int8_t ref_cache[2][5*8] __align8; #define LIST_NOT_USED -1 //FIXME rename? #define PART_NOT_AVAILABLE -2 - + /** * is 1 if the specific list MV&references are set to 0,0,-2. */ @@ -225,7 +225,7 @@ typedef struct H264Context{ * block_offset[24..47] for field macroblocks */ int block_offset[2*(16+8)]; - + uint32_t *mb2b_xy; //FIXME are these 4 a good idea? uint32_t *mb2b8_xy; int b_stride; //FIXME use s->b4_stride @@ -239,7 +239,7 @@ typedef struct H264Context{ SPS sps_buffer[MAX_SPS_COUNT]; SPS sps; ///< current sps - + PPS pps_buffer[MAX_PPS_COUNT]; /** * current pps @@ -257,13 +257,13 @@ typedef struct H264Context{ uint8_t *slice_table; ///< slice_table_base + mb_stride + 1 int slice_type; int slice_type_fixed; - + //interlacing specific flags int mb_aff_frame; int mb_field_decoding_flag; - + int sub_mb_type[4]; - + //POC stuff int poc_lsb; int poc_msb; @@ -280,7 +280,7 @@ typedef struct H264Context{ * frame_num for frames or 2*frame_num for field pics. */ int curr_pic_num; - + /** * max_frame_num or 2*max_frame_num for field pics. */ @@ -296,14 +296,14 @@ typedef struct H264Context{ int chroma_weight[2][16][2]; int chroma_offset[2][16][2]; int implicit_weight[16][16]; - + //deblock - int deblocking_filter; ///< disable_deblocking_filter_idc with 1<->0 + int deblocking_filter; ///< disable_deblocking_filter_idc with 1<->0 int slice_alpha_c0_offset; int slice_beta_offset; - + int redundant_pic_count; - + int direct_spatial_mv_pred; int dist_scale_factor[16]; int map_col_to_list0[2][16]; @@ -319,22 +319,22 @@ typedef struct H264Context{ Picture field_ref_list[2][32]; //FIXME size? Picture *delayed_pic[16]; //FIXME size? Picture *delayed_output_pic; - + /** * memory management control operations buffer. */ MMCO mmco[MAX_MMCO_COUNT]; int mmco_index; - + int long_ref_count; ///< number of actual long term references int short_ref_count; ///< number of actual short term references - + //data partitioning GetBitContext intra_gb; GetBitContext inter_gb; GetBitContext *intra_gb_ptr; GetBitContext *inter_gb_ptr; - + DCTELEM mb[16*24] __align8; /** @@ -360,7 +360,7 @@ typedef struct H264Context{ uint8_t field_scan[16]; const uint8_t *zigzag_scan_q0; const uint8_t *field_scan_q0; - + int x264_build; }H264Context; @@ -394,10 +394,10 @@ static inline uint32_t pack16to32(int a, int b){ static inline void fill_rectangle(void *vp, int w, int h, int stride, uint32_t val, int size){ //FIXME ensure this IS inlined uint8_t *p= (uint8_t*)vp; assert(size==1 || size==4); - + w *= size; stride *= size; - + assert((((long)vp)&(FFMIN(w, STRIDE_ALIGN)-1)) == 0); assert((stride&(w-1))==0); //FIXME check what gcc generates for 64 bit on x86 and possibly write a 32 bit ver of it @@ -464,8 +464,8 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ if(for_deblock && h->slice_num == 1) return; - //wow what a mess, why didn't they simplify the interlacing&intra stuff, i can't imagine that these complex rules are worth it - + //wow what a mess, why didn't they simplify the interlacing&intra stuff, i can't imagine that these complex rules are worth it + top_xy = mb_xy - s->mb_stride; topleft_xy = top_xy - 1; topright_xy= top_xy + 1; @@ -562,8 +562,8 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ } if(IS_INTRA(mb_type)){ - h->topleft_samples_available= - h->top_samples_available= + h->topleft_samples_available= + h->top_samples_available= h->left_samples_available= 0xFFFF; h->topright_samples_available= 0xEEEA; @@ -578,13 +578,13 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ h->left_samples_available&= 0x5F5F; } } - + if(!IS_INTRA(topleft_type) && (topleft_type==0 || h->pps.constrained_intra_pred)) h->topleft_samples_available&= 0x7FFF; - + if(!IS_INTRA(topright_type) && (topright_type==0 || h->pps.constrained_intra_pred)) h->topright_samples_available&= 0xFBFF; - + if(IS_INTRA4x4(mb_type)){ if(IS_INTRA4x4(top_type)){ h->intra4x4_pred_mode_cache[4+8*0]= h->intra4x4_pred_mode[top_xy][4]; @@ -620,15 +620,15 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ } } } - - + + /* -0 . T T. T T T T -1 L . .L . . . . -2 L . .L . . . . -3 . T TL . . . . -4 L . .L . . . . -5 L . .. . . . . +0 . T T. T T T T +1 L . .L . . . . +2 L . .L . . . . +3 . T TL . . . . +4 L . .L . . . . +5 L . .. . . . . */ //FIXME constraint_intra_pred & partitioning & nnz (lets hope this is just a typo in the spec) if(top_type){ @@ -636,25 +636,25 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ h->non_zero_count_cache[5+8*0]= h->non_zero_count[top_xy][5]; h->non_zero_count_cache[6+8*0]= h->non_zero_count[top_xy][6]; h->non_zero_count_cache[7+8*0]= h->non_zero_count[top_xy][3]; - + h->non_zero_count_cache[1+8*0]= h->non_zero_count[top_xy][9]; h->non_zero_count_cache[2+8*0]= h->non_zero_count[top_xy][8]; - + h->non_zero_count_cache[1+8*3]= h->non_zero_count[top_xy][12]; h->non_zero_count_cache[2+8*3]= h->non_zero_count[top_xy][11]; - + }else{ - h->non_zero_count_cache[4+8*0]= + h->non_zero_count_cache[4+8*0]= h->non_zero_count_cache[5+8*0]= h->non_zero_count_cache[6+8*0]= h->non_zero_count_cache[7+8*0]= - + h->non_zero_count_cache[1+8*0]= h->non_zero_count_cache[2+8*0]= - + h->non_zero_count_cache[1+8*3]= h->non_zero_count_cache[2+8*3]= h->pps.cabac && !IS_INTRA(mb_type) ? 0 : 64; - + } for (i=0; i<2; i++) { @@ -664,9 +664,9 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ h->non_zero_count_cache[0+8*1 + 8*i]= h->non_zero_count[left_xy[i]][left_block[4+2*i]]; h->non_zero_count_cache[0+8*4 + 8*i]= h->non_zero_count[left_xy[i]][left_block[5+2*i]]; }else{ - h->non_zero_count_cache[3+8*1 + 2*8*i]= - h->non_zero_count_cache[3+8*2 + 2*8*i]= - h->non_zero_count_cache[0+8*1 + 8*i]= + h->non_zero_count_cache[3+8*1 + 2*8*i]= + h->non_zero_count_cache[3+8*2 + 2*8*i]= + h->non_zero_count_cache[0+8*1 + 8*i]= h->non_zero_count_cache[0+8*4 + 8*i]= h->pps.cabac && !IS_INTRA(mb_type) ? 0 : 64; } } @@ -710,7 +710,7 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ continue; } h->mv_cache_clean[list]= 0; - + if(IS_INTER(top_type)){ const int b_xy= h->mb2b_xy[top_xy] + 3*h->b_stride; const int b8_xy= h->mb2b8_xy[top_xy] + h->b8_stride; @@ -723,9 +723,9 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ h->ref_cache[list][scan8[0] + 2 - 1*8]= h->ref_cache[list][scan8[0] + 3 - 1*8]= s->current_picture.ref_index[list][b8_xy + 1]; }else{ - *(uint32_t*)h->mv_cache [list][scan8[0] + 0 - 1*8]= - *(uint32_t*)h->mv_cache [list][scan8[0] + 1 - 1*8]= - *(uint32_t*)h->mv_cache [list][scan8[0] + 2 - 1*8]= + *(uint32_t*)h->mv_cache [list][scan8[0] + 0 - 1*8]= + *(uint32_t*)h->mv_cache [list][scan8[0] + 1 - 1*8]= + *(uint32_t*)h->mv_cache [list][scan8[0] + 2 - 1*8]= *(uint32_t*)h->mv_cache [list][scan8[0] + 3 - 1*8]= 0; *(uint32_t*)&h->ref_cache[list][scan8[0] + 0 - 1*8]= ((top_type ? LIST_NOT_USED : PART_NOT_AVAILABLE)&0xFF)*0x01010101; } @@ -736,7 +736,7 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ const int b8_xy= h->mb2b8_xy[left_xy[0]] + 1; *(uint32_t*)h->mv_cache[list][scan8[0] - 1 + 0*8]= *(uint32_t*)s->current_picture.motion_val[list][b_xy + h->b_stride*left_block[0]]; *(uint32_t*)h->mv_cache[list][scan8[0] - 1 + 1*8]= *(uint32_t*)s->current_picture.motion_val[list][b_xy + h->b_stride*left_block[1]]; - h->ref_cache[list][scan8[0] - 1 + 0*8]= + h->ref_cache[list][scan8[0] - 1 + 0*8]= h->ref_cache[list][scan8[0] - 1 + 1*8]= s->current_picture.ref_index[list][b8_xy + h->b8_stride*(left_block[0]>>1)]; }else{ *(uint32_t*)h->mv_cache [list][scan8[0] - 1 + 0*8]= @@ -744,13 +744,13 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ h->ref_cache[list][scan8[0] - 1 + 0*8]= h->ref_cache[list][scan8[0] - 1 + 1*8]= left_type[0] ? LIST_NOT_USED : PART_NOT_AVAILABLE; } - + if(IS_INTER(left_type[1])){ const int b_xy= h->mb2b_xy[left_xy[1]] + 3; const int b8_xy= h->mb2b8_xy[left_xy[1]] + 1; *(uint32_t*)h->mv_cache[list][scan8[0] - 1 + 2*8]= *(uint32_t*)s->current_picture.motion_val[list][b_xy + h->b_stride*left_block[2]]; *(uint32_t*)h->mv_cache[list][scan8[0] - 1 + 3*8]= *(uint32_t*)s->current_picture.motion_val[list][b_xy + h->b_stride*left_block[3]]; - h->ref_cache[list][scan8[0] - 1 + 2*8]= + h->ref_cache[list][scan8[0] - 1 + 2*8]= h->ref_cache[list][scan8[0] - 1 + 3*8]= s->current_picture.ref_index[list][b8_xy + h->b8_stride*(left_block[2]>>1)]; }else{ *(uint32_t*)h->mv_cache [list][scan8[0] - 1 + 2*8]= @@ -772,7 +772,7 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ *(uint32_t*)h->mv_cache[list][scan8[0] - 1 - 1*8]= 0; h->ref_cache[list][scan8[0] - 1 - 1*8]= topleft_type ? LIST_NOT_USED : PART_NOT_AVAILABLE; } - + if(IS_INTER(topright_type)){ const int b_xy= h->mb2b_xy[topright_xy] + 3*h->b_stride; const int b8_xy= h->mb2b8_xy[topright_xy] + h->b8_stride; @@ -782,12 +782,12 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ *(uint32_t*)h->mv_cache [list][scan8[0] + 4 - 1*8]= 0; h->ref_cache[list][scan8[0] + 4 - 1*8]= topright_type ? LIST_NOT_USED : PART_NOT_AVAILABLE; } - - h->ref_cache[list][scan8[5 ]+1] = - h->ref_cache[list][scan8[7 ]+1] = + + h->ref_cache[list][scan8[5 ]+1] = + h->ref_cache[list][scan8[7 ]+1] = h->ref_cache[list][scan8[13]+1] = //FIXME remove past 3 (init somewhere else) - h->ref_cache[list][scan8[4 ]] = + h->ref_cache[list][scan8[4 ]] = h->ref_cache[list][scan8[12]] = PART_NOT_AVAILABLE; *(uint32_t*)h->mv_cache [list][scan8[5 ]+1]= *(uint32_t*)h->mv_cache [list][scan8[7 ]+1]= @@ -811,9 +811,9 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ *(uint32_t*)h->mvd_cache[list][scan8[0] + 2 - 1*8]= *(uint32_t*)h->mvd_table[list][b_xy + 2]; *(uint32_t*)h->mvd_cache[list][scan8[0] + 3 - 1*8]= *(uint32_t*)h->mvd_table[list][b_xy + 3]; }else{ - *(uint32_t*)h->mvd_cache [list][scan8[0] + 0 - 1*8]= - *(uint32_t*)h->mvd_cache [list][scan8[0] + 1 - 1*8]= - *(uint32_t*)h->mvd_cache [list][scan8[0] + 2 - 1*8]= + *(uint32_t*)h->mvd_cache [list][scan8[0] + 0 - 1*8]= + *(uint32_t*)h->mvd_cache [list][scan8[0] + 1 - 1*8]= + *(uint32_t*)h->mvd_cache [list][scan8[0] + 2 - 1*8]= *(uint32_t*)h->mvd_cache [list][scan8[0] + 3 - 1*8]= 0; } if(IS_INTER(left_type[0])){ @@ -850,7 +850,7 @@ static inline void fill_caches(H264Context *h, int mb_type, int for_deblock){ }else{ *(uint32_t*)&h->direct_cache[scan8[0] - 1*8]= 0; } - + //FIXME interlacing if(IS_DIRECT(left_type[0])){ h->direct_cache[scan8[0] - 1 + 0*8]= @@ -893,7 +893,7 @@ static inline int check_intra4x4_pred_mode(H264Context *h){ static const int8_t top [12]= {-1, 0,LEFT_DC_PRED,-1,-1,-1,-1,-1, 0}; static const int8_t left[12]= { 0,-1, TOP_DC_PRED, 0,-1,-1,-1, 0,-1,DC_128_PRED}; int i; - + if(!(h->top_samples_available&0x8000)){ for(i=0; i<4; i++){ int status= top[ h->intra4x4_pred_mode_cache[scan8[0] + i] ]; @@ -905,7 +905,7 @@ static inline int check_intra4x4_pred_mode(H264Context *h){ } } } - + if(!(h->left_samples_available&0x8000)){ for(i=0; i<4; i++){ int status= left[ h->intra4x4_pred_mode_cache[scan8[0] + 8*i] ]; @@ -928,12 +928,12 @@ static inline int check_intra_pred_mode(H264Context *h, int mode){ MpegEncContext * const s = &h->s; static const int8_t top [7]= {LEFT_DC_PRED8x8, 1,-1,-1}; static const int8_t left[7]= { TOP_DC_PRED8x8,-1, 2,-1,DC_128_PRED8x8}; - + if(mode < 0 || mode > 6) { av_log(h->s.avctx, AV_LOG_ERROR, "out of range intra chroma pred mode at %d %d\n", s->mb_x, s->mb_y); return -1; } - + if(!(h->top_samples_available&0x8000)){ mode= top[ mode ]; if(mode<0){ @@ -941,13 +941,13 @@ static inline int check_intra_pred_mode(H264Context *h, int mode){ return -1; } } - + if(!(h->left_samples_available&0x8000)){ mode= left[ mode ]; if(mode<0){ av_log(h->s.avctx, AV_LOG_ERROR, "left block unavailable for requested intra mode at %d %d\n", s->mb_x, s->mb_y); return -1; - } + } } return mode; @@ -979,7 +979,7 @@ static inline void write_back_non_zero_count(H264Context *h){ h->non_zero_count[mb_xy][4]= h->non_zero_count_cache[4+8*4]; h->non_zero_count[mb_xy][5]= h->non_zero_count_cache[5+8*4]; h->non_zero_count[mb_xy][6]= h->non_zero_count_cache[6+8*4]; - + h->non_zero_count[mb_xy][9]= h->non_zero_count_cache[1+8*2]; h->non_zero_count[mb_xy][8]= h->non_zero_count_cache[2+8*2]; h->non_zero_count[mb_xy][7]= h->non_zero_count_cache[2+8*1]; @@ -998,7 +998,7 @@ static inline int pred_non_zero_count(H264Context *h, int n){ const int left= h->non_zero_count_cache[index8 - 1]; const int top = h->non_zero_count_cache[index8 - 8]; int i= left + top; - + if(i<64) i= (i+1)>>1; tprintf("pred_nnz L%X T%X n%d s%d P%X\n", left, top, n, scan8[n], i&31); @@ -1039,7 +1039,7 @@ static inline void pred_motion(H264Context * const h, int n, int part_width, int assert(part_width==1 || part_width==2 || part_width==4); /* mv_cache - B . . A T T T T + B . . A T T T T U . . L . . , . U . . L . . . . U . . L . . , . @@ -1055,24 +1055,24 @@ static inline void pred_motion(H264Context * const h, int n, int part_width, int }else if(match_count==1){ if(left_ref==ref){ *mx= A[0]; - *my= A[1]; + *my= A[1]; }else if(top_ref==ref){ *mx= B[0]; - *my= B[1]; + *my= B[1]; }else{ *mx= C[0]; - *my= C[1]; + *my= C[1]; } }else{ if(top_ref == PART_NOT_AVAILABLE && diagonal_ref == PART_NOT_AVAILABLE && left_ref != PART_NOT_AVAILABLE){ *mx= A[0]; - *my= A[1]; + *my= A[1]; }else{ *mx= mid_pred(A[0], B[0], C[0]); *my= mid_pred(A[1], B[1], C[1]); } } - + tprintf("pred_motion (%2d %2d %2d) (%2d %2d %2d) (%2d %2d %2d) -> (%2d %2d %2d) at %2d %2d %d list %d\n", top_ref, B[0], B[1], diagonal_ref, C[0], C[1], left_ref, A[0], A[1], ref, *mx, *my, h->s.mb_x, h->s.mb_y, n, list); } @@ -1088,7 +1088,7 @@ static inline void pred_16x8_motion(H264Context * const h, int n, int list, int const int16_t * const B= h->mv_cache[list][ scan8[0] - 8 ]; tprintf("pred_16x8: (%2d %2d %2d) at %2d %2d %d list %d\n", top_ref, B[0], B[1], h->s.mb_x, h->s.mb_y, n, list); - + if(top_ref == ref){ *mx= B[0]; *my= B[1]; @@ -1097,7 +1097,7 @@ static inline void pred_16x8_motion(H264Context * const h, int n, int list, int }else{ const int left_ref= h->ref_cache[list][ scan8[8] - 1 ]; const int16_t * const A= h->mv_cache[list][ scan8[8] - 1 ]; - + tprintf("pred_16x8: (%2d %2d %2d) at %2d %2d %d list %d\n", left_ref, A[0], A[1], h->s.mb_x, h->s.mb_y, n, list); if(left_ref == ref){ @@ -1121,7 +1121,7 @@ static inline void pred_8x16_motion(H264Context * const h, int n, int list, int if(n==0){ const int left_ref= h->ref_cache[list][ scan8[0] - 1 ]; const int16_t * const A= h->mv_cache[list][ scan8[0] - 1 ]; - + tprintf("pred_8x16: (%2d %2d %2d) at %2d %2d %d list %d\n", left_ref, A[0], A[1], h->s.mb_x, h->s.mb_y, n, list); if(left_ref == ref){ @@ -1134,10 +1134,10 @@ static inline void pred_8x16_motion(H264Context * const h, int n, int list, int int diagonal_ref; diagonal_ref= fetch_diagonal_mv(h, &C, scan8[4], list, 2); - + tprintf("pred_8x16: (%2d %2d %2d) at %2d %2d %d list %d\n", diagonal_ref, C[0], C[1], h->s.mb_x, h->s.mb_y, n, list); - if(diagonal_ref == ref){ + if(diagonal_ref == ref){ *mx= C[0]; *my= C[1]; return; @@ -1157,11 +1157,11 @@ static inline void pred_pskip_motion(H264Context * const h, int * const mx, int if(top_ref == PART_NOT_AVAILABLE || left_ref == PART_NOT_AVAILABLE || (top_ref == 0 && *(uint32_t*)h->mv_cache[0][ scan8[0] - 8 ] == 0) || (left_ref == 0 && *(uint32_t*)h->mv_cache[0][ scan8[0] - 1 ] == 0)){ - + *mx = *my = 0; return; } - + pred_motion(h, 0, 4, 0, 0, mx, my); return; @@ -1242,7 +1242,7 @@ static inline void pred_direct_motion(H264Context * const h, int *mb_type){ *mb_type |= MB_TYPE_DIRECT2; tprintf("mb_type = %08x, sub_mb_type = %08x, is_b8x8 = %d, mb_type_col = %08x\n", *mb_type, sub_mb_type, is_b8x8, mb_type_col); - + if(h->direct_spatial_mv_pred){ int ref[2]; int mv[2][2]; @@ -1288,7 +1288,7 @@ static inline void pred_direct_motion(H264Context * const h, int *mb_type){ if(IS_16X16(*mb_type)){ fill_rectangle(&h->ref_cache[0][scan8[0]], 4, 4, 8, ref[0], 1); fill_rectangle(&h->ref_cache[1][scan8[0]], 4, 4, 8, ref[1], 1); - if(!IS_INTRA(mb_type_col) + if(!IS_INTRA(mb_type_col) && ( (l1ref0[0] == 0 && ABS(l1mv0[0][0]) <= 1 && ABS(l1mv0[0][1]) <= 1) || (l1ref0[0] < 0 && l1ref1[0] == 0 && ABS(l1mv1[0][0]) <= 1 && ABS(l1mv1[0][1]) <= 1 && (h->x264_build>33 || !h->x264_build)))){ @@ -1308,19 +1308,19 @@ static inline void pred_direct_motion(H264Context * const h, int *mb_type){ for(i8=0; i8<4; i8++){ const int x8 = i8&1; const int y8 = i8>>1; - + if(is_b8x8 && !IS_DIRECT(h->sub_mb_type[i8])) continue; h->sub_mb_type[i8] = sub_mb_type; - + fill_rectangle(&h->mv_cache[0][scan8[i8*4]], 2, 2, 8, pack16to32(mv[0][0],mv[0][1]), 4); fill_rectangle(&h->mv_cache[1][scan8[i8*4]], 2, 2, 8, pack16to32(mv[1][0],mv[1][1]), 4); fill_rectangle(&h->ref_cache[0][scan8[i8*4]], 2, 2, 8, ref[0], 1); fill_rectangle(&h->ref_cache[1][scan8[i8*4]], 2, 2, 8, ref[1], 1); - + /* col_zero_flag */ - if(!IS_INTRA(mb_type_col) && ( l1ref0[x8 + y8*h->b8_stride] == 0 - || (l1ref0[x8 + y8*h->b8_stride] < 0 && l1ref1[x8 + y8*h->b8_stride] == 0 + if(!IS_INTRA(mb_type_col) && ( l1ref0[x8 + y8*h->b8_stride] == 0 + || (l1ref0[x8 + y8*h->b8_stride] < 0 && l1ref1[x8 + y8*h->b8_stride] == 0 && (h->x264_build>33 || !h->x264_build)))){ const int16_t (*l1mv)[2]= l1ref0[x8 + y8*h->b8_stride] == 0 ? l1mv0 : l1mv1; for(i4=0; i4<4; i4++){ @@ -1371,7 +1371,7 @@ static inline void pred_direct_motion(H264Context * const h, int *mb_type){ fill_rectangle(&h-> mv_cache[1][scan8[i8*4]], 2, 2, 8, 0, 4); continue; } - + ref0 = l1ref0[x8 + y8*h->b8_stride]; if(ref0 >= 0) ref0 = h->map_col_to_list0[0][ref0]; @@ -1380,7 +1380,7 @@ static inline void pred_direct_motion(H264Context * const h, int *mb_type){ l1mv= l1mv1; } dist_scale_factor = h->dist_scale_factor[ref0]; - + fill_rectangle(&h->ref_cache[0][scan8[i8*4]], 2, 2, 8, ref0, 1); fill_rectangle(&h->ref_cache[1][scan8[i8*4]], 2, 2, 8, 0, 1); for(i4=0; i4<4; i4++){ @@ -1424,7 +1424,7 @@ static inline void write_back_motion(H264Context *h, int mb_type){ } continue; } - + for(y=0; y<4; y++){ *(uint64_t*)s->current_picture.motion_val[list][b_xy + 0 + y*h->b_stride]= *(uint64_t*)h->mv_cache[list][scan8[0]+0 + 8*y]; *(uint64_t*)s->current_picture.motion_val[list][b_xy + 2 + y*h->b_stride]= *(uint64_t*)h->mv_cache[list][scan8[0]+2 + 8*y]; @@ -1440,7 +1440,7 @@ static inline void write_back_motion(H264Context *h, int mb_type){ s->current_picture.ref_index[list][b8_xy + 1 + y*h->b8_stride]= h->ref_cache[list][scan8[0]+2 + 16*y]; } } - + if(h->slice_type == B_TYPE && h->pps.cabac){ if(IS_8X8(mb_type)){ h->direct_table[b8_xy+1+0*h->b8_stride] = IS_DIRECT(h->sub_mb_type[1]) ? 1 : 0; @@ -1455,7 +1455,7 @@ static inline void write_back_motion(H264Context *h, int mb_type){ * @param consumed is the number of bytes used as input * @param length is the length of the array * @param dst_length is the number of decoded bytes FIXME here or a decode rbsp tailing? - * @returns decoded bytes, might be src+1 if no escapes + * @returns decoded bytes, might be src+1 if no escapes */ static uint8_t *decode_nal(H264Context *h, uint8_t *src, int *dst_length, int *consumed, int length){ int i, si, di; @@ -1466,7 +1466,7 @@ static uint8_t *decode_nal(H264Context *h, uint8_t *src, int *dst_length, int *c h->nal_unit_type= src[0]&0x1F; src++; length--; -#if 0 +#if 0 for(i=0; i<length; i++) printf("%2X ", src[i]); #endif @@ -1485,7 +1485,7 @@ static uint8_t *decode_nal(H264Context *h, uint8_t *src, int *dst_length, int *c if(i>=length-1){ //no escaped 0 *dst_length= length; *consumed= length+1; //+1 for the header - return src; + return src; } h->rbsp_buffer= av_fast_realloc(h->rbsp_buffer, &h->rbsp_buffer_size, length); @@ -1493,7 +1493,7 @@ static uint8_t *decode_nal(H264Context *h, uint8_t *src, int *dst_length, int *c //printf("decoding esc\n"); si=di=0; - while(si<length){ + while(si<length){ //remove escapes (very rare 1:2^22) if(si+2<length && src[si]==0 && src[si+1]==0 && src[si+2]<=3){ if(src[si+2]==3){ //escape @@ -1525,10 +1525,10 @@ static uint8_t *decode_nal(H264Context *h, uint8_t *src, int *dst_length, int *c static int encode_nal(H264Context *h, uint8_t *dst, uint8_t *src, int length, int dst_length){ int i, escape_count, si, di; uint8_t *temp; - + assert(length>=0); assert(dst_length>0); - + dst[0]= (h->nal_ref_idc<<5) + h->nal_unit_type; if(length==0) return 1; @@ -1536,20 +1536,20 @@ static int encode_nal(H264Context *h, uint8_t *dst, uint8_t *src, int length, in escape_count= 0; for(i=0; i<length; i+=2){ if(src[i]) continue; - if(i>0 && src[i-1]==0) + if(i>0 && src[i-1]==0) i--; if(i+2<length && src[i+1]==0 && src[i+2]<=3){ escape_count++; i+=2; } } - - if(escape_count==0){ + + if(escape_count==0){ if(dst+1 != src) memcpy(dst+1, src, length); return length + 1; } - + if(length + escape_count + 1> dst_length) return -1; @@ -1558,23 +1558,23 @@ static int encode_nal(H264Context *h, uint8_t *dst, uint8_t *src, int length, in h->rbsp_buffer= av_fast_realloc(h->rbsp_buffer, &h->rbsp_buffer_size, length + escape_count); temp= h->rbsp_buffer; //printf("encoding esc\n"); - + si= 0; di= 0; while(si < length){ if(si+2<length && src[si]==0 && src[si+1]==0 && src[si+2]<=3){ temp[di++]= 0; si++; temp[di++]= 0; si++; - temp[di++]= 3; + temp[di++]= 3; temp[di++]= src[si++]; } else temp[di++]= src[si++]; } memcpy(dst+1, temp, length+escape_count); - + assert(di == length+escape_count); - + return di + 1; } @@ -1737,7 +1737,7 @@ static void chroma_dc_dct_c(DCTELEM *block){ * gets the chroma qp. */ static inline int get_chroma_qp(int chroma_qp_index_offset, int qscale){ - + return chroma_qp[clip(qscale + chroma_qp_index_offset, 0, 51)]; } @@ -1746,7 +1746,7 @@ static inline int get_chroma_qp(int chroma_qp_index_offset, int qscale){ static void h264_diff_dct_c(DCTELEM *block, uint8_t *src1, uint8_t *src2, int stride){ int i; //FIXME try int temp instead of block - + for(i=0; i<4; i++){ const int d0= src1[0 + i*stride] - src2[0 + i*stride]; const int d1= src1[1 + i*stride] - src2[1 + i*stride]; @@ -1756,19 +1756,19 @@ static void h264_diff_dct_c(DCTELEM *block, uint8_t *src1, uint8_t *src2, int st const int z3= d0 - d3; const int z1= d1 + d2; const int z2= d1 - d2; - + block[0 + 4*i]= z0 + z1; block[1 + 4*i]= 2*z3 + z2; block[2 + 4*i]= z0 - z1; block[3 + 4*i]= z3 - 2*z2; - } + } for(i=0; i<4; i++){ const int z0= block[0*4 + i] + block[3*4 + i]; const int z3= block[0*4 + i] - block[3*4 + i]; const int z1= block[1*4 + i] + block[2*4 + i]; const int z2= block[1*4 + i] - block[2*4 + i]; - + block[0*4 + i]= z0 + z1; block[1*4 + i]= 2*z3 + z2; block[2*4 + i]= z0 - z1; @@ -1874,35 +1874,35 @@ static void pred4x4_horizontal_c(uint8_t *src, uint8_t *topright, int stride){ static void pred4x4_dc_c(uint8_t *src, uint8_t *topright, int stride){ const int dc= ( src[-stride] + src[1-stride] + src[2-stride] + src[3-stride] + src[-1+0*stride] + src[-1+1*stride] + src[-1+2*stride] + src[-1+3*stride] + 4) >>3; - - ((uint32_t*)(src+0*stride))[0]= - ((uint32_t*)(src+1*stride))[0]= - ((uint32_t*)(src+2*stride))[0]= - ((uint32_t*)(src+3*stride))[0]= dc* 0x01010101; + + ((uint32_t*)(src+0*stride))[0]= + ((uint32_t*)(src+1*stride))[0]= + ((uint32_t*)(src+2*stride))[0]= + ((uint32_t*)(src+3*stride))[0]= dc* 0x01010101; } static void pred4x4_left_dc_c(uint8_t *src, uint8_t *topright, int stride){ const int dc= ( src[-1+0*stride] + src[-1+1*stride] + src[-1+2*stride] + src[-1+3*stride] + 2) >>2; - - ((uint32_t*)(src+0*stride))[0]= - ((uint32_t*)(src+1*stride))[0]= - ((uint32_t*)(src+2*stride))[0]= - ((uint32_t*)(src+3*stride))[0]= dc* 0x01010101; + + ((uint32_t*)(src+0*stride))[0]= + ((uint32_t*)(src+1*stride))[0]= + ((uint32_t*)(src+2*stride))[0]= + ((uint32_t*)(src+3*stride))[0]= dc* 0x01010101; } static void pred4x4_top_dc_c(uint8_t *src, uint8_t *topright, int stride){ const int dc= ( src[-stride] + src[1-stride] + src[2-stride] + src[3-stride] + 2) >>2; - - ((uint32_t*)(src+0*stride))[0]= - ((uint32_t*)(src+1*stride))[0]= - ((uint32_t*)(src+2*stride))[0]= - ((uint32_t*)(src+3*stride))[0]= dc* 0x01010101; + + ((uint32_t*)(src+0*stride))[0]= + ((uint32_t*)(src+1*stride))[0]= + ((uint32_t*)(src+2*stride))[0]= + ((uint32_t*)(src+3*stride))[0]= dc* 0x01010101; } static void pred4x4_128_dc_c(uint8_t *src, uint8_t *topright, int stride){ - ((uint32_t*)(src+0*stride))[0]= - ((uint32_t*)(src+1*stride))[0]= - ((uint32_t*)(src+2*stride))[0]= + ((uint32_t*)(src+0*stride))[0]= + ((uint32_t*)(src+1*stride))[0]= + ((uint32_t*)(src+2*stride))[0]= ((uint32_t*)(src+3*stride))[0]= 128U*0x01010101U; } @@ -1930,16 +1930,16 @@ static void pred4x4_down_right_c(uint8_t *src, uint8_t *topright, int stride){ LOAD_TOP_EDGE LOAD_LEFT_EDGE - src[0+3*stride]=(l3 + 2*l2 + l1 + 2)>>2; + src[0+3*stride]=(l3 + 2*l2 + l1 + 2)>>2; src[0+2*stride]= - src[1+3*stride]=(l2 + 2*l1 + l0 + 2)>>2; + src[1+3*stride]=(l2 + 2*l1 + l0 + 2)>>2; src[0+1*stride]= src[1+2*stride]= - src[2+3*stride]=(l1 + 2*l0 + lt + 2)>>2; + src[2+3*stride]=(l1 + 2*l0 + lt + 2)>>2; src[0+0*stride]= src[1+1*stride]= src[2+2*stride]= - src[3+3*stride]=(l0 + 2*lt + t0 + 2)>>2; + src[3+3*stride]=(l0 + 2*lt + t0 + 2)>>2; src[1+0*stride]= src[2+1*stride]= src[3+2*stride]=(lt + 2*t0 + t1 + 2)>>2; @@ -1949,9 +1949,9 @@ static void pred4x4_down_right_c(uint8_t *src, uint8_t *topright, int stride){ } static void pred4x4_down_left_c(uint8_t *src, uint8_t *topright, int stride){ - LOAD_TOP_EDGE - LOAD_TOP_RIGHT_EDGE -// LOAD_LEFT_EDGE + LOAD_TOP_EDGE + LOAD_TOP_RIGHT_EDGE +// LOAD_LEFT_EDGE src[0+0*stride]=(t0 + t2 + 2*t1 + 2)>>2; src[1+0*stride]= @@ -1973,8 +1973,8 @@ static void pred4x4_down_left_c(uint8_t *src, uint8_t *topright, int stride){ static void pred4x4_vertical_right_c(uint8_t *src, uint8_t *topright, int stride){ const int lt= src[-1-1*stride]; - LOAD_TOP_EDGE - LOAD_LEFT_EDGE + LOAD_TOP_EDGE + LOAD_LEFT_EDGE const __attribute__((unused)) int unu= l3; src[0+0*stride]= @@ -1996,8 +1996,8 @@ static void pred4x4_vertical_right_c(uint8_t *src, uint8_t *topright, int stride } static void pred4x4_vertical_left_c(uint8_t *src, uint8_t *topright, int stride){ - LOAD_TOP_EDGE - LOAD_TOP_RIGHT_EDGE + LOAD_TOP_EDGE + LOAD_TOP_RIGHT_EDGE const __attribute__((unused)) int unu= t7; src[0+0*stride]=(t0 + t1 + 1)>>1; @@ -2019,7 +2019,7 @@ static void pred4x4_vertical_left_c(uint8_t *src, uint8_t *topright, int stride) } static void pred4x4_horizontal_up_c(uint8_t *src, uint8_t *topright, int stride){ - LOAD_LEFT_EDGE + LOAD_LEFT_EDGE src[0+0*stride]=(l0 + l1 + 1)>>1; src[1+0*stride]=(l0 + 2*l1 + l2 + 2)>>2; @@ -2038,11 +2038,11 @@ static void pred4x4_horizontal_up_c(uint8_t *src, uint8_t *topright, int stride) src[2+3*stride]= src[3+3*stride]=l3; } - + static void pred4x4_horizontal_down_c(uint8_t *src, uint8_t *topright, int stride){ const int lt= src[-1-1*stride]; - LOAD_TOP_EDGE - LOAD_LEFT_EDGE + LOAD_TOP_EDGE + LOAD_LEFT_EDGE const __attribute__((unused)) int unu= t3; src[0+0*stride]= @@ -2069,7 +2069,7 @@ static void pred16x16_vertical_c(uint8_t *src, int stride){ const uint32_t b= ((uint32_t*)(src-stride))[1]; const uint32_t c= ((uint32_t*)(src-stride))[2]; const uint32_t d= ((uint32_t*)(src-stride))[3]; - + for(i=0; i<16; i++){ ((uint32_t*)(src+i*stride))[0]= a; ((uint32_t*)(src+i*stride))[1]= b; @@ -2095,7 +2095,7 @@ static void pred16x16_dc_c(uint8_t *src, int stride){ for(i=0;i<16; i++){ dc+= src[-1+i*stride]; } - + for(i=0;i<16; i++){ dc+= src[i-stride]; } @@ -2116,7 +2116,7 @@ static void pred16x16_left_dc_c(uint8_t *src, int stride){ for(i=0;i<16; i++){ dc+= src[-1+i*stride]; } - + dc= 0x01010101*((dc + 8)>>4); for(i=0; i<16; i++){ @@ -2202,7 +2202,7 @@ static void pred8x8_vertical_c(uint8_t *src, int stride){ int i; const uint32_t a= ((uint32_t*)(src-stride))[0]; const uint32_t b= ((uint32_t*)(src-stride))[1]; - + for(i=0; i<8; i++){ ((uint32_t*)(src+i*stride))[0]= a; ((uint32_t*)(src+i*stride))[1]= b; @@ -2222,7 +2222,7 @@ static void pred8x8_128_dc_c(uint8_t *src, int stride){ int i; for(i=0; i<8; i++){ - ((uint32_t*)(src+i*stride))[0]= + ((uint32_t*)(src+i*stride))[0]= ((uint32_t*)(src+i*stride))[1]= 0x01010101U*128U; } } @@ -2455,7 +2455,7 @@ static void pred8x8l_down_right_c(uint8_t *src, int has_topleft, int has_toprigh SRC(5,0)=SRC(6,1)=SRC(7,2)= (t3 + 2*t4 + t5 + 2) >> 2; SRC(6,0)=SRC(7,1)= (t4 + 2*t5 + t6 + 2) >> 2; SRC(7,0)= (t5 + 2*t6 + t7 + 2) >> 2; - + } static void pred8x8l_vertical_right_c(uint8_t *src, int has_topleft, int has_topright, int stride) { @@ -2590,28 +2590,28 @@ static inline void mc_dir_part(H264Context *h, Picture *pic, int n, int square, const int full_my= my>>2; const int pic_width = 16*s->mb_width; const int pic_height = 16*s->mb_height; - + assert(pic->data[0]); - + if(mx&7) extra_width -= 3; if(my&7) extra_height -= 3; - - if( full_mx < 0-extra_width - || full_my < 0-extra_height - || full_mx + 16/*FIXME*/ > pic_width + extra_width + + if( full_mx < 0-extra_width + || full_my < 0-extra_height + || full_mx + 16/*FIXME*/ > pic_width + extra_width || full_my + 16/*FIXME*/ > pic_height + extra_height){ ff_emulated_edge_mc(s->edge_emu_buffer, src_y - 2 - 2*s->linesize, s->linesize, 16+5, 16+5/*FIXME*/, full_mx-2, full_my-2, pic_width, pic_height); src_y= s->edge_emu_buffer + 2 + 2*s->linesize; emu=1; } - + qpix_op[luma_xy](dest_y, src_y, s->linesize); //FIXME try variable height perhaps? if(!square){ qpix_op[luma_xy](dest_y + delta, src_y + delta, s->linesize); } - + if(s->flags&CODEC_FLAG_GRAY) return; - + if(emu){ ff_emulated_edge_mc(s->edge_emu_buffer, src_cb, s->uvlinesize, 9, 9/*FIXME*/, (mx>>3), (my>>3), pic_width>>1, pic_height>>1); src_cb= s->edge_emu_buffer; @@ -2634,13 +2634,13 @@ static inline void mc_part_std(H264Context *h, int n, int square, int chroma_hei MpegEncContext * const s = &h->s; qpel_mc_func *qpix_op= qpix_put; h264_chroma_mc_func chroma_op= chroma_put; - + dest_y += 2*x_offset + 2*y_offset*s-> linesize; dest_cb += x_offset + y_offset*s->uvlinesize; dest_cr += x_offset + y_offset*s->uvlinesize; x_offset += 8*s->mb_x; y_offset += 8*s->mb_y; - + if(list0){ Picture *ref= &h->ref_list[0][ h->ref_cache[0][ scan8[n] ] ]; mc_dir_part(h, ref, n, square, chroma_height, delta, 0, @@ -2673,7 +2673,7 @@ static inline void mc_part_weighted(H264Context *h, int n, int square, int chrom dest_cr += x_offset + y_offset*s->uvlinesize; x_offset += 8*s->mb_x; y_offset += 8*s->mb_y; - + if(list0 && list1){ /* don't optimize for luma-only case, since B-frames usually * use implicit weights => chroma too. */ @@ -2698,13 +2698,13 @@ static inline void mc_part_weighted(H264Context *h, int n, int square, int chrom chroma_weight_avg(dest_cr, tmp_cr, s->uvlinesize, 5, weight0, weight1, 0, 0); }else{ luma_weight_avg(dest_y, tmp_y, s->linesize, h->luma_log2_weight_denom, - h->luma_weight[0][refn0], h->luma_weight[1][refn1], + h->luma_weight[0][refn0], h->luma_weight[1][refn1], h->luma_offset[0][refn0], h->luma_offset[1][refn1]); chroma_weight_avg(dest_cb, tmp_cb, s->uvlinesize, h->chroma_log2_weight_denom, - h->chroma_weight[0][refn0][0], h->chroma_weight[1][refn1][0], + h->chroma_weight[0][refn0][0], h->chroma_weight[1][refn1][0], h->chroma_offset[0][refn0][0], h->chroma_offset[1][refn1][0]); chroma_weight_avg(dest_cr, tmp_cr, s->uvlinesize, h->chroma_log2_weight_denom, - h->chroma_weight[0][refn0][1], h->chroma_weight[1][refn1][1], + h->chroma_weight[0][refn0][1], h->chroma_weight[1][refn1][1], h->chroma_offset[0][refn0][1], h->chroma_offset[1][refn1][1]); } }else{ @@ -2731,7 +2731,7 @@ static inline void mc_part(H264Context *h, int n, int square, int chroma_height, int x_offset, int y_offset, qpel_mc_func *qpix_put, h264_chroma_mc_func chroma_put, qpel_mc_func *qpix_avg, h264_chroma_mc_func chroma_avg, - h264_weight_func *weight_op, h264_biweight_func *weight_avg, + h264_weight_func *weight_op, h264_biweight_func *weight_avg, int list0, int list1){ if((h->use_weight==2 && list0 && list1 && (h->implicit_weight[ h->ref_cache[0][scan8[n]] ][ h->ref_cache[1][scan8[n]] ] != 32)) @@ -2751,9 +2751,9 @@ static void hl_motion(H264Context *h, uint8_t *dest_y, uint8_t *dest_cb, uint8_t MpegEncContext * const s = &h->s; const int mb_xy= s->mb_x + s->mb_y*s->mb_stride; const int mb_type= s->current_picture.mb_type[mb_xy]; - + assert(IS_INTER(mb_type)); - + if(IS_16X16(mb_type)){ mc_part(h, 0, 1, 8, 0, dest_y, dest_cb, dest_cr, 0, 0, qpix_put[0], chroma_put[0], qpix_avg[0], chroma_avg[0], @@ -2779,7 +2779,7 @@ static void hl_motion(H264Context *h, uint8_t *dest_y, uint8_t *dest_cb, uint8_t IS_DIR(mb_type, 1, 0), IS_DIR(mb_type, 1, 1)); }else{ int i; - + assert(IS_8X8(mb_type)); for(i=0; i<4; i++){ @@ -2834,12 +2834,12 @@ static void decode_init_vlc(H264Context *h){ int i; done = 1; - init_vlc(&chroma_dc_coeff_token_vlc, CHROMA_DC_COEFF_TOKEN_VLC_BITS, 4*5, + init_vlc(&chroma_dc_coeff_token_vlc, CHROMA_DC_COEFF_TOKEN_VLC_BITS, 4*5, &chroma_dc_coeff_token_len [0], 1, 1, &chroma_dc_coeff_token_bits[0], 1, 1, 1); for(i=0; i<4; i++){ - init_vlc(&coeff_token_vlc[i], COEFF_TOKEN_VLC_BITS, 4*17, + init_vlc(&coeff_token_vlc[i], COEFF_TOKEN_VLC_BITS, 4*17, &coeff_token_len [i][0], 1, 1, &coeff_token_bits[i][0], 1, 1, 1); } @@ -2850,17 +2850,17 @@ static void decode_init_vlc(H264Context *h){ &chroma_dc_total_zeros_bits[i][0], 1, 1, 1); } for(i=0; i<15; i++){ - init_vlc(&total_zeros_vlc[i], TOTAL_ZEROS_VLC_BITS, 16, + init_vlc(&total_zeros_vlc[i], TOTAL_ZEROS_VLC_BITS, 16, &total_zeros_len [i][0], 1, 1, &total_zeros_bits[i][0], 1, 1, 1); } for(i=0; i<6; i++){ - init_vlc(&run_vlc[i], RUN_VLC_BITS, 7, + init_vlc(&run_vlc[i], RUN_VLC_BITS, 7, &run_len [i][0], 1, 1, &run_bits[i][0], 1, 1, 1); } - init_vlc(&run7_vlc, RUN7_VLC_BITS, 16, + init_vlc(&run7_vlc, RUN7_VLC_BITS, 16, &run_len [6][0], 1, 1, &run_bits[6][0], 1, 1, 1); } @@ -3029,7 +3029,7 @@ static int alloc_tables(H264Context *h){ const int mb_xy= x + y*s->mb_stride; const int b_xy = 4*x + 4*y*h->b_stride; const int b8_xy= 2*x + 2*y*h->b8_stride; - + h->mb2b_xy [mb_xy]= b_xy; h->mb2b8_xy[mb_xy]= b8_xy; } @@ -3052,7 +3052,7 @@ static void common_init(H264Context *h){ s->width = s->avctx->width; s->height = s->avctx->height; s->codec_id= s->avctx->codec->id; - + init_pred_ptrs(h); h->dequant_coeff_pps= -1; @@ -3068,7 +3068,7 @@ static int decode_init(AVCodecContext *avctx){ MpegEncContext * const s = &h->s; MPV_decode_defaults(s); - + s->avctx = avctx; common_init(h); @@ -3081,7 +3081,7 @@ static int decode_init(AVCodecContext *avctx){ avctx->pix_fmt= PIX_FMT_YUV420P; decode_init_vlc(h); - + if(avctx->extradata_size > 0 && avctx->extradata && *(char *)avctx->extradata == 1){ h->is_avc = 1; @@ -3126,7 +3126,7 @@ static int frame_start(H264Context *h){ static inline void backup_mb_border(H264Context *h, uint8_t *src_y, uint8_t *src_cb, uint8_t *src_cr, int linesize, int uvlinesize){ MpegEncContext * const s = &h->s; int i; - + src_y -= linesize; src_cb -= uvlinesize; src_cr -= uvlinesize; @@ -3137,7 +3137,7 @@ static inline void backup_mb_border(H264Context *h, uint8_t *src_y, uint8_t *src for(i=1; i<17; i++){ h->left_border[i]= src_y[15+i* linesize]; } - + *(uint64_t*)(h->top_borders[0][s->mb_x]+0)= *(uint64_t*)(src_y + 16*linesize); *(uint64_t*)(h->top_borders[0][s->mb_x]+8)= *(uint64_t*)(src_y +8+16*linesize); @@ -3201,7 +3201,7 @@ b= t; static inline void backup_pair_border(H264Context *h, uint8_t *src_y, uint8_t *src_cb, uint8_t *src_cr, int linesize, int uvlinesize){ MpegEncContext * const s = &h->s; int i; - + src_y -= 2 * linesize; src_cb -= 2 * uvlinesize; src_cr -= 2 * uvlinesize; @@ -3213,7 +3213,7 @@ static inline void backup_pair_border(H264Context *h, uint8_t *src_y, uint8_t *s for(i=2; i<34; i++){ h->left_border[i]= src_y[15+i* linesize]; } - + *(uint64_t*)(h->top_borders[0][s->mb_x]+0)= *(uint64_t*)(src_y + 32*linesize); *(uint64_t*)(h->top_borders[0][s->mb_x]+8)= *(uint64_t*)(src_y +8+32*linesize); *(uint64_t*)(h->top_borders[1][s->mb_x]+0)= *(uint64_t*)(src_y + 33*linesize); @@ -3318,7 +3318,7 @@ static void hl_decode_mb(H264Context *h){ uvlinesize = s->uvlinesize; // dct_offset = s->linesize * 16; } - + idct_add = transform_bypass ? IS_8x8DCT(mb_type) ? s->dsp.add_pixels8 : s->dsp.add_pixels4 : IS_8x8DCT(mb_type) ? s->dsp.h264_idct8_add : s->dsp.h264_idct_add; @@ -3389,7 +3389,7 @@ static void hl_decode_mb(H264Context *h){ if(!topright_avail){ tr= ptr[3 - linesize]*0x01010101; topright= (uint8_t*) &tr; - }else + }else topright= ptr + 4 - linesize; }else topright= NULL; @@ -3427,7 +3427,7 @@ static void hl_decode_mb(H264Context *h){ } }else if(s->codec_id == CODEC_ID_H264){ hl_motion(h, dest_y, dest_cb, dest_cr, - s->dsp.put_h264_qpel_pixels_tab, s->dsp.put_h264_chroma_pixels_tab, + s->dsp.put_h264_qpel_pixels_tab, s->dsp.put_h264_chroma_pixels_tab, s->dsp.avg_h264_qpel_pixels_tab, s->dsp.avg_h264_chroma_pixels_tab, s->dsp.weight_h264_pixels_tab, s->dsp.biweight_h264_pixels_tab); } @@ -3502,7 +3502,7 @@ static void hl_decode_mb(H264Context *h){ backup_pair_border(h, pair_dest_y, pair_dest_cb, pair_dest_cr, s->linesize, s->uvlinesize); // TODO deblock a pair - // top + // top s->mb_y--; tprintf("call mbaff filter_mb mb_x:%d mb_y:%d pair_dest_y = %p, dest_y = %p\n", mb_x, mb_y, pair_dest_y, dest_y); fill_caches(h, mb_type_top, 1); //FIXME don't fill stuff which isn't used by filter_mb @@ -3535,7 +3535,7 @@ static int fill_default_ref_list(H264Context *h){ int i; int smallest_poc_greater_than_current = -1; Picture sorted_short_ref[32]; - + if(h->slice_type==B_TYPE){ int out_i; int limit= INT_MIN; @@ -3552,9 +3552,9 @@ static int fill_default_ref_list(H264Context *h){ best_i= i; } } - + assert(best_i != INT_MIN); - + limit= best_poc; sorted_short_ref[out_i]= *h->short_ref[best_i]; tprintf("sorted poc: %d->%d poc:%d fn:%d\n", best_i, out_i, sorted_short_ref[out_i].poc, sorted_short_ref[out_i].frame_num); @@ -3596,7 +3596,7 @@ static int fill_default_ref_list(H264Context *h){ h->default_ref_list[ list ][index ]= *h->long_ref[i]; h->default_ref_list[ list ][index++].pic_id= i;; } - + if(list && (smallest_poc_greater_than_current<=0 || smallest_poc_greater_than_current>=h->short_ref_count) && (1 < index)){ // swap the two first elements of L1 when // L0 and L1 are identical @@ -3649,11 +3649,11 @@ static void print_long_term(H264Context *h); static int decode_ref_pic_list_reordering(H264Context *h){ MpegEncContext * const s = &h->s; int list, index; - + print_short_term(h); print_long_term(h); if(h->slice_type==I_TYPE || h->slice_type==SI_TYPE) return 0; //FIXME move before func - + for(list=0; list<2; list++){ memcpy(h->ref_list[list], h->default_ref_list[list], sizeof(Picture)*h->ref_count[list]); @@ -3665,15 +3665,15 @@ static int decode_ref_pic_list_reordering(H264Context *h){ int pic_id; int i; Picture *ref = NULL; - - if(reordering_of_pic_nums_idc==3) + + if(reordering_of_pic_nums_idc==3) break; - + if(index >= h->ref_count[list]){ av_log(h->s.avctx, AV_LOG_ERROR, "reference count overflow\n"); return -1; } - + if(reordering_of_pic_nums_idc<3){ if(reordering_of_pic_nums_idc<2){ const int abs_diff_pic_num= get_ue_golomb(&s->gb) + 1; @@ -3686,7 +3686,7 @@ static int decode_ref_pic_list_reordering(H264Context *h){ if(reordering_of_pic_nums_idc == 0) pred-= abs_diff_pic_num; else pred+= abs_diff_pic_num; pred &= h->max_pic_num - 1; - + for(i= h->short_ref_count-1; i>=0; i--){ ref = h->short_ref[i]; assert(ref->reference == 3); @@ -3734,18 +3734,18 @@ static int decode_ref_pic_list_reordering(H264Context *h){ } if(h->slice_type!=B_TYPE) break; } - + if(h->slice_type==B_TYPE && !h->direct_spatial_mv_pred) direct_dist_scale_factor(h); direct_ref_list_init(h); - return 0; + return 0; } static int pred_weight_table(H264Context *h){ MpegEncContext * const s = &h->s; int list, i; int luma_def, chroma_def; - + h->use_weight= 0; h->use_weight_chroma= 0; h->luma_log2_weight_denom= get_ue_golomb(&s->gb); @@ -3756,7 +3756,7 @@ static int pred_weight_table(H264Context *h){ for(list=0; list<2; list++){ for(i=0; i<h->ref_count[list]; i++){ int luma_weight_flag, chroma_weight_flag; - + luma_weight_flag= get_bits1(&s->gb); if(luma_weight_flag){ h->luma_weight[list][i]= get_se_golomb(&s->gb); @@ -3884,10 +3884,10 @@ static void flush_dpb(AVCodecContext *avctx){ static Picture * remove_short(H264Context *h, int frame_num){ MpegEncContext * const s = &h->s; int i; - + if(s->avctx->debug&FF_DEBUG_MMCO) av_log(h->s.avctx, AV_LOG_DEBUG, "remove short %d count %d\n", frame_num, h->short_ref_count); - + for(i=0; i<h->short_ref_count; i++){ Picture *pic= h->short_ref[i]; if(s->avctx->debug&FF_DEBUG_MMCO) @@ -3954,10 +3954,10 @@ static int execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count){ int i, j; int current_is_long=0; Picture *pic; - + if((s->avctx->debug&FF_DEBUG_MMCO) && mmco_count==0) av_log(h->s.avctx, AV_LOG_DEBUG, "no mmco here\n"); - + for(i=0; i<mmco_count; i++){ if(s->avctx->debug&FF_DEBUG_MMCO) av_log(h->s.avctx, AV_LOG_DEBUG, "mmco:%d %d %d\n", h->mmco[i].opcode, h->mmco[i].short_frame_num, h->mmco[i].long_index); @@ -3973,7 +3973,7 @@ static int execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count){ case MMCO_SHORT2LONG: pic= remove_long(h, mmco[i].long_index); if(pic) unreference_pic(h, pic); - + h->long_ref[ mmco[i].long_index ]= remove_short(h, mmco[i].short_frame_num); h->long_ref[ mmco[i].long_index ]->long_ref=1; h->long_ref_count++; @@ -3988,11 +3988,11 @@ static int execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count){ case MMCO_LONG: pic= remove_long(h, mmco[i].long_index); if(pic) unreference_pic(h, pic); - + h->long_ref[ mmco[i].long_index ]= s->current_picture_ptr; h->long_ref[ mmco[i].long_index ]->long_ref=1; h->long_ref_count++; - + current_is_long=1; break; case MMCO_SET_MAX_LONG: @@ -4016,14 +4016,14 @@ static int execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count){ default: assert(0); } } - + if(!current_is_long){ pic= remove_short(h, s->current_picture_ptr->frame_num); if(pic){ unreference_pic(h, pic); av_log(h->s.avctx, AV_LOG_ERROR, "illegal short term buffer state detected\n"); } - + if(h->short_ref_count) memmove(&h->short_ref[1], &h->short_ref[0], h->short_ref_count*sizeof(Picture*)); @@ -4031,16 +4031,16 @@ static int execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count){ h->short_ref[0]->long_ref=0; h->short_ref_count++; } - + print_short_term(h); print_long_term(h); - return 0; + return 0; } static int decode_ref_pic_marking(H264Context *h){ MpegEncContext * const s = &h->s; int i; - + if(h->nal_unit_type == NAL_IDR_SLICE){ //FIXME fields s->broken_link= get_bits1(&s->gb) -1; h->mmco[0].long_index= get_bits1(&s->gb) - 1; // current_long_term_idx @@ -4049,10 +4049,10 @@ static int decode_ref_pic_marking(H264Context *h){ else{ h->mmco[0].opcode= MMCO_LONG; h->mmco_index= 1; - } + } }else{ if(get_bits1(&s->gb)){ // adaptive_ref_pic_marking_mode_flag - for(i= 0; i<MAX_MMCO_COUNT; i++) { + for(i= 0; i<MAX_MMCO_COUNT; i++) { MMCOOpcode opcode= get_ue_golomb(&s->gb);; h->mmco[i].opcode= opcode; @@ -4070,7 +4070,7 @@ static int decode_ref_pic_marking(H264Context *h){ return -1; } } - + if(opcode > MMCO_LONG){ av_log(h->s.avctx, AV_LOG_ERROR, "illegal memory management control operation %d\n", opcode); return -1; @@ -4090,8 +4090,8 @@ static int decode_ref_pic_marking(H264Context *h){ h->mmco_index= 0; } } - - return 0; + + return 0; } static int init_poc(H264Context *h){ @@ -4123,9 +4123,9 @@ static int init_poc(H264Context *h){ else h->poc_msb = h->prev_poc_msb; //printf("poc: %d %d\n", h->poc_msb, h->poc_lsb); - field_poc[0] = + field_poc[0] = field_poc[1] = h->poc_msb + h->poc_lsb; - if(s->picture_structure == PICT_FRAME) + if(s->picture_structure == PICT_FRAME) field_poc[1] += h->delta_poc_bottom; }else if(h->sps.poc_type==1){ int abs_frame_num, expected_delta_per_poc_cycle, expectedpoc; @@ -4138,7 +4138,7 @@ static int init_poc(H264Context *h){ if(h->nal_ref_idc==0 && abs_frame_num > 0) abs_frame_num--; - + expected_delta_per_poc_cycle = 0; for(i=0; i < h->sps.poc_cycle_length; i++) expected_delta_per_poc_cycle += h->sps.offset_for_ref_frame[ i ]; //FIXME integrate during sps parse @@ -4153,9 +4153,9 @@ static int init_poc(H264Context *h){ } else expectedpoc = 0; - if(h->nal_ref_idc == 0) + if(h->nal_ref_idc == 0) expectedpoc = expectedpoc + h->sps.offset_for_non_ref_pic; - + field_poc[0] = expectedpoc + h->delta_poc[0]; field_poc[1] = field_poc[0] + h->sps.offset_for_top_to_bottom_field; @@ -4172,7 +4172,7 @@ static int init_poc(H264Context *h){ field_poc[0]= poc; field_poc[1]= poc; } - + if(s->picture_structure != PICT_BOTTOM_FIELD) s->current_picture_ptr->field_poc[0]= field_poc[0]; if(s->picture_structure != PICT_TOP_FIELD) @@ -4210,7 +4210,7 @@ static int decode_slice_header(H264Context *h){ h->slice_type_fixed=1; }else h->slice_type_fixed=0; - + slice_type= slice_type_map[ slice_type ]; if (slice_type == I_TYPE || (h->slice_num != 0 && slice_type == h->slice_type) ) { @@ -4219,7 +4219,7 @@ static int decode_slice_header(H264Context *h){ h->slice_type= slice_type; s->pict_type= h->slice_type; // to make a few old func happy, it's wrong though - + pps_id= get_ue_golomb(&s->gb); if(pps_id>255){ av_log(h->s.avctx, AV_LOG_ERROR, "pps_id out of range\n"); @@ -4241,10 +4241,10 @@ static int decode_slice_header(H264Context *h){ h->dequant_coeff_pps = pps_id; init_dequant_tables(h); } - + s->mb_width= h->sps.mb_width; s->mb_height= h->sps.mb_height * (2 - h->sps.frame_mbs_only_flag); - + h->b_stride= s->mb_width*4 + 1; h->b8_stride= s->mb_width*2 + 1; @@ -4253,8 +4253,8 @@ static int decode_slice_header(H264Context *h){ s->height= 16*s->mb_height - 2*(h->sps.crop_top + h->sps.crop_bottom); else s->height= 16*s->mb_height - 4*(h->sps.crop_top + h->sps.crop_bottom); //FIXME recheck - - if (s->context_initialized + + if (s->context_initialized && ( s->width != s->avctx->width || s->height != s->avctx->height)) { free_tables(h); MPV_common_end(s); @@ -4262,7 +4262,7 @@ static int decode_slice_header(H264Context *h){ if (!s->context_initialized) { if (MPV_common_init(s) < 0) return -1; - + if(s->dsp.h264_idct_add == ff_h264_idct_add_c){ //FIXME little ugly memcpy(h->zigzag_scan, zigzag_scan, 16*sizeof(uint8_t)); memcpy(h-> field_scan, field_scan, 16*sizeof(uint8_t)); @@ -4321,7 +4321,7 @@ static int decode_slice_header(H264Context *h){ if(s->mb_y >= s->mb_height){ return -1; } - + if(s->picture_structure==PICT_FRAME){ h->curr_pic_num= h->frame_num; h->max_pic_num= 1<< h->sps.log2_max_frame_num; @@ -4329,28 +4329,28 @@ static int decode_slice_header(H264Context *h){ h->curr_pic_num= 2*h->frame_num; h->max_pic_num= 1<<(h->sps.log2_max_frame_num + 1); } - + if(h->nal_unit_type == NAL_IDR_SLICE){ get_ue_golomb(&s->gb); /* idr_pic_id */ } - + if(h->sps.poc_type==0){ h->poc_lsb= get_bits(&s->gb, h->sps.log2_max_poc_lsb); - + if(h->pps.pic_order_present==1 && s->picture_structure==PICT_FRAME){ h->delta_poc_bottom= get_se_golomb(&s->gb); } } - + if(h->sps.poc_type==1 && !h->sps.delta_pic_order_always_zero_flag){ h->delta_poc[0]= get_se_golomb(&s->gb); - + if(h->pps.pic_order_present==1 && s->picture_structure==PICT_FRAME) h->delta_poc[1]= get_se_golomb(&s->gb); } - + init_poc(h); - + if(h->pps.redundant_pic_cnt_present){ h->redundant_pic_count= get_ue_golomb(&s->gb); } @@ -4364,7 +4364,7 @@ static int decode_slice_header(H264Context *h){ h->direct_spatial_mv_pred= get_bits1(&s->gb); } num_ref_idx_active_override_flag= get_bits1(&s->gb); - + if(num_ref_idx_active_override_flag){ h->ref_count[0]= get_ue_golomb(&s->gb) + 1; if(h->slice_type==B_TYPE) @@ -4384,14 +4384,14 @@ static int decode_slice_header(H264Context *h){ if(decode_ref_pic_list_reordering(h) < 0) return -1; - if( (h->pps.weighted_pred && (h->slice_type == P_TYPE || h->slice_type == SP_TYPE )) + if( (h->pps.weighted_pred && (h->slice_type == P_TYPE || h->slice_type == SP_TYPE )) || (h->pps.weighted_bipred_idc==1 && h->slice_type==B_TYPE ) ) pred_weight_table(h); else if(h->pps.weighted_bipred_idc==2 && h->slice_type==B_TYPE) implicit_weight_table(h); else h->use_weight = 0; - + if(s->current_picture.reference) decode_ref_pic_marking(h); @@ -4418,7 +4418,7 @@ static int decode_slice_header(H264Context *h){ h->slice_beta_offset = 0; if( h->pps.deblocking_filter_parameters_present ) { h->deblocking_filter= get_ue_golomb(&s->gb); - if(h->deblocking_filter < 2) + if(h->deblocking_filter < 2) h->deblocking_filter^= 1; // 1<->0 if( h->deblocking_filter ) { @@ -4440,10 +4440,10 @@ static int decode_slice_header(H264Context *h){ h->slice_num++; if(s->avctx->debug&FF_DEBUG_PICT_INFO){ - av_log(h->s.avctx, AV_LOG_DEBUG, "slice:%d %s mb:%d %c pps:%d frame:%d poc:%d/%d ref:%d/%d qp:%d loop:%d:%d:%d weight:%d%s\n", + av_log(h->s.avctx, AV_LOG_DEBUG, "slice:%d %s mb:%d %c pps:%d frame:%d poc:%d/%d ref:%d/%d qp:%d loop:%d:%d:%d weight:%d%s\n", h->slice_num, (s->picture_structure==PICT_FRAME ? "F" : s->picture_structure==PICT_TOP_FIELD ? "T" : "B"), - first_mb_in_slice, + first_mb_in_slice, av_get_pict_type_char(h->slice_type), pps_id, h->frame_num, s->current_picture_ptr->field_poc[0], s->current_picture_ptr->field_poc[1], @@ -4464,11 +4464,11 @@ static int decode_slice_header(H264Context *h){ static inline int get_level_prefix(GetBitContext *gb){ unsigned int buf; int log; - + OPEN_READER(re, gb); UPDATE_CACHE(re, gb); buf=GET_CACHE(re, gb); - + log= 32 - av_log2(buf); #ifdef TRACE print_bin(buf>>(32-log), log); @@ -4509,7 +4509,7 @@ static int decode_residual(H264Context *h, GetBitContext *gb, DCTELEM *block, in if(n == CHROMA_DC_BLOCK_INDEX){ coeff_token= get_vlc2(gb, chroma_dc_coeff_token_vlc.table, CHROMA_DC_COEFF_TOKEN_VLC_BITS, 1); total_coeff= coeff_token>>2; - }else{ + }else{ if(n == LUMA_DC_BLOCK_INDEX){ total_coeff= pred_non_zero_count(h, 0); coeff_token= get_vlc2(gb, coeff_token_vlc[ coeff_token_table_index[total_coeff] ].table, COEFF_TOKEN_VLC_BITS, 2); @@ -4526,11 +4526,11 @@ static int decode_residual(H264Context *h, GetBitContext *gb, DCTELEM *block, in if(total_coeff==0) return 0; - + trailing_ones= coeff_token&3; tprintf("trailing:%d, total:%d\n", trailing_ones, total_coeff); assert(total_coeff<=16); - + for(i=0; i<trailing_ones; i++){ level[i]= 1 - 2*get_bits1(gb); } @@ -4647,7 +4647,7 @@ static void decode_mb_skip(H264Context *h){ MpegEncContext * const s = &h->s; const int mb_xy= s->mb_x + s->mb_y*s->mb_stride; int mb_type=0; - + memset(h->non_zero_count[mb_xy], 0, 16); memset(h->non_zero_count_cache + 8, 0, 8*5); //FIXME ugly, remove pfui @@ -4699,7 +4699,7 @@ static int decode_mb_cavlc(H264Context *h){ int mb_type, partition_count, cbp; int dct8x8_allowed= h->pps.transform_8x8_mode; - s->dsp.clear_blocks(h->mb); //FIXME avoid if already clear (move after skip handlong? + s->dsp.clear_blocks(h->mb); //FIXME avoid if already clear (move after skip handlong? tprintf("pic:%d mb:%d/%d\n", h->frame_num, s->mb_x, s->mb_y); cbp = 0; /* avoid warning. FIXME: find a solution without slowing @@ -4707,7 +4707,7 @@ static int decode_mb_cavlc(H264Context *h){ if(h->slice_type != I_TYPE && h->slice_type != SI_TYPE){ if(s->mb_skip_run==-1) s->mb_skip_run= get_ue_golomb(&s->gb); - + if (s->mb_skip_run--) { decode_mb_skip(h); return 0; @@ -4718,9 +4718,9 @@ static int decode_mb_cavlc(H264Context *h){ h->mb_field_decoding_flag = get_bits1(&s->gb); }else h->mb_field_decoding_flag= (s->picture_structure!=PICT_FRAME); - + h->prev_mb_skipped= 0; - + mb_type= get_ue_golomb(&s->gb); if(h->slice_type == B_TYPE){ if(mb_type < 23){ @@ -4755,13 +4755,13 @@ decode_intra_mb: mb_type |= MB_TYPE_INTERLACED; h->slice_table[ mb_xy ]= h->slice_num; - + if(IS_INTRA_PCM(mb_type)){ unsigned int x, y; - + // we assume these blocks are very rare so we dont optimize it align_get_bits(&s->gb); - + // The pixels are stored in the same order as levels in h->mb array. for(y=0; y<16; y++){ const int index= 4*(y&3) + 32*((y>>2)&1) + 128*(y>>3); @@ -4784,17 +4784,17 @@ decode_intra_mb: h->mb[index + (x&3) + 16*(x>>2)]= get_bits(&s->gb, 8); } } - + // In deblocking, the quantizer is 0 s->current_picture.qscale_table[mb_xy]= 0; h->chroma_qp = get_chroma_qp(h->pps.chroma_qp_index_offset, 0); // All coeffs are present memset(h->non_zero_count[mb_xy], 16, 16); - + s->current_picture.mb_type[mb_xy]= mb_type; return 0; } - + fill_caches(h, mb_type, 0); //mb_pred @@ -4823,7 +4823,7 @@ decode_intra_mb: }else{ mode= predicted_mode; } - + if(di==4) fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 ); else @@ -4844,7 +4844,7 @@ decode_intra_mb: return -1; }else if(partition_count==4){ int i, j, sub_partition_count[4], list, ref[2][4]; - + if(h->slice_type == B_TYPE){ for(i=0; i<4; i++){ h->sub_mb_type[i]= get_ue_golomb(&s->gb); @@ -4870,7 +4870,7 @@ decode_intra_mb: h->sub_mb_type[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].type; } } - + for(list=0; list<2; list++){ int ref_count= IS_REF0(mb_type) ? 1 : h->ref_count[list]; if(ref_count == 0) continue; @@ -4887,10 +4887,10 @@ decode_intra_mb: } } } - + if(dct8x8_allowed) dct8x8_allowed = get_dct8x8_allowed(h); - + for(list=0; list<2; list++){ const int ref_count= IS_REF0(mb_type) ? 1 : h->ref_count[list]; if(ref_count == 0) continue; @@ -4913,9 +4913,9 @@ decode_intra_mb: tprintf("final mv:%d %d\n", mx, my); if(IS_SUB_8X8(sub_mb_type)){ - mv_cache[ 0 ][0]= mv_cache[ 1 ][0]= + mv_cache[ 0 ][0]= mv_cache[ 1 ][0]= mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx; - mv_cache[ 0 ][1]= mv_cache[ 1 ][1]= + mv_cache[ 0 ][1]= mv_cache[ 1 ][1]= mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my; }else if(IS_SUB_8X4(sub_mb_type)){ mv_cache[ 0 ][0]= mv_cache[ 1 ][0]= mx; @@ -5017,17 +5017,17 @@ decode_intra_mb: } } } - + if(IS_INTER(mb_type)) write_back_motion(h, mb_type); - + if(!IS_INTRA16x16(mb_type)){ cbp= get_ue_golomb(&s->gb); if(cbp > 47){ av_log(h->s.avctx, AV_LOG_ERROR, "cbp too large (%d) at %d %d\n", cbp, s->mb_x, s->mb_y); return -1; } - + if(IS_INTRA4x4(mb_type)) cbp= golomb_to_intra4x4_cbp[cbp]; else @@ -5045,7 +5045,7 @@ decode_intra_mb: int chroma_qp, dquant; GetBitContext *gb= IS_INTRA(mb_type) ? h->intra_gb_ptr : h->inter_gb_ptr; const uint8_t *scan, *dc_scan; - + // fill_non_zero_count_cache(h); if(IS_INTERLACED(mb_type)){ @@ -5062,13 +5062,13 @@ decode_intra_mb: av_log(h->s.avctx, AV_LOG_ERROR, "dquant out of range (%d) at %d %d\n", dquant, s->mb_x, s->mb_y); return -1; } - + s->qscale += dquant; if(((unsigned)s->qscale) > 51){ if(s->qscale<0) s->qscale+= 52; else s->qscale-= 52; } - + h->chroma_qp= chroma_qp= get_chroma_qp(h->pps.chroma_qp_index_offset, s->qscale); if(IS_INTRA16x16(mb_type)){ if( decode_residual(h, h->intra_gb_ptr, h->mb, LUMA_DC_BLOCK_INDEX, dc_scan, h->dequant4_coeff[0][s->qscale], 16) < 0){ @@ -5105,7 +5105,7 @@ decode_intra_mb: }else{ for(i4x4=0; i4x4<4; i4x4++){ const int index= i4x4 + 4*i8x8; - + if( decode_residual(h, gb, h->mb + 16*index, index, scan, h->dequant4_coeff[IS_INTRA( mb_type ) ? 0:3][s->qscale], 16) <0 ){ return -1; } @@ -5117,7 +5117,7 @@ decode_intra_mb: } } } - + if(cbp&0x30){ for(chroma_idx=0; chroma_idx<2; chroma_idx++) if( decode_residual(h, gb, h->mb + 256 + 16*4*chroma_idx, CHROMA_DC_BLOCK_INDEX, chroma_dc_scan, NULL, 4) < 0){ @@ -5159,7 +5159,7 @@ static int decode_cabac_field_decoding_flag(H264Context *h) { const int mbb_xy = mb_x + (mb_y-2)*s->mb_stride; unsigned int ctx = 0; - + if( h->slice_table[mba_xy] == h->slice_num && IS_INTERLACED( s->current_picture.mb_type[mba_xy] ) ) { ctx += 1; } @@ -5173,7 +5173,7 @@ static int decode_cabac_field_decoding_flag(H264Context *h) { static int decode_cabac_intra_mb_type(H264Context *h, int ctx_base, int intra_slice) { uint8_t *state= &h->cabac_state[ctx_base]; int mb_type; - + if(intra_slice){ MpegEncContext * const s = &h->s; const int mba_xy = h->left_mb_xy[0]; @@ -5675,7 +5675,7 @@ static int inline decode_cabac_residual( H264Context *h, DCTELEM *block, int cat if( get_cabac_bypass( &h->cabac ) ) block[j] = (-qmul[j] + 32) >> 6; else block[j] = ( qmul[j] + 32) >> 6; } - + abslevel1++; } else { int coeff_abs = 2; @@ -5690,7 +5690,7 @@ static int inline decode_cabac_residual( H264Context *h, DCTELEM *block, int cat coeff_abs += 1 << j; j++; } - + while( j-- ) { if( get_cabac_bypass( &h->cabac ) ) coeff_abs += 1 << j ; @@ -5704,7 +5704,7 @@ static int inline decode_cabac_residual( H264Context *h, DCTELEM *block, int cat if( get_cabac_bypass( &h->cabac ) ) block[j] = (-coeff_abs * qmul[j] + 32) >> 6; else block[j] = ( coeff_abs * qmul[j] + 32) >> 6; } - + abslevelgt1++; } } @@ -5809,7 +5809,7 @@ decode_intra_mb: if(IS_INTRA_PCM(mb_type)) { const uint8_t *ptr; unsigned int x, y; - + // We assume these blocks are very rare so we dont optimize it. // FIXME The two following lines get the bitstream position in the cabac // decode, I think it should be done by a function in cabac.h (or cabac.c). @@ -6283,7 +6283,7 @@ static void filter_mb_mbaff_edgev( H264Context *h, uint8_t *pix, int stride, int int index_a; int alpha; int beta; - + int qp_index; int bS_index = (i >> 1); if (h->mb_field_decoding_flag) { @@ -6895,7 +6895,7 @@ static int decode_slice(H264Context *h){ for(;s->mb_y < s->mb_height; s->mb_y++){ for(;s->mb_x < s->mb_width; s->mb_x++){ int ret= decode_mb(h); - + hl_decode_mb(h); if(ret<0){ @@ -6904,7 +6904,7 @@ static int decode_slice(H264Context *h){ return -1; } - + if(++s->mb_x >= s->mb_width){ s->mb_x=0; if(++s->mb_y >= s->mb_height){ @@ -6919,7 +6919,7 @@ static int decode_slice(H264Context *h){ } } } - + if(get_bits_count(s->?gb) >= s->gb?.size_in_bits){ if(get_bits_count(s->gb) == s->gb.size_in_bits){ ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, (AC_END|DC_END|MV_END)&part_mask); @@ -6943,44 +6943,44 @@ static int decode_unregistered_user_data(H264Context *h, int size){ MpegEncContext * const s = &h->s; uint8_t user_data[16+256]; int e, build, i; - + if(size<16) return -1; - + for(i=0; i<sizeof(user_data)-1 && i<size; i++){ user_data[i]= get_bits(&s->gb, 8); } - + user_data[i]= 0; e= sscanf(user_data+16, "x264 - core %d"/*%s - H.264/MPEG-4 AVC codec - Copyleft 2005 - http://www.videolan.org/x264.html*/, &build); if(e==1 && build>=0) h->x264_build= build; - + if(s->avctx->debug & FF_DEBUG_BUGS) av_log(s->avctx, AV_LOG_DEBUG, "user data:\"%s\"\n", user_data+16); for(; i<size; i++) skip_bits(&s->gb, 8); - + return 0; } static int decode_sei(H264Context *h){ MpegEncContext * const s = &h->s; - + while(get_bits_count(&s->gb) + 16 < s->gb.size_in_bits){ int size, type; - + type=0; do{ type+= show_bits(&s->gb, 8); }while(get_bits(&s->gb, 8) == 255); - + size=0; do{ size+= show_bits(&s->gb, 8); }while(get_bits(&s->gb, 8) == 255); - + switch(type){ case 5: if(decode_unregistered_user_data(h, size) < 0); @@ -6989,7 +6989,7 @@ static int decode_sei(H264Context *h){ default: skip_bits(&s->gb, 8*size); } - + //FIXME check bits here align_get_bits(&s->gb); } @@ -7020,7 +7020,7 @@ static inline int decode_vui_parameters(H264Context *h, SPS *sps){ int nal_hrd_parameters_present_flag, vcl_hrd_parameters_present_flag; aspect_ratio_info_present_flag= get_bits1(&s->gb); - + if( aspect_ratio_info_present_flag ) { aspect_ratio_idc= get_bits(&s->gb, 8); if( aspect_ratio_idc == EXTENDED_SAR ) { @@ -7033,7 +7033,7 @@ static inline int decode_vui_parameters(H264Context *h, SPS *sps){ return -1; } }else{ - sps->sar.num= + sps->sar.num= sps->sar.den= 0; } // s->avctx->aspect_ratio= sar_width*s->width / (float)(s->height*sar_height); @@ -7093,13 +7093,13 @@ static void decode_scaling_list(H264Context *h, uint8_t *factors, int size, cons int i, last = 8, next = 8; const uint8_t *scan = size == 16 ? zigzag_scan : zigzag_scan8x8; if(!get_bits1(&s->gb)) /* matrix not written, we use the default one */ - memcpy(factors, default_list, size*sizeof(uint8_t)); + memcpy(factors, default_list, size*sizeof(uint8_t)); else for(i=0;i<size;i++){ if(next) next = (last + get_se_golomb(&s->gb)) & 0xff; if(!i && !next){ /* matrix not written, we use the default one */ - memcpy(factors, default_list, size*sizeof(uint8_t)); + memcpy(factors, default_list, size*sizeof(uint8_t)); break; } last = factors[scan[i]] = next ? next : last; @@ -7139,7 +7139,7 @@ static inline int decode_seq_parameter_set(H264Context *h){ int profile_idc, level_idc; int sps_id, i; SPS *sps; - + profile_idc= get_bits(&s->gb, 8); get_bits1(&s->gb); //constraint_set0_flag get_bits1(&s->gb); //constraint_set1_flag @@ -7148,7 +7148,7 @@ static inline int decode_seq_parameter_set(H264Context *h){ get_bits(&s->gb, 4); // reserved level_idc= get_bits(&s->gb, 8); sps_id= get_ue_golomb(&s->gb); - + sps= &h->sps_buffer[ sps_id ]; sps->profile_idc= profile_idc; sps->level_idc= level_idc; @@ -7165,7 +7165,7 @@ static inline int decode_seq_parameter_set(H264Context *h){ sps->log2_max_frame_num= get_ue_golomb(&s->gb) + 4; sps->poc_type= get_ue_golomb(&s->gb); - + if(sps->poc_type == 0){ //FIXME #define sps->log2_max_poc_lsb= get_ue_golomb(&s->gb) + 4; } else if(sps->poc_type == 1){//FIXME #define @@ -7173,7 +7173,7 @@ static inline int decode_seq_parameter_set(H264Context *h){ sps->offset_for_non_ref_pic= get_se_golomb(&s->gb); sps->offset_for_top_to_bottom_field= get_se_golomb(&s->gb); sps->poc_cycle_length= get_ue_golomb(&s->gb); - + for(i=0; i<sps->poc_cycle_length; i++) sps->offset_for_ref_frame[i]= get_se_golomb(&s->gb); } @@ -7189,7 +7189,7 @@ static inline int decode_seq_parameter_set(H264Context *h){ sps->gaps_in_frame_num_allowed_flag= get_bits1(&s->gb); sps->mb_width= get_ue_golomb(&s->gb) + 1; sps->mb_height= get_ue_golomb(&s->gb) + 1; - if((unsigned)sps->mb_width >= INT_MAX/16 || (unsigned)sps->mb_height >= INT_MAX/16 || + if((unsigned)sps->mb_width >= INT_MAX/16 || (unsigned)sps->mb_height >= INT_MAX/16 || avcodec_check_dimensions(NULL, 16*sps->mb_width, 16*sps->mb_height)) return -1; @@ -7211,26 +7211,26 @@ static inline int decode_seq_parameter_set(H264Context *h){ av_log(h->s.avctx, AV_LOG_ERROR, "insane cropping not completely supported, this could look slightly wrong ...\n"); } }else{ - sps->crop_left = - sps->crop_right = - sps->crop_top = + sps->crop_left = + sps->crop_right = + sps->crop_top = sps->crop_bottom= 0; } sps->vui_parameters_present_flag= get_bits1(&s->gb); if( sps->vui_parameters_present_flag ) decode_vui_parameters(h, sps); - + if(s->avctx->debug&FF_DEBUG_PICT_INFO){ - av_log(h->s.avctx, AV_LOG_DEBUG, "sps:%d profile:%d/%d poc:%d ref:%d %dx%d %s %s crop:%d/%d/%d/%d %s\n", + av_log(h->s.avctx, AV_LOG_DEBUG, "sps:%d profile:%d/%d poc:%d ref:%d %dx%d %s %s crop:%d/%d/%d/%d %s\n", sps_id, sps->profile_idc, sps->level_idc, sps->poc_type, sps->ref_frame_count, sps->mb_width, sps->mb_height, sps->frame_mbs_only_flag ? "FRM" : (sps->mb_aff ? "MB-AFF" : "PIC-AFF"), sps->direct_8x8_inference_flag ? "8B8" : "", - sps->crop_left, sps->crop_right, - sps->crop_top, sps->crop_bottom, + sps->crop_left, sps->crop_right, + sps->crop_top, sps->crop_bottom, sps->vui_parameters_present_flag ? "VUI" : "" ); } @@ -7241,7 +7241,7 @@ static inline int decode_picture_parameter_set(H264Context *h, int bit_length){ MpegEncContext * const s = &h->s; int pps_id= get_ue_golomb(&s->gb); PPS *pps= &h->pps_buffer[pps_id]; - + pps->sps_id= get_ue_golomb(&s->gb); pps->cabac= get_bits1(&s->gb); pps->pic_order_present= get_bits1(&s->gb); @@ -7289,7 +7289,7 @@ static inline int decode_picture_parameter_set(H264Context *h, int bit_length){ av_log(h->s.avctx, AV_LOG_ERROR, "reference overflow (pps)\n"); return -1; } - + pps->weighted_pred= get_bits1(&s->gb); pps->weighted_bipred_idc= get_bits(&s->gb, 2); pps->init_qp= get_se_golomb(&s->gb) + 26; @@ -7298,7 +7298,7 @@ static inline int decode_picture_parameter_set(H264Context *h, int bit_length){ pps->deblocking_filter_parameters_present= get_bits1(&s->gb); pps->constrained_intra_pred= get_bits1(&s->gb); pps->redundant_pic_cnt_present = get_bits1(&s->gb); - + memset(pps->scaling_matrix4, 16, 6*16*sizeof(uint8_t)); memset(pps->scaling_matrix8, 16, 2*64*sizeof(uint8_t)); @@ -7307,9 +7307,9 @@ static inline int decode_picture_parameter_set(H264Context *h, int bit_length){ decode_scaling_matrices(h, &h->sps_buffer[pps->sps_id], pps, 0, pps->scaling_matrix4, pps->scaling_matrix8); get_se_golomb(&s->gb); //second_chroma_qp_index_offset } - + if(s->avctx->debug&FF_DEBUG_PICT_INFO){ - av_log(h->s.avctx, AV_LOG_DEBUG, "pps:%d sps:%d %s slice_groups:%d ref:%d/%d %s qp:%d/%d/%d %s %s %s %s\n", + av_log(h->s.avctx, AV_LOG_DEBUG, "pps:%d sps:%d %s slice_groups:%d ref:%d/%d %s qp:%d/%d/%d %s %s %s %s\n", pps_id, pps->sps_id, pps->cabac ? "CABAC" : "CAVLC", pps->slice_group_count, @@ -7322,7 +7322,7 @@ static inline int decode_picture_parameter_set(H264Context *h, int bit_length){ pps->transform_8x8_mode ? "8x8DCT" : "" ); } - + return 0; } @@ -7349,7 +7349,7 @@ static int find_frame_end(H264Context *h, const uint8_t *buf, int buf_size){ // first_mb_in_slice is 0, probably the first nal of a new // slice tprintf("find_frame_end frame_end_found, state = %08x, pos = %d\n", state, i); - pc->state=-1; + pc->state=-1; pc->frame_start_found= 0; return i-4; } @@ -7358,28 +7358,28 @@ static int find_frame_end(H264Context *h, const uint8_t *buf, int buf_size){ } if((state&0xFFFFFF1F) == 0x107 || (state&0xFFFFFF1F) == 0x108 || (state&0xFFFFFF1F) == 0x109){ if(pc->frame_start_found){ - pc->state=-1; + pc->state=-1; pc->frame_start_found= 0; - return i-4; + return i-4; } } if (i<buf_size) state= (state<<8) | buf[i]; } - + pc->state= state; return END_NOT_FOUND; } static int h264_parse(AVCodecParserContext *s, AVCodecContext *avctx, - uint8_t **poutbuf, int *poutbuf_size, + uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size) { H264Context *h = s->priv_data; ParseContext *pc = &h->s.parse_context; int next; - + next= find_frame_end(h, buf, buf_size); if (ff_combine_frame(pc, next, (uint8_t **)&buf, &buf_size) < 0) { @@ -7436,7 +7436,7 @@ static int decode_nal_units(H264Context *h, uint8_t *buf, int buf_size){ int bit_length; uint8_t *ptr; int i, nalsize = 0; - + if(h->is_avc) { if(buf_index >= buf_size) break; nalsize = 0; @@ -7449,12 +7449,12 @@ static int decode_nal_units(H264Context *h, uint8_t *buf, int buf_size){ if(buf[buf_index] == 0 && buf[buf_index+1] == 0 && buf[buf_index+2] == 1) break; } - + if(buf_index+3 >= buf_size) break; - + buf_index+=3; - } - + } + ptr= decode_nal(h, buf + buf_index, &dst_length, &consumed, h->is_avc ? nalsize : buf_size - buf_index); if(ptr[dst_length - 1] == 0) dst_length--; bit_length= 8*dst_length - decode_rbsp_trailing(ptr + dst_length - 1); @@ -7462,7 +7462,7 @@ static int decode_nal_units(H264Context *h, uint8_t *buf, int buf_size){ if(s->avctx->debug&FF_DEBUG_STARTCODE){ av_log(h->s.avctx, AV_LOG_DEBUG, "NAL %d at %d/%d length %d\n", h->nal_unit_type, buf_index, buf_size, dst_length); } - + if (h->is_avc && (nalsize != consumed)) av_log(h->s.avctx, AV_LOG_ERROR, "AVC: Consumed only %d bytes instead of %d\n", consumed, nalsize); @@ -7471,7 +7471,7 @@ static int decode_nal_units(H264Context *h, uint8_t *buf, int buf_size){ if( (s->hurry_up == 1 && h->nal_ref_idc == 0) //FIXME dont discard SEI id ||(avctx->skip_frame >= AVDISCARD_NONREF && h->nal_ref_idc == 0)) continue; - + switch(h->nal_unit_type){ case NAL_IDR_SLICE: idr(h); //FIXME ensure we don't loose some frames if there is reordering @@ -7480,12 +7480,12 @@ static int decode_nal_units(H264Context *h, uint8_t *buf, int buf_size){ h->intra_gb_ptr= h->inter_gb_ptr= &s->gb; s->data_partitioning = 0; - + if(decode_slice_header(h) < 0){ 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_NONREF || h->nal_ref_idc) && (avctx->skip_frame < AVDISCARD_BIDIR || h->slice_type!=B_TYPE) && (avctx->skip_frame < AVDISCARD_NONKEY || h->slice_type==I_TYPE) @@ -7497,7 +7497,7 @@ static int decode_nal_units(H264Context *h, uint8_t *buf, int buf_size){ h->intra_gb_ptr= h->inter_gb_ptr= NULL; s->data_partitioning = 1; - + if(decode_slice_header(h) < 0){ av_log(h->s.avctx, AV_LOG_ERROR, "decode_slice_header error\n"); } @@ -7510,7 +7510,7 @@ static int decode_nal_units(H264Context *h, uint8_t *buf, int buf_size){ 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 + if(h->redundant_pic_count==0 && h->intra_gb_ptr && s->data_partitioning && s->hurry_up < 5 && (avctx->skip_frame < AVDISCARD_NONREF || h->nal_ref_idc) && (avctx->skip_frame < AVDISCARD_BIDIR || h->slice_type!=B_TYPE) @@ -7525,16 +7525,16 @@ static int decode_nal_units(H264Context *h, uint8_t *buf, int buf_size){ case NAL_SPS: init_get_bits(&s->gb, ptr, bit_length); decode_seq_parameter_set(h); - + if(s->flags& CODEC_FLAG_LOW_DELAY) s->low_delay=1; - + if(avctx->has_b_frames < 2) avctx->has_b_frames= !s->low_delay; break; case NAL_PPS: init_get_bits(&s->gb, ptr, bit_length); - + decode_picture_parameter_set(h, bit_length); break; @@ -7547,14 +7547,14 @@ static int decode_nal_units(H264Context *h, uint8_t *buf, int buf_size){ break; default: av_log(avctx, AV_LOG_ERROR, "Unknown NAL code: %d\n", h->nal_unit_type); - } + } } - + if(!s->current_picture_ptr) return buf_index; //no frame s->current_picture_ptr->pict_type= s->pict_type; s->current_picture_ptr->key_frame= s->pict_type == I_TYPE && h->nal_unit_type == NAL_IDR_SLICE; - + h->prev_frame_num_offset= h->frame_num_offset; h->prev_frame_num= h->frame_num; if(s->current_picture_ptr->reference){ @@ -7578,7 +7578,7 @@ static int get_consumed_bytes(MpegEncContext *s, int pos, int buf_size){ if(s->flags&CODEC_FLAG_TRUNCATED){ pos -= s->parse_context.last_index; if(pos<0) pos=0; // FIXME remove (unneeded?) - + return pos; }else{ if(pos==0) pos=1; //avoid infinite loops (i doubt thats needed but ...) @@ -7588,15 +7588,15 @@ static int get_consumed_bytes(MpegEncContext *s, int pos, int buf_size){ } } -static int decode_frame(AVCodecContext *avctx, +static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8_t *buf, int buf_size) { H264Context *h = avctx->priv_data; MpegEncContext *s = &h->s; - AVFrame *pict = data; + AVFrame *pict = data; int buf_index; - + s->flags= avctx->flags; s->flags2= avctx->flags2; @@ -7604,10 +7604,10 @@ static int decode_frame(AVCodecContext *avctx, if (buf_size == 0) { return 0; } - + if(s->flags&CODEC_FLAG_TRUNCATED){ int next= find_frame_end(h, buf, buf_size); - + if( ff_combine_frame(&s->parse_context, next, &buf, &buf_size) < 0 ) return buf_size; //printf("next:%d buf_size:%d last_index:%d\n", next, buf_size, s->parse_context.last_index); @@ -7637,7 +7637,7 @@ static int decode_frame(AVCodecContext *avctx, return -1; } p += nalsize; - } + } // Decode pps from avcC cnt = *(p++); // Number of pps for (i = 0; i < cnt; i++) { @@ -7647,7 +7647,7 @@ static int decode_frame(AVCodecContext *avctx, return -1; } p += nalsize; - } + } // Now store right nal length size, that will be use to parse all other nals h->nal_length_size = ((*(((char*)(avctx->extradata))+4))&0x03)+1; // Do not reparse avcC @@ -7655,16 +7655,16 @@ static int decode_frame(AVCodecContext *avctx, } if(!h->is_avc && s->avctx->extradata_size && s->picture_number==0){ - if(decode_nal_units(h, s->avctx->extradata, s->avctx->extradata_size) < 0) + if(decode_nal_units(h, s->avctx->extradata, s->avctx->extradata_size) < 0) return -1; } buf_index=decode_nal_units(h, buf, buf_size); - if(buf_index < 0) + if(buf_index < 0) return -1; - //FIXME do something with unavailable reference frames - + //FIXME do something with unavailable reference frames + // if(ret==FRAME_SKIPPED) return get_consumed_bytes(s, buf_index, buf_size); if(!s->current_picture_ptr){ av_log(h->s.avctx, AV_LOG_DEBUG, "error, NO frame\n"); @@ -7712,7 +7712,7 @@ static int decode_frame(AVCodecContext *avctx, if(prev && pics <= s->avctx->has_b_frames) out = prev; else if((out_of_order && pics-1 == s->avctx->has_b_frames && pics < 15) - || (s->low_delay && + || (s->low_delay && ((!cross_idr && prev && out->poc > prev->poc + 2) || cur->pict_type == B_TYPE))) { @@ -7786,7 +7786,7 @@ int main(){ // int int_temp[10000]; DSPContext dsp; AVCodecContext avctx; - + dsputil_init(&dsp, &avctx); init_put_bits(&pb, temp, SIZE); @@ -7797,13 +7797,13 @@ int main(){ STOP_TIMER("set_ue_golomb"); } flush_put_bits(&pb); - + init_get_bits(&gb, temp, 8*SIZE); for(i=0; i<COUNT; i++){ int j, s; - + s= show_bits(&gb, 24); - + START_TIMER j= get_ue_golomb(&gb); if(j != i){ @@ -7812,8 +7812,8 @@ int main(){ } STOP_TIMER("get_ue_golomb"); } - - + + init_put_bits(&pb, temp, SIZE); printf("testing signed exp golomb\n"); for(i=0; i<COUNT; i++){ @@ -7822,13 +7822,13 @@ int main(){ STOP_TIMER("set_se_golomb"); } flush_put_bits(&pb); - + init_get_bits(&gb, temp, 8*SIZE); for(i=0; i<COUNT; i++){ int j, s; - + s= show_bits(&gb, 24); - + START_TIMER j= get_se_golomb(&gb); if(j != i - COUNT/2){ @@ -7839,7 +7839,7 @@ int main(){ } printf("testing 4x4 (I)DCT\n"); - + DCTELEM block[16]; uint8_t src[16], ref[16]; uint64_t error= 0, max_error=0; @@ -7853,7 +7853,7 @@ int main(){ } h264_diff_dct_c(block, src, ref, 4); - + //normalize for(j=0; j<16; j++){ // printf("%d ", block[j]); @@ -7862,16 +7862,16 @@ int main(){ if(j&4) block[j]= (block[j]*4 + 2)/5; } // printf("\n"); - + s->dsp.h264_idct_add(ref, block, 4); /* for(j=0; j<16; j++){ printf("%d ", ref[j]); } printf("\n");*/ - + for(j=0; j<16; j++){ int diff= ABS(src[j] - ref[j]); - + error+= diff*diff; max_error= FFMAX(max_error, diff); } @@ -7882,16 +7882,16 @@ int main(){ for(qp=0; qp<52; qp++){ for(i=0; i<16; i++) src1_block[i]= src2_block[i]= random()%255; - + } #endif printf("Testing NAL layer\n"); - + uint8_t bitstream[COUNT]; uint8_t nal[COUNT*2]; H264Context h; memset(&h, 0, sizeof(H264Context)); - + for(i=0; i<COUNT; i++){ int zeros= i; int nal_length; @@ -7899,11 +7899,11 @@ int main(){ int out_length; uint8_t *out; int j; - + for(j=0; j<COUNT; j++){ bitstream[j]= (random() % 255) + 1; } - + for(j=0; j<zeros; j++){ int pos= random() % COUNT; while(bitstream[pos] == 0){ @@ -7912,38 +7912,38 @@ int main(){ } bitstream[pos]=0; } - + START_TIMER - + nal_length= encode_nal(&h, nal, bitstream, COUNT, COUNT*2); if(nal_length<0){ printf("encoding failed\n"); return -1; } - + out= decode_nal(&h, nal, &out_length, &consumed, nal_length); STOP_TIMER("NAL") - + if(out_length != COUNT){ printf("incorrect length %d %d\n", out_length, COUNT); return -1; } - + if(consumed != nal_length){ printf("incorrect consumed length %d %d\n", nal_length, consumed); return -1; } - + if(memcmp(bitstream, out, COUNT)){ printf("missmatch\n"); return -1; } } - + printf("Testing RBSP\n"); - - + + return 0; } #endif @@ -7953,13 +7953,13 @@ static int decode_end(AVCodecContext *avctx) { H264Context *h = avctx->priv_data; MpegEncContext *s = &h->s; - + av_freep(&h->rbsp_buffer); free_tables(h); //FIXME cleanup init stuff perhaps MPV_common_end(s); // memset(h, 0, sizeof(H264Context)); - + return 0; } |