Index: libavcodec/avcodec.h =================================================================== --- libavcodec/avcodec.h (revision 7221) +++ libavcodec/avcodec.h (working copy) @@ -47,6 +47,13 @@ #define AV_TIME_BASE 1000000 #define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE} +/* FIXME: We cannot use ffmpeg's XvMC capabilities, since that would require + * linking the ffmpeg plugin against XvMC libraries, which is a bad thing, + * since they are output dependend. + * The correct fix would be to reimplement the XvMC functions libavcodec uses + * and do the necessary talking with our XvMC output plugin there. */ +#undef HAVE_XVMC + enum CodecID { CODEC_ID_NONE, CODEC_ID_MPEG1VIDEO, @@ -2686,6 +2693,13 @@ extern unsigned int av_xiphlacing(unsigned char *s, unsigned int v); +/* unused static macro */ +#if defined(__GNUC__) && !defined(DEBUG) +/* since we do not compile the encoder part of ffmpeg, some static + * functions will be unused; this is ok, the compiler will take care */ +# define static static __attribute__((__unused__)) +#endif + #ifdef __cplusplus } #endif Index: libavcodec/dsputil.h =================================================================== --- libavcodec/dsputil.h (revision 7221) +++ libavcodec/dsputil.h (working copy) @@ -33,6 +33,9 @@ #include "common.h" #include "avcodec.h" +#if defined(ARCH_X86) || defined(ARCH_X86_64) +#define HAVE_MMX 1 +#endif //#define DEBUG /* dct code */ Index: libavcodec/motion_est.c =================================================================== --- libavcodec/motion_est.c (revision 7221) +++ libavcodec/motion_est.c (working copy) @@ -23,6 +23,9 @@ * new Motion Estimation (X1/EPZS) by Michael Niedermayer */ +/* motion estimation only needed for encoders */ +#ifdef CONFIG_ENCODERS + /** * @file motion_est.c * Motion estimation. @@ -2112,3 +2115,5 @@ } } } + +#endif /* CONFIG_ENCODERS */ Index: libavcodec/mpeg12.c =================================================================== --- libavcodec/mpeg12.c (revision 7221) +++ libavcodec/mpeg12.c (working copy) @@ -36,6 +36,13 @@ //#include +/* if xine's MPEG encoder is enabled, enable the encoding features in + * this particular module */ +#if defined(XINE_MPEG_ENCODER) && !defined(CONFIG_ENCODERS) +#define CONFIG_ENCODERS +#endif + + /* Start codes. */ #define SEQ_END_CODE 0x000001b7 #define SEQ_START_CODE 0x000001b3 Index: libavcodec/mpegvideo.c =================================================================== --- libavcodec/mpegvideo.c (revision 7221) +++ libavcodec/mpegvideo.c (working copy) @@ -40,6 +40,14 @@ //#undef NDEBUG //#include + +/* if xine's MPEG encoder is enabled, enable the encoding features in + * this particular module */ +#if defined(XINE_MPEG_ENCODER) && !defined(CONFIG_ENCODERS) +#define CONFIG_ENCODERS +#endif + + #ifdef CONFIG_ENCODERS static int encode_picture(MpegEncContext *s, int picture_number); #endif //CONFIG_ENCODERS @@ -1345,6 +1353,8 @@ ff_set_cmp(&s->dsp, s->dsp.ildct_cmp, s->avctx->ildct_cmp); ff_set_cmp(&s->dsp, s->dsp.frame_skip_cmp, s->avctx->frame_skip_cmp); +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 #ifdef CONFIG_H261_ENCODER if (s->out_format == FMT_H261) ff_h261_encode_init(s); @@ -1353,6 +1363,8 @@ h263_encode_init(s); if(s->msmpeg4_version) ff_msmpeg4_encode_init(s); +#endif /* #if 0 */ +/* xine: we DO want this for MPEG-1 encoding */ if (s->out_format == FMT_MPEG1) ff_mpeg1_encode_init(s); @@ -1397,9 +1409,12 @@ ff_rate_control_uninit(s); +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 MPV_common_end(s); if (s->out_format == FMT_MJPEG) mjpeg_close(s); +#endif /* #if 0 */ av_freep(&avctx->extradata); @@ -2545,8 +2560,11 @@ MPV_frame_end(s); +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 if (s->out_format == FMT_MJPEG) mjpeg_picture_trailer(s); +#endif /* #if 0 */ if(avctx->rc_buffer_size){ RateControlContext *rcc= &s->rc_context; @@ -4575,6 +4593,8 @@ case CODEC_ID_MPEG1VIDEO: case CODEC_ID_MPEG2VIDEO: mpeg1_encode_mb(s, s->block, motion_x, motion_y); break; +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 case CODEC_ID_MPEG4: mpeg4_encode_mb(s, s->block, motion_x, motion_y); break; case CODEC_ID_MSMPEG4V2: @@ -4595,6 +4615,7 @@ h263_encode_mb(s, s->block, motion_x, motion_y); break; case CODEC_ID_MJPEG: mjpeg_encode_mb(s, s->block); break; +#endif /* #if 0 */ default: assert(0); } @@ -4816,6 +4837,8 @@ +sse(s, s->new_picture.data[2] + s->mb_x*8 + s->mb_y*s->uvlinesize*8,s->dest[2], w>>1, h>>1, s->uvlinesize); } +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 static int pre_estimate_motion_thread(AVCodecContext *c, void *arg){ MpegEncContext *s= arg; @@ -4859,6 +4882,7 @@ } return 0; } +#endif /* #if 0 */ static int mb_var_thread(AVCodecContext *c, void *arg){ MpegEncContext *s= arg; @@ -4883,6 +4907,8 @@ } static void write_slice_end(MpegEncContext *s){ +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 if(s->codec_id==CODEC_ID_MPEG4){ if(s->partitioned_frame){ ff_mpeg4_merge_partitions(s); @@ -4892,6 +4918,7 @@ }else if(s->out_format == FMT_MJPEG){ ff_mjpeg_stuffing(&s->pb); } +#endif /* #if 0 */ align_put_bits(&s->pb); flush_put_bits(&s->pb); @@ -4945,10 +4972,13 @@ case CODEC_ID_FLV1: s->gob_index = ff_h263_get_gob_height(s); break; +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 case CODEC_ID_MPEG4: if(s->partitioned_frame) ff_mpeg4_init_partitions(s); break; +#endif /* #if 0 */ } s->resync_mb_x=0; @@ -5021,9 +5051,12 @@ if(s->start_mb_y != mb_y || mb_x!=0){ write_slice_end(s); +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 if(s->codec_id==CODEC_ID_MPEG4 && s->partitioned_frame){ ff_mpeg4_init_partitions(s); } +#endif /* #if 0 */ } assert((put_bits_count(&s->pb)&7) == 0); @@ -5047,19 +5080,25 @@ } switch(s->codec_id){ +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 case CODEC_ID_MPEG4: ff_mpeg4_encode_video_packet_header(s); ff_mpeg4_clean_buffers(s); break; +#endif /* #if 0 */ case CODEC_ID_MPEG1VIDEO: case CODEC_ID_MPEG2VIDEO: ff_mpeg1_encode_slice_header(s); ff_mpeg1_clean_buffers(s); break; +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 case CODEC_ID_H263: case CODEC_ID_H263P: h263_encode_gob_header(s, mb_y); break; +#endif /* #if 0 */ } if(s->flags&CODEC_FLAG_PASS1){ @@ -5172,7 +5211,10 @@ s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT; s->mb_intra= 0; +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 ff_mpeg4_set_direct_mv(s, mx, my); +#endif /* #if 0 */ encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_DIRECT, pb, pb2, tex_pb, &dmin, &next_block, mx, my); } @@ -5354,7 +5396,10 @@ s->mb_intra= 0; motion_x=s->b_direct_mv_table[xy][0]; motion_y=s->b_direct_mv_table[xy][1]; +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 ff_mpeg4_set_direct_mv(s, motion_x, motion_y); +#endif /* #if 0 */ break; case CANDIDATE_MB_TYPE_BIDIR: s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD; @@ -5462,8 +5507,11 @@ } //not beautiful here but we must write it before flushing so it has to be here +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 if (s->msmpeg4_version && s->msmpeg4_version<4 && s->pict_type == I_TYPE) msmpeg4_encode_ext_header(s); +#endif /* #if 0 */ write_slice_end(s); @@ -5531,6 +5579,8 @@ } if(s->adaptive_quant){ +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 switch(s->codec_id){ case CODEC_ID_MPEG4: ff_clean_mpeg4_qscales(s); @@ -5541,6 +5591,7 @@ ff_clean_h263_qscales(s); break; } +#endif /* #if 0 */ s->lambda= s->lambda_table[0]; //FIXME broken @@ -5562,10 +5613,13 @@ s->me.mb_var_sum_temp = s->me.mc_mb_var_sum_temp = 0; +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 /* we need to initialize some time vars before we can encode b-frames */ // RAL: Condition added for MPEG1VIDEO if (s->codec_id == CODEC_ID_MPEG1VIDEO || s->codec_id == CODEC_ID_MPEG2VIDEO || (s->h263_pred && !s->h263_msmpeg4)) ff_set_mpeg4_time(s, s->picture_number); //FIXME rename and use has_b_frames or similar +#endif /* #if 0 */ s->me.scene_change_score=0; @@ -5596,6 +5650,8 @@ ff_update_duplicate_context(s->thread_context[i], s); } +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 ff_init_me(s); /* Estimate motion for every MB */ @@ -5610,6 +5666,8 @@ s->avctx->execute(s->avctx, estimate_motion_thread, (void**)&(s->thread_context[0]), NULL, s->avctx->thread_count); }else /* if(s->pict_type == I_TYPE) */{ +#endif /* #if 0 */ + { /* I-Frame */ for(i=0; imb_stride*s->mb_height; i++) s->mb_type[i]= CANDIDATE_MB_TYPE_INTRA; @@ -5633,6 +5691,8 @@ //printf("Scene change detected, encoding as I Frame %d %d\n", s->current_picture.mb_var_sum, s->current_picture.mc_mb_var_sum); } +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 if(!s->umvplus){ if(s->pict_type==P_TYPE || s->pict_type==S_TYPE) { s->f_code= ff_get_best_fcode(s, s->p_mv_table, CANDIDATE_MB_TYPE_INTER); @@ -5686,6 +5746,7 @@ } } } +#endif /* #if 0 */ if (estimate_qp(s, 0) < 0) return -1; @@ -5717,6 +5778,8 @@ s->last_bits= put_bits_count(&s->pb); switch(s->out_format) { +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 case FMT_MJPEG: mjpeg_picture_header(s); break; @@ -5745,11 +5808,15 @@ else h263_encode_picture_header(s, picture_number); break; +#endif /* #if 0 */ case FMT_MPEG1: mpeg1_encode_picture_header(s, picture_number); break; +/* xine: do not need this for decode or MPEG-1 encoding modes */ +#if 0 case FMT_H264: break; +#endif /* #if 0 */ default: assert(0); } Index: libavcodec/snow.c =================================================================== --- libavcodec/snow.c (revision 7221) +++ libavcodec/snow.c (working copy) @@ -1977,6 +1977,7 @@ #define P_MV1 P[9] #define FLAG_QPEL 1 //must be 1 +#ifdef CONFIG_ENCODERS static int encode_q_branch(SnowContext *s, int level, int x, int y){ uint8_t p_buffer[1024]; uint8_t i_buffer[1024]; @@ -2205,6 +2206,7 @@ return score; } } +#endif static always_inline int same_block(BlockNode *a, BlockNode *b){ if((a->type&BLOCK_INTRA) && (b->type&BLOCK_INTRA)){ @@ -2319,6 +2321,7 @@ } } +#ifdef CONFIG_ENCODERS static void encode_blocks(SnowContext *s, int search){ int x, y; int w= s->b_width; @@ -2340,6 +2343,7 @@ } } } +#endif static void decode_blocks(SnowContext *s){ int x, y; @@ -3910,6 +3914,7 @@ } } +#ifdef CONFIG_ENCODERS static int encode_init(AVCodecContext *avctx) { SnowContext *s = avctx->priv_data; @@ -3997,6 +4002,7 @@ return 0; } +#endif static int frame_start(SnowContext *s){ AVFrame tmp; @@ -4035,6 +4041,7 @@ return 0; } +#ifdef CONFIG_ENCODERS static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){ SnowContext *s = avctx->priv_data; RangeCoder * const c= &s->c; @@ -4288,6 +4295,7 @@ return ff_rac_terminate(c); } +#endif static void common_end(SnowContext *s){ int plane_index, level, orientation, i; @@ -4319,6 +4327,7 @@ } } +#ifdef CONFIG_ENCODERS static int encode_end(AVCodecContext *avctx) { SnowContext *s = avctx->priv_data; @@ -4328,6 +4337,7 @@ return 0; } +#endif static int decode_init(AVCodecContext *avctx) { Index: libavutil/common.h =================================================================== --- libavutil/common.h (revision 7221) +++ libavutil/common.h (working copy) @@ -375,7 +375,7 @@ ); return (d << 32) | (a & 0xffffffff); } -#elif defined(ARCH_X86_32) +#elif defined(ARCH_X86) static inline long long read_time(void) { long long l; @@ -446,4 +446,23 @@ char *av_strdup(const char *s); void av_freep(void *ptr); +/* xine: inline causes trouble for debug compiling */ +#ifdef DISABLE_INLINE +# ifdef inline +# undef inline +# endif +# ifdef always_inline +# undef always_inline +# endif +# define inline +# define always_inline +#endif + +/* xine: define ASMALIGN here since it's cleaner that generating it in the configure */ +#if HAVE_ASMALIGN_POT +# define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\n\t" +#else +# define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\n\t" +#endif + #endif /* COMMON_H */ Index: libavutil/integer.c =================================================================== --- libavutil/integer.c (revision 7221) +++ libavutil/integer.c (working copy) @@ -126,8 +126,8 @@ AVInteger quot_temp; if(!quot) quot = "_temp; - assert((int16_t)a[AV_INTEGER_SIZE-1] >= 0 && (int16_t)b[AV_INTEGER_SIZE-1] >= 0); - assert(av_log2(b)>=0); + assert((int16_t)a.v[AV_INTEGER_SIZE-1] >= 0 && (int16_t)b.v[AV_INTEGER_SIZE-1] >= 0); + assert(av_log2_i(b)>=0); if(i > 0) b= av_shr_i(b, -i); Index: libavutil/internal.h =================================================================== --- libavutil/internal.h (revision 7221) +++ libavutil/internal.h (working copy) @@ -93,11 +93,15 @@ #include /* dprintf macros */ -#ifdef DEBUG -# define dprintf(fmt,...) av_log(NULL, AV_LOG_DEBUG, fmt, __VA_ARGS__) -#else -# define dprintf(fmt,...) -#endif +# ifdef DEBUG +# ifdef __GNUC__ +# define dprintf(fmt,args...) av_log(NULL, AV_LOG_DEBUG, fmt, ##args) +# else +# define dprintf(fmt,...) av_log(NULL, AV_LOG_DEBUG, fmt, __VA_ARGS__) +# endif +# else +# define dprintf(fmt,...) +# endif #define av_abort() do { av_log(NULL, AV_LOG_ERROR, "Abort at %s:%d\n", __FILE__, __LINE__); abort(); } while (0) Index: libavcodec/mlib/dsputil_mlib.c =================================================================== --- libavcodec/mlib/dsputil_mlib.c (revision 7221) +++ libavcodec/mlib/dsputil_mlib.c (working copy) @@ -22,6 +22,8 @@ #include "../dsputil.h" #include "../mpegvideo.h" +#include "../../../xine-utils/xineutils.h" + #include #include #include