Mercurial > libavcodec.hg
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 |