Mercurial > libavcodec.hg
comparison mpeg12.c @ 498:0b4450c15067 libavcodec
dc scale simplification/optimization
author | michaelni |
---|---|
date | Tue, 18 Jun 2002 00:46:02 +0000 |
parents | 54b88078c361 |
children | 19a5e2a81e1a |
comparison
equal
deleted
inserted
replaced
497:5b33d11bd1fb | 498:0b4450c15067 |
---|---|
182 /* zero motion x & y */ | 182 /* zero motion x & y */ |
183 put_bits(&s->pb, 1, 1); | 183 put_bits(&s->pb, 1, 1); |
184 put_bits(&s->pb, 1, 1); | 184 put_bits(&s->pb, 1, 1); |
185 } | 185 } |
186 | 186 |
187 static void common_init(MpegEncContext *s) | |
188 { | |
189 s->y_dc_scale_table= | |
190 s->c_dc_scale_table= ff_mpeg1_dc_scale_table; | |
191 } | |
192 | |
187 void mpeg1_encode_picture_header(MpegEncContext *s, int picture_number) | 193 void mpeg1_encode_picture_header(MpegEncContext *s, int picture_number) |
188 { | 194 { |
189 static int done=0; | |
190 | |
191 if (!done) { | |
192 int i; | |
193 done = 1; | |
194 init_rl(&rl_mpeg1); | |
195 | |
196 for(i=0; i<64; i++) | |
197 { | |
198 mpeg1_max_level[0][i]= rl_mpeg1.max_level[0][i]; | |
199 mpeg1_index_run[0][i]= rl_mpeg1.index_run[0][i]; | |
200 } | |
201 | |
202 /* build unified dc encoding tables */ | |
203 for(i=-255; i<256; i++) | |
204 { | |
205 int adiff, index; | |
206 int bits, code; | |
207 int diff=i; | |
208 | |
209 adiff = ABS(diff); | |
210 if(diff<0) diff--; | |
211 index = vlc_dc_table[adiff]; | |
212 | |
213 bits= vlc_dc_lum_bits[index] + index; | |
214 code= (vlc_dc_lum_code[index]<<index) + (diff & ((1 << index) - 1)); | |
215 mpeg1_lum_dc_uni[i+255]= bits + (code<<8); | |
216 | |
217 bits= vlc_dc_chroma_bits[index] + index; | |
218 code= (vlc_dc_chroma_code[index]<<index) + (diff & ((1 << index) - 1)); | |
219 mpeg1_chr_dc_uni[i+255]= bits + (code<<8); | |
220 } | |
221 } | |
222 mpeg1_encode_sequence_header(s); | 195 mpeg1_encode_sequence_header(s); |
223 | 196 |
224 /* mpeg1 picture header */ | 197 /* mpeg1 picture header */ |
225 put_header(s, PICTURE_START_CODE); | 198 put_header(s, PICTURE_START_CODE); |
226 /* temporal reference */ | 199 /* temporal reference */ |
352 put_bits(&s->pb, bit_size, bits); | 325 put_bits(&s->pb, bit_size, bits); |
353 } | 326 } |
354 } | 327 } |
355 } | 328 } |
356 | 329 |
357 void mpeg1_encode_init(MpegEncContext *s) | 330 void ff_mpeg1_encode_init(MpegEncContext *s) |
358 { | 331 { |
359 static int done=0; | 332 static int done=0; |
333 | |
334 common_init(s); | |
335 | |
360 if(!done){ | 336 if(!done){ |
361 int f_code; | 337 int f_code; |
362 int mv; | 338 int mv; |
339 int i; | |
363 | 340 |
364 done=1; | 341 done=1; |
342 init_rl(&rl_mpeg1); | |
343 | |
344 for(i=0; i<64; i++) | |
345 { | |
346 mpeg1_max_level[0][i]= rl_mpeg1.max_level[0][i]; | |
347 mpeg1_index_run[0][i]= rl_mpeg1.index_run[0][i]; | |
348 } | |
349 | |
350 /* build unified dc encoding tables */ | |
351 for(i=-255; i<256; i++) | |
352 { | |
353 int adiff, index; | |
354 int bits, code; | |
355 int diff=i; | |
356 | |
357 adiff = ABS(diff); | |
358 if(diff<0) diff--; | |
359 index = vlc_dc_table[adiff]; | |
360 | |
361 bits= vlc_dc_lum_bits[index] + index; | |
362 code= (vlc_dc_lum_code[index]<<index) + (diff & ((1 << index) - 1)); | |
363 mpeg1_lum_dc_uni[i+255]= bits + (code<<8); | |
364 | |
365 bits= vlc_dc_chroma_bits[index] + index; | |
366 code= (vlc_dc_chroma_code[index]<<index) + (diff & ((1 << index) - 1)); | |
367 mpeg1_chr_dc_uni[i+255]= bits + (code<<8); | |
368 } | |
369 | |
365 for(f_code=1; f_code<=MAX_FCODE; f_code++){ | 370 for(f_code=1; f_code<=MAX_FCODE; f_code++){ |
366 for(mv=-MAX_MV; mv<=MAX_MV; mv++){ | 371 for(mv=-MAX_MV; mv<=MAX_MV; mv++){ |
367 int len; | 372 int len; |
368 | 373 |
369 if(mv==0) len= mbMotionVectorTable[0][1]; | 374 if(mv==0) len= mbMotionVectorTable[0][1]; |
401 s->min_qcoeff=-255; | 406 s->min_qcoeff=-255; |
402 s->max_qcoeff= 255; | 407 s->max_qcoeff= 255; |
403 s->intra_quant_bias= 3<<(QUANT_BIAS_SHIFT-3); //(a + x*3/8)/x | 408 s->intra_quant_bias= 3<<(QUANT_BIAS_SHIFT-3); //(a + x*3/8)/x |
404 s->inter_quant_bias= 0; | 409 s->inter_quant_bias= 0; |
405 } | 410 } |
406 | 411 |
407 static inline void encode_dc(MpegEncContext *s, int diff, int component) | 412 static inline void encode_dc(MpegEncContext *s, int diff, int component) |
408 { | 413 { |
409 if (component == 0) { | 414 if (component == 0) { |
410 put_bits( | 415 put_bits( |
411 &s->pb, | 416 &s->pb, |
1181 } Mpeg1Context; | 1186 } Mpeg1Context; |
1182 | 1187 |
1183 static int mpeg_decode_init(AVCodecContext *avctx) | 1188 static int mpeg_decode_init(AVCodecContext *avctx) |
1184 { | 1189 { |
1185 Mpeg1Context *s = avctx->priv_data; | 1190 Mpeg1Context *s = avctx->priv_data; |
1191 | |
1192 common_init(&s->mpeg_enc_ctx); | |
1186 | 1193 |
1187 s->header_state = 0xff; | 1194 s->header_state = 0xff; |
1188 s->mpeg_enc_ctx_allocated = 0; | 1195 s->mpeg_enc_ctx_allocated = 0; |
1189 s->buffer_size = PICTURE_BUFFER_SIZE; | 1196 s->buffer_size = PICTURE_BUFFER_SIZE; |
1190 s->start_code = -1; | 1197 s->start_code = -1; |