From 1d0d55daf48a806561ebe3e9f61f62c3f7b93b9d Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Wed, 29 Jan 2003 12:00:11 +0000 Subject: [PATCH] --disable-risky support Originally committed as revision 1522 to svn://svn.ffmpeg.org/ffmpeg/trunk --- configure | 10 ++++ libavcodec/Makefile | 13 +++-- libavcodec/allcodecs.c | 12 +++-- libavcodec/h263.c | 38 -------------- libavcodec/mpegvideo.c | 108 ++++++++++++++++++++++++++++++++------- libavformat/Makefile | 7 ++- libavformat/allformats.c | 2 + 7 files changed, 125 insertions(+), 65 deletions(-) diff --git a/configure b/configure index 78048edd8b..51a9d1cb2e 100755 --- a/configure +++ b/configure @@ -82,6 +82,7 @@ LIBPREF="lib" LIBSUF=".a" SLIBPREF="lib" SLIBSUF=".so" +risky="yes" # OS specific targetos=`uname -s` @@ -298,6 +299,8 @@ for opt do ;; --disable-ffserver) ffserver="no" ;; + --disable-risky) risky="no" + ;; esac done @@ -587,6 +590,7 @@ echo " --enable-gprof enable profiling with gprof [$gprof]" echo " --disable-mpegaudio-hp faster (but less accurate)" echo " mpegaudio decoding [default=no]" echo " --disable-ffserver disable ffserver build" +echo " --disable-risky disables patent encumbered codecs" echo "" echo "NOTE: The object files are build at the place where configure is launched" exit 1 @@ -615,6 +619,7 @@ echo "vorbis enabled $vorbis" echo "a52 support $a52" echo "a52 dlopened $a52bin" echo "Video hooking $vhook" +echo "risky / patent encumbered codecs $risky" if test "$vhook" = "yes" ; then echo "Imlib2 support $imlib2" @@ -842,6 +847,11 @@ if test "$ffserver" = "yes" ; then echo "CONFIG_FFSERVER=yes" >> config.mak fi +if test "$risky" = "yes" ; then + echo "#define CONFIG_RISKY 1" >> $TMPH + echo "CONFIG_RISKY=yes" >> config.mak +fi + echo "#define restrict $_restrict" >> $TMPH # build tree in object directory if source path is different from current one diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 45429dfac3..368d967c91 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -11,14 +11,19 @@ CFLAGS= $(OPTFLAGS) -Wall -g -DHAVE_AV_CONFIG_H -I.. -D_FILE_OFFSET_BITS=64 -D_L LDFLAGS= -g OBJS= common.o utils.o mem.o allcodecs.o \ - mpegvideo.o h263.o jrevdct.o jfdctfst.o jfdctint.o\ + mpegvideo.o jrevdct.o jfdctfst.o jfdctint.o\ mpegaudio.o ac3enc.o mjpeg.o resample.o dsputil.o \ - motion_est.o imgconvert.o imgresample.o msmpeg4.o \ - mpeg12.o h263dec.o svq1.o rv10.o mpegaudiodec.o pcm.o simple_idct.o \ + motion_est.o imgconvert.o imgresample.o \ + mpeg12.o mpegaudiodec.o pcm.o simple_idct.o \ ratecontrol.o adpcm.o eval.o dv.o error_resilience.o \ - wmadec.o fft.o mdct.o mace.o huffyuv.o + fft.o mdct.o mace.o huffyuv.o ASM_OBJS= +# codecs which are patented in some non free countries like the us +ifeq ($(CONFIG_RISKY),yes) +OBJS+= h263.o msmpeg4.o h263dec.o svq1.o rv10.o wmadec.o +endif + # currently using liba52 for ac3 decoding ifeq ($(CONFIG_AC3),yes) OBJS+= a52dec.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index cc06645395..f6a060d8c7 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -44,22 +44,25 @@ void avcodec_register_all(void) register_avcodec(&oggvorbis_decoder); #endif register_avcodec(&mpeg1video_encoder); +#ifdef CONFIG_RISKY register_avcodec(&h263_encoder); register_avcodec(&h263p_encoder); register_avcodec(&rv10_encoder); - register_avcodec(&mjpeg_encoder); register_avcodec(&mpeg4_encoder); register_avcodec(&msmpeg4v1_encoder); register_avcodec(&msmpeg4v2_encoder); register_avcodec(&msmpeg4v3_encoder); register_avcodec(&wmv1_encoder); register_avcodec(&wmv2_encoder); +#endif + register_avcodec(&mjpeg_encoder); register_avcodec(&huffyuv_encoder); #endif /* CONFIG_ENCODERS */ register_avcodec(&rawvideo_codec); /* decoders */ #ifdef CONFIG_DECODERS +#ifdef CONFIG_RISKY register_avcodec(&h263_decoder); register_avcodec(&mpeg4_decoder); register_avcodec(&msmpeg4v1_decoder); @@ -67,18 +70,19 @@ void avcodec_register_all(void) register_avcodec(&msmpeg4v3_decoder); register_avcodec(&wmv1_decoder); register_avcodec(&wmv2_decoder); - register_avcodec(&mpeg_decoder); register_avcodec(&h263i_decoder); register_avcodec(&rv10_decoder); register_avcodec(&svq1_decoder); + register_avcodec(&wmav1_decoder); + register_avcodec(&wmav2_decoder); +#endif + register_avcodec(&mpeg_decoder); register_avcodec(&dvvideo_decoder); register_avcodec(&dvaudio_decoder); register_avcodec(&mjpeg_decoder); register_avcodec(&mjpegb_decoder); register_avcodec(&mp2_decoder); register_avcodec(&mp3_decoder); - register_avcodec(&wmav1_decoder); - register_avcodec(&wmav2_decoder); register_avcodec(&mace3_decoder); register_avcodec(&mace6_decoder); register_avcodec(&huffyuv_decoder); diff --git a/libavcodec/h263.c b/libavcodec/h263.c index cc0c85e3e5..63bf190597 100644 --- a/libavcodec/h263.c +++ b/libavcodec/h263.c @@ -2210,44 +2210,6 @@ static VLC dc_lum, dc_chrom; static VLC sprite_trajectory; static VLC mb_type_b_vlc; -void init_rl(RLTable *rl) -{ - INT8 max_level[MAX_RUN+1], max_run[MAX_LEVEL+1]; - UINT8 index_run[MAX_RUN+1]; - int last, run, level, start, end, i; - - /* compute max_level[], max_run[] and index_run[] */ - for(last=0;last<2;last++) { - if (last == 0) { - start = 0; - end = rl->last; - } else { - start = rl->last; - end = rl->n; - } - - memset(max_level, 0, MAX_RUN + 1); - memset(max_run, 0, MAX_LEVEL + 1); - memset(index_run, rl->n, MAX_RUN + 1); - for(i=start;itable_run[i]; - level = rl->table_level[i]; - if (index_run[run] == rl->n) - index_run[run] = i; - if (level > max_level[run]) - max_level[run] = level; - if (run > max_run[level]) - max_run[level] = run; - } - rl->max_level[last] = av_malloc(MAX_RUN + 1); - memcpy(rl->max_level[last], max_level, MAX_RUN + 1); - rl->max_run[last] = av_malloc(MAX_LEVEL + 1); - memcpy(rl->max_run[last], max_run, MAX_LEVEL + 1); - rl->index_run[last] = av_malloc(MAX_RUN + 1); - memcpy(rl->index_run[last], index_run, MAX_RUN + 1); - } -} - void init_vlc_rl(RLTable *rl) { int i, q; diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 4d47dd4e0d..d721647a57 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -625,6 +625,7 @@ int MPV_encode_init(AVCodecContext *avctx) avctx->delay=0; s->low_delay=1; break; +#ifdef CONFIG_RISKY case CODEC_ID_H263: if (h263_get_picture_format(s->width, s->height) == 7) { printf("Input picture size isn't suitable for h263 codec! try h263+\n"); @@ -704,6 +705,7 @@ int MPV_encode_init(AVCodecContext *avctx) avctx->delay=0; s->low_delay=1; break; +#endif default: return -1; } @@ -741,24 +743,29 @@ int MPV_encode_init(AVCodecContext *avctx) ff_init_me(s); #ifdef CONFIG_ENCODERS +#ifdef CONFIG_RISKY if (s->out_format == FMT_H263) h263_encode_init(s); - else if (s->out_format == FMT_MPEG1) - ff_mpeg1_encode_init(s); if(s->msmpeg4_version) ff_msmpeg4_encode_init(s); #endif + if (s->out_format == FMT_MPEG1) + ff_mpeg1_encode_init(s); +#endif /* init default q matrix */ for(i=0;i<64;i++) { int j= s->idct_permutation[i]; +#ifdef CONFIG_RISKY if(s->codec_id==CODEC_ID_MPEG4 && s->mpeg_quant){ s->intra_matrix[j] = ff_mpeg4_default_intra_matrix[i]; s->inter_matrix[j] = ff_mpeg4_default_non_intra_matrix[i]; }else if(s->out_format == FMT_H263){ s->intra_matrix[j] = s->inter_matrix[j] = ff_mpeg1_default_non_intra_matrix[i]; - }else{ /* mpeg1 */ + }else +#endif + { /* mpeg1 */ s->intra_matrix[j] = ff_mpeg1_default_intra_matrix[i]; s->inter_matrix[j] = ff_mpeg1_default_non_intra_matrix[i]; } @@ -803,6 +810,44 @@ int MPV_encode_end(AVCodecContext *avctx) return 0; } +void init_rl(RLTable *rl) +{ + INT8 max_level[MAX_RUN+1], max_run[MAX_LEVEL+1]; + UINT8 index_run[MAX_RUN+1]; + int last, run, level, start, end, i; + + /* compute max_level[], max_run[] and index_run[] */ + for(last=0;last<2;last++) { + if (last == 0) { + start = 0; + end = rl->last; + } else { + start = rl->last; + end = rl->n; + } + + memset(max_level, 0, MAX_RUN + 1); + memset(max_run, 0, MAX_LEVEL + 1); + memset(index_run, rl->n, MAX_RUN + 1); + for(i=start;itable_run[i]; + level = rl->table_level[i]; + if (index_run[run] == rl->n) + index_run[run] = i; + if (level > max_level[run]) + max_level[run] = level; + if (run > max_run[level]) + max_run[level] = run; + } + rl->max_level[last] = av_malloc(MAX_RUN + 1); + memcpy(rl->max_level[last], max_level, MAX_RUN + 1); + rl->max_run[last] = av_malloc(MAX_LEVEL + 1); + memcpy(rl->max_run[last], max_run, MAX_LEVEL + 1); + rl->index_run[last] = av_malloc(MAX_RUN + 1); + memcpy(rl->index_run[last], index_run, MAX_RUN + 1); + } +} + /* draw the edges of width 'w' of an image of size width, height */ //FIXME check that this is ok for mpeg4 interlaced static void draw_edges_c(UINT8 *buf, int wrap, int width, int height, int w) @@ -1699,6 +1744,7 @@ static inline void MPV_motion(MpegEncContext *s, switch(s->mv_type) { case MV_TYPE_16X16: +#ifdef CONFIG_RISKY if(s->mcsel){ if(s->real_sprite_warping_points==1){ gmc1_motion(s, dest_y, dest_cb, dest_cr, 0, @@ -1716,7 +1762,9 @@ static inline void MPV_motion(MpegEncContext *s, ff_mspel_motion(s, dest_y, dest_cb, dest_cr, ref_picture, pix_op, s->mv[dir][0][0], s->mv[dir][0][1], 16); - }else{ + }else +#endif + { mpeg_motion(s, dest_y, dest_cb, dest_cr, 0, ref_picture, 0, 0, pix_op, @@ -2102,9 +2150,12 @@ void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) add_dct(s, block[4], 4, dest_cb, s->uvlinesize); add_dct(s, block[5], 5, dest_cr, s->uvlinesize); } - } else{ + } +#ifdef CONFIG_RISKY + else{ ff_wmv2_add_mb(s, block, dest_y, dest_cb, dest_cr); } +#endif } else { /* dct only in intra block */ if(s->encoding || !(s->mpeg2 || s->codec_id==CODEC_ID_MPEG1VIDEO)){ @@ -2607,6 +2658,7 @@ static void encode_mb(MpegEncContext *s, int motion_x, int motion_y) switch(s->codec_id){ //FIXME funct ptr could be slightly faster case CODEC_ID_MPEG1VIDEO: mpeg1_encode_mb(s, s->block, motion_x, motion_y); break; +#ifdef CONFIG_RISKY case CODEC_ID_MPEG4: mpeg4_encode_mb(s, s->block, motion_x, motion_y); break; case CODEC_ID_MSMPEG4V2: @@ -2615,12 +2667,13 @@ static void encode_mb(MpegEncContext *s, int motion_x, int motion_y) msmpeg4_encode_mb(s, s->block, motion_x, motion_y); break; case CODEC_ID_WMV2: ff_wmv2_encode_mb(s, s->block, motion_x, motion_y); break; - case CODEC_ID_MJPEG: - mjpeg_encode_mb(s, s->block); break; case CODEC_ID_H263: case CODEC_ID_H263P: case CODEC_ID_RV10: h263_encode_mb(s, s->block, motion_x, motion_y); break; +#endif + case CODEC_ID_MJPEG: + mjpeg_encode_mb(s, s->block); break; default: assert(0); } @@ -2812,10 +2865,12 @@ static void encode_picture(MpegEncContext *s, int picture_number) s->current_picture.mb_var_sum = 0; s->current_picture.mc_mb_var_sum = 0; +#ifdef CONFIG_RISKY /* we need to initialize some time vars before we can encode b-frames */ if (s->h263_pred && !s->h263_msmpeg4) ff_set_mpeg4_time(s, s->picture_number); - +#endif + s->scene_change_score=0; s->qscale= (int)(s->frame_qscale + 0.5); //FIXME qscale / ... stuff for ME ratedistoration @@ -2924,6 +2979,7 @@ static void encode_picture(MpegEncContext *s, int picture_number) s->frame_qscale = ff_rate_estimate_qscale(s); if(s->adaptive_quant){ +#ifdef CONFIG_RISKY switch(s->codec_id){ case CODEC_ID_MPEG4: ff_clean_mpeg4_qscales(s); @@ -2933,6 +2989,7 @@ static void encode_picture(MpegEncContext *s, int picture_number) ff_clean_h263_qscales(s); break; } +#endif s->qscale= s->current_picture.qscale_table[0]; }else @@ -2962,6 +3019,7 @@ static void encode_picture(MpegEncContext *s, int picture_number) case FMT_MJPEG: mjpeg_picture_header(s); break; +#ifdef CONFIG_RISKY case FMT_H263: if (s->codec_id == CODEC_ID_WMV2) ff_wmv2_encode_picture_header(s, picture_number); @@ -2974,6 +3032,7 @@ static void encode_picture(MpegEncContext *s, int picture_number) else h263_encode_picture_header(s, picture_number); break; +#endif case FMT_MPEG1: mpeg1_encode_picture_header(s, picture_number); break; @@ -3001,11 +3060,13 @@ static void encode_picture(MpegEncContext *s, int picture_number) s->last_mv[0][0][0] = 0; s->last_mv[0][0][1] = 0; +#ifdef CONFIG_RISKY if (s->codec_id==CODEC_ID_H263 || s->codec_id==CODEC_ID_H263P) s->gob_index = ff_h263_get_gob_height(s); if(s->codec_id==CODEC_ID_MPEG4 && s->partitioned_frame) ff_mpeg4_init_partitions(s); +#endif s->resync_mb_x=0; s->resync_mb_y=0; @@ -3038,6 +3099,7 @@ static void encode_picture(MpegEncContext *s, int picture_number) s->block_index[5]++; /* write gob / video packet header */ +#ifdef CONFIG_RISKY if(s->rtp_mode){ int current_packet_size, is_gob_start; @@ -3078,6 +3140,7 @@ static void encode_picture(MpegEncContext *s, int picture_number) s->resync_mb_y=mb_y; } } +#endif if( (s->resync_mb_x == s->mb_x) && s->resync_mb_y+1 == s->mb_y){ @@ -3152,7 +3215,9 @@ static void encode_picture(MpegEncContext *s, int picture_number) s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT; s->mb_intra= 0; +#ifdef CONFIG_RISKY ff_mpeg4_set_direct_mv(s, mx, my); +#endif encode_mb_hq(s, &backup_s, &best_s, MB_TYPE_DIRECT, pb, pb2, tex_pb, &dmin, &next_block, mx, my); } @@ -3304,7 +3369,9 @@ static void encode_picture(MpegEncContext *s, int picture_number) s->mb_intra= 0; motion_x=s->b_direct_mv_table[xy][0]; motion_y=s->b_direct_mv_table[xy][1]; +#ifdef CONFIG_RISKY ff_mpeg4_set_direct_mv(s, motion_x, motion_y); +#endif break; case MB_TYPE_BIDIR: s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD; @@ -3382,6 +3449,7 @@ static void encode_picture(MpegEncContext *s, int picture_number) } emms_c(); +#ifdef CONFIG_RISKY if(s->codec_id==CODEC_ID_MPEG4 && s->partitioned_frame) ff_mpeg4_merge_partitions(s); @@ -3390,6 +3458,7 @@ static void encode_picture(MpegEncContext *s, int picture_number) if(s->codec_id==CODEC_ID_MPEG4) ff_mpeg4_stuffing(&s->pb); +#endif //if (s->gob_number) // fprintf(stderr,"\nNumber of GOB: %d", s->gob_number); @@ -3912,6 +3981,8 @@ AVCodec mpeg1video_encoder = { MPV_encode_end, }; +#ifdef CONFIG_RISKY + AVCodec h263_encoder = { "h263", CODEC_TYPE_VIDEO, @@ -3942,16 +4013,6 @@ AVCodec rv10_encoder = { MPV_encode_end, }; -AVCodec mjpeg_encoder = { - "mjpeg", - CODEC_TYPE_VIDEO, - CODEC_ID_MJPEG, - sizeof(MpegEncContext), - MPV_encode_init, - MPV_encode_picture, - MPV_encode_end, -}; - AVCodec mpeg4_encoder = { "mpeg4", CODEC_TYPE_VIDEO, @@ -4002,3 +4063,14 @@ AVCodec wmv1_encoder = { MPV_encode_end, }; +#endif + +AVCodec mjpeg_encoder = { + "mjpeg", + CODEC_TYPE_VIDEO, + CODEC_ID_MJPEG, + sizeof(MpegEncContext), + MPV_encode_init, + MPV_encode_picture, + MPV_encode_end, +}; diff --git a/libavformat/Makefile b/libavformat/Makefile index e3fcbd7179..a81845724f 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -11,9 +11,14 @@ CFLAGS= $(OPTFLAGS) -Wall -g -I.. -I$(SRC_PATH) -I$(SRC_PATH)/libavcodec -DHAVE_ OBJS= utils.o cutils.o allformats.o # mux and demuxes -OBJS+=mpeg.o mpegts.o ffm.o crc.o img.o raw.o rm.o asf.o \ +OBJS+=mpeg.o mpegts.o ffm.o crc.o img.o raw.o rm.o \ avienc.o avidec.o wav.o swf.o au.o gif.o mov.o jpeg.o dv.o \ yuv4mpeg.o + +ifeq ($(CONFIG_RISKY),yes) +OBJS+= asf.o +endif + # image formats OBJS+= pnm.o yuv.o # file I/O diff --git a/libavformat/allformats.c b/libavformat/allformats.c index 47bcb4f9c6..9a5e03a3bc 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -35,7 +35,9 @@ void av_register_all(void) img_init(); raw_init(); rm_init(); +#ifdef CONFIG_RISKY asf_init(); +#endif avienc_init(); avidec_init(); wav_init();