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;