Index: libavcodec/avcodec.h =================================================================== RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/avcodec.h,v retrieving revision 1.426 diff -u -r1.426 avcodec.h --- libavcodec/avcodec.h 20 Oct 2005 20:04:45 -0000 1.426 +++ libavcodec/avcodec.h 23 Oct 2005 12:33:01 -0000 @@ -31,6 +31,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, @@ -2418,6 +2425,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.c =================================================================== RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/dsputil.c,v retrieving revision 1.125 diff -u -r1.125 dsputil.c --- libavcodec/dsputil.c 14 Aug 2005 15:42:39 -0000 1.125 +++ libavcodec/dsputil.c 23 Oct 2005 12:33:20 -0000 @@ -371,6 +371,8 @@ assert(s>=0); return s>>2; +#else + return 0; #endif } Index: libavcodec/dsputil.h =================================================================== RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/dsputil.h,v retrieving revision 1.120 diff -u -r1.120 dsputil.h --- libavcodec/dsputil.h 19 Sep 2005 23:26:47 -0000 1.120 +++ libavcodec/dsputil.h 23 Oct 2005 12:33:24 -0000 @@ -31,6 +31,9 @@ #include "common.h" #include "avcodec.h" +#if defined(ARCH_X86) +#define HAVE_MMX 1 +#endif //#define DEBUG /* dct code */ Index: libavcodec/motion_est.c =================================================================== RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/motion_est.c,v retrieving revision 1.110 diff -u -r1.110 motion_est.c --- libavcodec/motion_est.c 26 Aug 2005 19:05:44 -0000 1.110 +++ libavcodec/motion_est.c 23 Oct 2005 12:33:36 -0000 @@ -20,6 +20,9 @@ * * new Motion Estimation (X1/EPZS) by Michael Niedermayer */ + +/* motion estimation only needed for encoders */ +#ifdef CONFIG_ENCODERS /** * @file motion_est.c @@ -2038,3 +2041,5 @@ } } } + +#endif /* CONFIG_ENCODERS */ Index: libavcodec/mpeg12.c =================================================================== RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/mpeg12.c,v retrieving revision 1.242 diff -u -r1.242 mpeg12.c --- libavcodec/mpeg12.c 14 Aug 2005 15:42:39 -0000 1.242 +++ libavcodec/mpeg12.c 23 Oct 2005 12:34:08 -0000 @@ -34,6 +34,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 @@ -2812,10 +2819,12 @@ s->chroma_intra_matrix[j] = v; } #ifdef DEBUG +/* dprintf("intra matrix present\n"); for(i=0;i<64;i++) dprintf(" %d", s->intra_matrix[s->dsp.idct_permutation[i]]); printf("\n"); +*/ #endif } else { for(i=0;i<64;i++) { @@ -2837,10 +2846,12 @@ s->chroma_inter_matrix[j] = v; } #ifdef DEBUG +/* dprintf("non intra matrix present\n"); for(i=0;i<64;i++) dprintf(" %d", s->inter_matrix[s->dsp.idct_permutation[i]]); printf("\n"); +*/ #endif } else { for(i=0;i<64;i++) { Index: libavcodec/mpegvideo.c =================================================================== RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/mpegvideo.c,v retrieving revision 1.488 diff -u -r1.488 mpegvideo.c --- libavcodec/mpegvideo.c 14 Aug 2005 15:42:40 -0000 1.488 +++ libavcodec/mpegvideo.c 23 Oct 2005 12:35:02 -0000 @@ -38,6 +38,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 void encode_picture(MpegEncContext *s, int picture_number); #endif //CONFIG_ENCODERS @@ -1108,6 +1116,8 @@ s->low_delay= 0; //s->max_b_frames ? 0 : 1; avctx->delay= s->low_delay ? 0 : (s->max_b_frames + 1); break; +/* xine: this is never used in either decode or MPEG-1 encode mode */ +#if 0 case CODEC_ID_MPEG2VIDEO: s->out_format = FMT_MPEG1; s->low_delay= 0; //s->max_b_frames ? 0 : 1; @@ -1242,6 +1252,7 @@ avctx->delay=0; s->low_delay=1; break; +#endif /* #if 0 */ default: return -1; } @@ -1263,6 +1274,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); @@ -1271,6 +1284,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); @@ -1319,9 +1334,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); @@ -2350,8 +2368,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(s->flags&CODEC_FLAG_PASS1) ff_write_pass1_stats(s); @@ -4297,6 +4318,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: @@ -4317,6 +4340,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); } @@ -4532,6 +4556,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; @@ -4575,6 +4601,7 @@ } return 0; } +#endif /* #if 0 */ static int mb_var_thread(AVCodecContext *c, void *arg){ MpegEncContext *s= arg; @@ -4599,6 +4626,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); @@ -4608,6 +4637,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); @@ -4661,10 +4691,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; @@ -4737,9 +4770,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); @@ -4763,19 +4799,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){ @@ -4888,7 +4930,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); } @@ -5074,7 +5119,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; @@ -5182,8 +5230,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); @@ -5246,10 +5297,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; @@ -5268,6 +5322,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 */ @@ -5282,6 +5338,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; @@ -5305,6 +5363,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); @@ -5358,11 +5418,14 @@ } } } +#endif /* #if 0 */ if (!s->fixed_qscale) s->current_picture.quality = ff_rate_estimate_qscale(s); //FIXME pic_ptr 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); @@ -5373,6 +5436,7 @@ ff_clean_h263_qscales(s); break; } +#endif /* #if 0 */ s->lambda= s->lambda_table[0]; //FIXME broken @@ -5408,6 +5472,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; @@ -5436,11 +5502,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 =================================================================== RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/snow.c,v retrieving revision 1.63 diff -u -r1.63 snow.c --- libavcodec/snow.c 21 Sep 2005 23:09:16 -0000 1.63 +++ libavcodec/snow.c 23 Oct 2005 12:35:34 -0000 @@ -2037,6 +2037,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]; @@ -2263,6 +2264,7 @@ return score; } } +#endif static void decode_q_branch(SnowContext *s, int level, int x, int y){ const int w= s->b_width << s->block_max_depth; @@ -2316,6 +2318,7 @@ } } +#ifdef CONFIG_ENCODERS static void encode_blocks(SnowContext *s){ int x, y; int w= s->b_width; @@ -2331,6 +2334,7 @@ } } } +#endif static void decode_blocks(SnowContext *s){ int x, y; @@ -3348,6 +3352,7 @@ } } +#ifdef CONFIG_ENCODERS static int encode_init(AVCodecContext *avctx) { SnowContext *s = avctx->priv_data; @@ -3409,6 +3414,7 @@ s->chroma_v_shift= 1; return 0; } +#endif static int frame_start(SnowContext *s){ AVFrame tmp; @@ -3434,6 +3440,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; @@ -3628,6 +3635,7 @@ return ff_rac_terminate(c); } +#endif static void common_end(SnowContext *s){ int plane_index, level, orientation; @@ -3651,6 +3659,7 @@ } } +#ifdef CONFIG_ENCODERS static int encode_end(AVCodecContext *avctx) { SnowContext *s = avctx->priv_data; @@ -3660,6 +3669,7 @@ return 0; } +#endif static int decode_init(AVCodecContext *avctx) { Index: libavcodec/utils.c =================================================================== RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/utils.c,v retrieving revision 1.160 diff -u -r1.160 utils.c --- libavcodec/utils.c 20 Sep 2005 21:43:45 -0000 1.160 +++ libavcodec/utils.c 23 Oct 2005 12:35:47 -0000 @@ -1241,11 +1241,11 @@ AVClass* avc= ptr ? *(AVClass**)ptr : NULL; if(level>av_log_level) return; -#undef fprintf +/* #undef fprintf */ if(print_prefix && avc) { fprintf(stderr, "[%s @ %p]", avc->item_name(ptr), avc); } -#define fprintf please_use_av_log +/* #define fprintf please_use_av_log */ print_prefix= strstr(fmt, "\n") != NULL; Index: libavcodec/i386/dsputil_mmx.c =================================================================== RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/i386/dsputil_mmx.c,v retrieving revision 1.104 diff -u -r1.104 dsputil_mmx.c --- libavcodec/i386/dsputil_mmx.c 9 Oct 2005 23:38:52 -0000 1.104 +++ libavcodec/i386/dsputil_mmx.c 23 Oct 2005 12:36:21 -0000 @@ -617,31 +617,32 @@ } static inline void transpose4x4(uint8_t *dst, uint8_t *src, int dst_stride, int src_stride){ + void *dst_reg = dst, *src_reg = src; + asm volatile( //FIXME could save 1 instruction if done as 8x4 ... - "movd %4, %%mm0 \n\t" - "movd %5, %%mm1 \n\t" - "movd %6, %%mm2 \n\t" - "movd %7, %%mm3 \n\t" + "movd (%1), %%mm0 \n\t" + "movd (%1,%5), %%mm1 \n\t" + "lea (%1, %5, 2), %1 \n\t" + "movd (%1), %%mm2 \n\t" + "movd (%1,%5), %%mm3 \n\t" "punpcklbw %%mm1, %%mm0 \n\t" "punpcklbw %%mm3, %%mm2 \n\t" "movq %%mm0, %%mm1 \n\t" "punpcklwd %%mm2, %%mm0 \n\t" "punpckhwd %%mm2, %%mm1 \n\t" - "movd %%mm0, %0 \n\t" + "movd %%mm0, (%0) \n\t" "punpckhdq %%mm0, %%mm0 \n\t" - "movd %%mm0, %1 \n\t" - "movd %%mm1, %2 \n\t" + "movd %%mm0, (%0,%4) \n\t" + "lea (%0, %4, 2), %0 \n\t" + "movd %%mm1, (%0) \n\t" "punpckhdq %%mm1, %%mm1 \n\t" - "movd %%mm1, %3 \n\t" - - : "=m" (*(uint32_t*)(dst + 0*dst_stride)), - "=m" (*(uint32_t*)(dst + 1*dst_stride)), - "=m" (*(uint32_t*)(dst + 2*dst_stride)), - "=m" (*(uint32_t*)(dst + 3*dst_stride)) - : "m" (*(uint32_t*)(src + 0*src_stride)), - "m" (*(uint32_t*)(src + 1*src_stride)), - "m" (*(uint32_t*)(src + 2*src_stride)), - "m" (*(uint32_t*)(src + 3*src_stride)) + "movd %%mm1, (%0,%4) \n\t" + : "=&r" (dst_reg), + "=&r" (src_reg) + : "0" (dst_reg), + "1" (src_reg), + "r" (dst_stride), + "r" (src_stride) ); } Index: libavcodec/mlib/dsputil_mlib.c =================================================================== RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/mlib/dsputil_mlib.c,v retrieving revision 1.15 diff -u -r1.15 dsputil_mlib.c --- libavcodec/mlib/dsputil_mlib.c 15 Mar 2004 01:21:01 -0000 1.15 +++ libavcodec/mlib/dsputil_mlib.c 23 Oct 2005 12:36:24 -0000 @@ -20,6 +20,8 @@ #include "../dsputil.h" #include "../mpegvideo.h" +#include "../../../xine-utils/xineutils.h" + #include #include #include @@ -419,6 +421,7 @@ void dsputil_init_mlib(DSPContext* c, AVCodecContext *avctx) { + if (xine_mm_accel() & MM_ACCEL_MLIB) { c->get_pixels = get_pixels_mlib; c->diff_pixels = diff_pixels_mlib; c->add_pixels_clamped = add_pixels_clamped_mlib; @@ -445,10 +448,12 @@ c->put_no_rnd_pixels_tab[1][0] = put_pixels8_mlib; c->bswap_buf = bswap_buf_mlib; + } } void MPV_common_init_mlib(MpegEncContext *s) { + if (xine_mm_accel() & MM_ACCEL_MLIB) { if(s->avctx->dct_algo==FF_DCT_AUTO || s->avctx->dct_algo==FF_DCT_MLIB){ s->dsp.fdct = ff_fdct_mlib; } @@ -459,4 +464,5 @@ s->dsp.idct = ff_idct_mlib; s->dsp.idct_permutation_type= FF_NO_IDCT_PERM; } + } } Index: libavutil/common.h =================================================================== RCS file: /cvsroot/ffmpeg/ffmpeg/libavutil/common.h,v retrieving revision 1.153 diff -u -r1.153 common.h --- libavutil/common.h 19 Sep 2005 23:26:47 -0000 1.153 +++ libavutil/common.h 23 Oct 2005 12:36:30 -0000 @@ -6,6 +6,12 @@ #ifndef COMMON_H #define COMMON_H +/* xine: disable DEBUG for ffmpeg (too noisy) */ +#ifdef DEBUG +#undef DEBUG +#define DISABLE_INLINE +#endif + #if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) # define CONFIG_WIN32 #endif @@ -185,8 +191,10 @@ #ifdef HAVE_AV_CONFIG_H +#if 0 #ifdef USE_FASTMEMCPY -#include "fastmemcpy.h" + #define memcpy(to, from, len) xine_fast_memcpy(to, from, len) +#endif #endif #include @@ -205,10 +213,12 @@ #ifdef HAVE_AV_CONFIG_H +#if 0 # ifdef USE_FASTMEMCPY -# include "fastmemcpy.h" +# define memcpy(to, from, len) xine_fast_memcpy(to, from, len) # endif # endif /* HAVE_AV_CONFIG_H */ +#endif #endif /* !CONFIG_WIN32 && !CONFIG_OS2 */ @@ -235,7 +245,9 @@ /* debug stuff */ # ifndef DEBUG +# ifndef NDEBUG # define NDEBUG +# endif # endif # include @@ -530,8 +542,8 @@ #define sprintf sprintf_is_forbidden_due_to_security_issues_use_snprintf #define strcat strcat_is_forbidden_due_to_security_issues_use_pstrcat #if !(defined(LIBAVFORMAT_BUILD) || defined(_FRAMEHOOK_H)) -#define printf please_use_av_log -#define fprintf please_use_av_log +//#define printf please_use_av_log +//#define fprintf please_use_av_log #endif #define CHECKED_ALLOCZ(p, size)\ @@ -574,4 +586,16 @@ #endif /* HAVE_AV_CONFIG_H */ +/* 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 + #endif /* COMMON_H */