Mercurial > libavcodec.hg
comparison mpegvideo.c @ 191:883f184537e6 libavcodec
AC table reset (memset) optimization - patch by Michael Niedermayer <michaelni@gmx.at>
author | uid46427 |
---|---|
date | Thu, 10 Jan 2002 00:53:21 +0000 |
parents | 42552c1cf360 |
children | 27d1773552c9 |
comparison
equal
deleted
inserted
replaced
190:9e0e56869d05 | 191:883f184537e6 |
---|---|
178 | 178 |
179 /* cbp values */ | 179 /* cbp values */ |
180 s->coded_block = av_mallocz(y_size); | 180 s->coded_block = av_mallocz(y_size); |
181 if (!s->coded_block) | 181 if (!s->coded_block) |
182 goto fail; | 182 goto fail; |
183 | |
184 /* which mb is a intra block */ | |
185 s->mbintra_table = av_mallocz(y_size/4); | |
186 if (!s->mbintra_table) | |
187 goto fail; | |
188 memset(s->mbintra_table, 1, y_size/4); | |
183 } | 189 } |
184 /* default structure is frame */ | 190 /* default structure is frame */ |
185 s->picture_structure = PICT_FRAME; | 191 s->picture_structure = PICT_FRAME; |
186 | 192 |
187 /* init macroblock skip table */ | 193 /* init macroblock skip table */ |
200 free(s->dc_val[0]); | 206 free(s->dc_val[0]); |
201 if (s->ac_val[0]) | 207 if (s->ac_val[0]) |
202 free(s->ac_val[0]); | 208 free(s->ac_val[0]); |
203 if (s->coded_block) | 209 if (s->coded_block) |
204 free(s->coded_block); | 210 free(s->coded_block); |
211 if (s->mbintra_table) | |
212 free(s->mbintra_table); | |
205 if (s->mbskip_table) | 213 if (s->mbskip_table) |
206 free(s->mbskip_table); | 214 free(s->mbskip_table); |
207 for(i=0;i<3;i++) { | 215 for(i=0;i<3;i++) { |
208 if (s->last_picture_base[i]) | 216 if (s->last_picture_base[i]) |
209 free(s->last_picture_base[i]); | 217 free(s->last_picture_base[i]); |
224 free(s->motion_val); | 232 free(s->motion_val); |
225 if (s->h263_pred) { | 233 if (s->h263_pred) { |
226 free(s->dc_val[0]); | 234 free(s->dc_val[0]); |
227 free(s->ac_val[0]); | 235 free(s->ac_val[0]); |
228 free(s->coded_block); | 236 free(s->coded_block); |
237 free(s->mbintra_table); | |
229 } | 238 } |
230 if (s->mbskip_table) | 239 if (s->mbskip_table) |
231 free(s->mbskip_table); | 240 free(s->mbskip_table); |
232 for(i=0;i<3;i++) { | 241 for(i=0;i<3;i++) { |
233 free(s->last_picture_base[i]); | 242 free(s->last_picture_base[i]); |
695 #endif | 704 #endif |
696 | 705 |
697 /* update DC predictors for P macroblocks */ | 706 /* update DC predictors for P macroblocks */ |
698 if (!s->mb_intra) { | 707 if (!s->mb_intra) { |
699 if (s->h263_pred) { | 708 if (s->h263_pred) { |
709 if(s->mbintra_table[mb_x + mb_y*s->mb_width]) | |
710 { | |
700 int wrap, x, y, v; | 711 int wrap, x, y, v; |
712 s->mbintra_table[mb_x + mb_y*s->mb_width]=0; | |
713 | |
701 wrap = 2 * s->mb_width + 2; | 714 wrap = 2 * s->mb_width + 2; |
702 v = 1024; | 715 v = 1024; |
703 x = 2 * mb_x + 1; | 716 x = 2 * mb_x + 1; |
704 y = 2 * mb_y + 1; | 717 y = 2 * mb_y + 1; |
718 | |
705 s->dc_val[0][(x) + (y) * wrap] = v; | 719 s->dc_val[0][(x) + (y) * wrap] = v; |
706 s->dc_val[0][(x + 1) + (y) * wrap] = v; | 720 s->dc_val[0][(x + 1) + (y) * wrap] = v; |
707 s->dc_val[0][(x) + (y + 1) * wrap] = v; | 721 s->dc_val[0][(x) + (y + 1) * wrap] = v; |
708 s->dc_val[0][(x + 1) + (y + 1) * wrap] = v; | 722 s->dc_val[0][(x + 1) + (y + 1) * wrap] = v; |
709 /* ac pred */ | 723 /* ac pred */ |
724 s->dc_val[1][(x) + (y) * wrap] = v; | 738 s->dc_val[1][(x) + (y) * wrap] = v; |
725 s->dc_val[2][(x) + (y) * wrap] = v; | 739 s->dc_val[2][(x) + (y) * wrap] = v; |
726 /* ac pred */ | 740 /* ac pred */ |
727 memset(s->ac_val[1][(x) + (y) * wrap], 0, 16 * sizeof(INT16)); | 741 memset(s->ac_val[1][(x) + (y) * wrap], 0, 16 * sizeof(INT16)); |
728 memset(s->ac_val[2][(x) + (y) * wrap], 0, 16 * sizeof(INT16)); | 742 memset(s->ac_val[2][(x) + (y) * wrap], 0, 16 * sizeof(INT16)); |
743 } | |
729 } else { | 744 } else { |
730 s->last_dc[0] = 128 << s->intra_dc_precision; | 745 s->last_dc[0] = 128 << s->intra_dc_precision; |
731 s->last_dc[1] = 128 << s->intra_dc_precision; | 746 s->last_dc[1] = 128 << s->intra_dc_precision; |
732 s->last_dc[2] = 128 << s->intra_dc_precision; | 747 s->last_dc[2] = 128 << s->intra_dc_precision; |
733 } | 748 } |
734 } | 749 } |
735 | 750 else |
751 s->mbintra_table[mb_x + mb_y*s->mb_width]=1; | |
752 | |
736 /* update motion predictor */ | 753 /* update motion predictor */ |
737 if (s->out_format == FMT_H263) { | 754 if (s->out_format == FMT_H263) { |
738 int x, y, wrap; | 755 int x, y, wrap; |
739 | 756 |
740 x = 2 * mb_x + 1; | 757 x = 2 * mb_x + 1; |