comparison h263.c @ 1799:95612d423fde libavcodec

multithreaded/SMP motion estimation multithreaded/SMP encoding for MPEG1/MPEG2/MPEG4/H263 all pthread specific code is in pthread.c to try it, run configure --enable-pthreads and ffmpeg ... -threads <num> the internal thread API is a simple AVCodecContext.execute() callback which executes a given function pointer with different arguments and returns after finishing all, that way no mutexes or other thread-mess is needed outside pthread.c
author michael
date Fri, 13 Feb 2004 17:54:10 +0000
parents 7186712b391e
children 7ae26b6e197f
comparison
equal deleted inserted replaced
1798:a3da4b429984 1799:95612d423fde
1959 s->inter_ac_vlc_length = uni_mpeg4_inter_rl_len; 1959 s->inter_ac_vlc_length = uni_mpeg4_inter_rl_len;
1960 s->inter_ac_vlc_last_length= uni_mpeg4_inter_rl_len + 128*64; 1960 s->inter_ac_vlc_last_length= uni_mpeg4_inter_rl_len + 128*64;
1961 s->luma_dc_vlc_length= uni_DCtab_lum_len; 1961 s->luma_dc_vlc_length= uni_DCtab_lum_len;
1962 s->chroma_dc_vlc_length= uni_DCtab_chrom_len; 1962 s->chroma_dc_vlc_length= uni_DCtab_chrom_len;
1963 s->ac_esc_length= 7+2+1+6+1+12+1; 1963 s->ac_esc_length= 7+2+1+6+1+12+1;
1964 1964 s->y_dc_scale_table= ff_mpeg4_y_dc_scale_table;
1965 s->c_dc_scale_table= ff_mpeg4_c_dc_scale_table;
1966
1965 if(s->flags & CODEC_FLAG_GLOBAL_HEADER){ 1967 if(s->flags & CODEC_FLAG_GLOBAL_HEADER){
1966 1968
1967 s->avctx->extradata= av_malloc(1024); 1969 s->avctx->extradata= av_malloc(1024);
1968 init_put_bits(&s->pb, s->avctx->extradata, 1024); 1970 init_put_bits(&s->pb, s->avctx->extradata, 1024);
1969 1971
2288 put_bits(&s->pb, 13, s->height); /* vol height */ 2290 put_bits(&s->pb, 13, s->height); /* vol height */
2289 put_bits(&s->pb, 1, 1); /* marker bit */ 2291 put_bits(&s->pb, 1, 1); /* marker bit */
2290 put_bits(&s->pb, 1, s->progressive_sequence ? 0 : 1); 2292 put_bits(&s->pb, 1, s->progressive_sequence ? 0 : 1);
2291 put_bits(&s->pb, 1, 1); /* obmc disable */ 2293 put_bits(&s->pb, 1, 1); /* obmc disable */
2292 if (vo_ver_id == 1) { 2294 if (vo_ver_id == 1) {
2293 put_bits(&s->pb, 1, s->vol_sprite_usage=0); /* sprite enable */ 2295 put_bits(&s->pb, 1, s->vol_sprite_usage); /* sprite enable */
2294 }else{ 2296 }else{
2295 put_bits(&s->pb, 2, s->vol_sprite_usage=0); /* sprite enable */ 2297 put_bits(&s->pb, 2, s->vol_sprite_usage); /* sprite enable */
2296 } 2298 }
2297 2299
2298 s->quant_precision=5;
2299 put_bits(&s->pb, 1, 0); /* not 8 bit == false */ 2300 put_bits(&s->pb, 1, 0); /* not 8 bit == false */
2300 put_bits(&s->pb, 1, s->mpeg_quant); /* quant type= (0=h263 style)*/ 2301 put_bits(&s->pb, 1, s->mpeg_quant); /* quant type= (0=h263 style)*/
2301 2302
2302 if(s->mpeg_quant){ 2303 if(s->mpeg_quant){
2303 ff_write_quant_matrix(&s->pb, s->avctx->intra_matrix); 2304 ff_write_quant_matrix(&s->pb, s->avctx->intra_matrix);
2382 if (s->pict_type != I_TYPE) 2383 if (s->pict_type != I_TYPE)
2383 put_bits(&s->pb, 3, s->f_code); /* fcode_for */ 2384 put_bits(&s->pb, 3, s->f_code); /* fcode_for */
2384 if (s->pict_type == B_TYPE) 2385 if (s->pict_type == B_TYPE)
2385 put_bits(&s->pb, 3, s->b_code); /* fcode_back */ 2386 put_bits(&s->pb, 3, s->b_code); /* fcode_back */
2386 // printf("****frame %d\n", picture_number); 2387 // printf("****frame %d\n", picture_number);
2387
2388 s->y_dc_scale_table= ff_mpeg4_y_dc_scale_table; //FIXME add short header support
2389 s->c_dc_scale_table= ff_mpeg4_c_dc_scale_table;
2390 } 2388 }
2391 2389
2392 #endif //CONFIG_ENCODERS 2390 #endif //CONFIG_ENCODERS
2393 2391
2394 /** 2392 /**
2963 2961
2964 #ifdef CONFIG_ENCODERS 2962 #ifdef CONFIG_ENCODERS
2965 2963
2966 void ff_mpeg4_init_partitions(MpegEncContext *s) 2964 void ff_mpeg4_init_partitions(MpegEncContext *s)
2967 { 2965 {
2968 init_put_bits(&s->tex_pb, s->tex_pb_buffer, PB_BUFFER_SIZE); 2966 uint8_t *start= pbBufPtr(&s->pb);
2969 init_put_bits(&s->pb2 , s->pb2_buffer , PB_BUFFER_SIZE); 2967 uint8_t *end= s->pb.buf_end;
2968 int size= end - start;
2969 int pb_size = size/3;
2970 int pb2_size= size/3;
2971 int tex_size= size - pb_size - pb2_size;
2972
2973 set_put_bits_buffer_size(&s->pb, pb_size);
2974 init_put_bits(&s->tex_pb, start + pb_size , tex_size);
2975 init_put_bits(&s->pb2 , start + pb_size + tex_size, pb2_size);
2970 } 2976 }
2971 2977
2972 void ff_mpeg4_merge_partitions(MpegEncContext *s) 2978 void ff_mpeg4_merge_partitions(MpegEncContext *s)
2973 { 2979 {
2974 const int pb2_len = put_bits_count(&s->pb2 ); 2980 const int pb2_len = put_bits_count(&s->pb2 );
2987 } 2993 }
2988 2994
2989 flush_put_bits(&s->pb2); 2995 flush_put_bits(&s->pb2);
2990 flush_put_bits(&s->tex_pb); 2996 flush_put_bits(&s->tex_pb);
2991 2997
2992 ff_copy_bits(&s->pb, s->pb2_buffer , pb2_len); 2998 set_put_bits_buffer_size(&s->pb, s->pb2.buf_end - s->pb.buf);
2993 ff_copy_bits(&s->pb, s->tex_pb_buffer, tex_pb_len); 2999 ff_copy_bits(&s->pb, s->pb2.buf , pb2_len);
3000 ff_copy_bits(&s->pb, s->tex_pb.buf, tex_pb_len);
2994 s->last_bits= put_bits_count(&s->pb); 3001 s->last_bits= put_bits_count(&s->pb);
2995 } 3002 }
2996 3003
2997 #endif //CONFIG_ENCODERS 3004 #endif //CONFIG_ENCODERS
2998 3005