[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[358] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2012-11-13 17:34:58
|
Revision: 358 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=358&view=rev Author: nickols_k Date: 2012-11-13 17:34:45 +0000 (Tue, 13 Nov 2012) Log Message: ----------- full preview of new technology which for native versions but not for Win32Loader Modified Paths: -------------- mplayerxp/libmpcodecs/ad.h mplayerxp/libmpcodecs/ad_a52.c mplayerxp/libmpcodecs/ad_acm.c mplayerxp/libmpcodecs/ad_dca.c mplayerxp/libmpcodecs/ad_dmo.c mplayerxp/libmpcodecs/ad_dshow.c mplayerxp/libmpcodecs/ad_dvdpcm.c mplayerxp/libmpcodecs/ad_faad.c mplayerxp/libmpcodecs/ad_ffmpeg.c mplayerxp/libmpcodecs/ad_hwac3.c mplayerxp/libmpcodecs/ad_internal.h mplayerxp/libmpcodecs/ad_libdv.c mplayerxp/libmpcodecs/ad_mp3.c mplayerxp/libmpcodecs/ad_null.c mplayerxp/libmpcodecs/ad_pcm.c mplayerxp/libmpcodecs/ad_qtaudio.c mplayerxp/libmpcodecs/ad_real.c mplayerxp/libmpcodecs/ad_twin.c mplayerxp/libmpcodecs/ad_vorbis.c mplayerxp/libmpcodecs/vd.h mplayerxp/libmpcodecs/vd_divx4.c mplayerxp/libmpcodecs/vd_dmo.c mplayerxp/libmpcodecs/vd_dshow.c mplayerxp/libmpcodecs/vd_ffmpeg.c mplayerxp/libmpcodecs/vd_huffyuv.c mplayerxp/libmpcodecs/vd_internal.h mplayerxp/libmpcodecs/vd_libdv.c mplayerxp/libmpcodecs/vd_libmpeg2.c mplayerxp/libmpcodecs/vd_mpegpes.c mplayerxp/libmpcodecs/vd_null.c mplayerxp/libmpcodecs/vd_nuv.c mplayerxp/libmpcodecs/vd_qtvideo.c mplayerxp/libmpcodecs/vd_raw.c mplayerxp/libmpcodecs/vd_real.c mplayerxp/libmpcodecs/vd_theora.c mplayerxp/libmpcodecs/vd_vfw.c mplayerxp/libmpcodecs/vd_xanim.c mplayerxp/libmpcodecs/vd_xvid.c mplayerxp/pvector/pvector_f32_x86.h Modified: mplayerxp/libmpcodecs/ad.h =================================================================== --- mplayerxp/libmpcodecs/ad.h 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad.h 2012-11-13 17:34:45 UTC (rev 358) @@ -6,6 +6,7 @@ #include "libmpconf/cfgparser.h" #include "xmpcore/xmp_enums.h" +#include "libao2/afmt.h" typedef struct ad_info_s { @@ -24,13 +25,7 @@ Audio_MaxOutSample =16, }; -// Outfmt flags: typedef enum { - AudioFlag_Flip =0x00000001, - AudioFlag_YUVHack =0x00000002 -}audio_flags_e; - -typedef enum { ACodecStatus_Working =3, ACodecStatus_Problems =2, ACodecStatus_Untested =1, @@ -39,11 +34,10 @@ typedef struct audio_probe_s { const char* driver; - uint32_t wtag; const char* codec_dll; + uint32_t wtag; acodec_status_e status; - uint16_t sample_fmt[Audio_MaxOutSample]; - audio_flags_e flags[Audio_MaxOutSample]; + unsigned sample_fmt[Audio_MaxOutSample]; }audio_probe_t; /* interface of video decoder drivers */ @@ -51,7 +45,7 @@ { const ad_info_t* info; const config_t* options;/**< Optional: MPlayerXP's option related */ - audio_probe_t (* __FASTCALL__ probe)(uint32_t wtag); + const audio_probe_t*(* __FASTCALL__ probe)(sh_audio_t *,uint32_t wtag); MPXP_Rc (* __FASTCALL__ preinit)(sh_audio_t *); MPXP_Rc (* __FASTCALL__ init)(sh_audio_t *sh); void (* __FASTCALL__ uninit)(sh_audio_t *sh); Modified: mplayerxp/libmpcodecs/ad_a52.c =================================================================== --- mplayerxp/libmpcodecs/ad_a52.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_a52.c 2012-11-13 17:34:45 UTC (rev 358) @@ -46,8 +46,24 @@ LIBAD_EXTERN(a52) -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t probes[] = { + { "liba52", "liba52", 0x2000, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "liba52", "liba52", 0x20736D, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "liba52", "liba52", FOURCC_TAG('a','c','-','3'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "liba52", "liba52", FOURCC_TAG('A','C','-','3'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "liba52", "liba52", FOURCC_TAG('d','n','e','t'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "liba52", "liba52", FOURCC_TAG('s','a','c','3'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} +}; +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(wtag==probes[i].wtag) + return &probes[i]; + return NULL; +} + int a52_fillbuff(sh_audio_t *sh_audio,float *pts){ int length=0; int flags=0; Modified: mplayerxp/libmpcodecs/ad_acm.c =================================================================== --- mplayerxp/libmpcodecs/ad_acm.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_acm.c 2012-11-13 17:34:45 UTC (rev 358) @@ -31,9 +31,8 @@ HACMSTREAM srcstream; // handle }priv_t; -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { return NULL; } - static int init_acm_audio_codec(sh_audio_t *sh_audio){ HRESULT ret; WAVEFORMATEX *in_fmt=sh_audio->wf; Modified: mplayerxp/libmpcodecs/ad_dca.c =================================================================== --- mplayerxp/libmpcodecs/ad_dca.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_dca.c 2012-11-13 17:34:45 UTC (rev 358) @@ -45,8 +45,27 @@ LIBAD_EXTERN(dca) -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t probes[] = { + { "libdca", "libdca", 0x86, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "libdca", "libdca", 0x2001, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "libdca", "libdca", FOURCC_TAG('d','t','s',' '), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "libdca", "libdca", FOURCC_TAG('D','T','S',' '), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "libdca", "libdca", FOURCC_TAG('d','t','s','b'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "libdca", "libdca", FOURCC_TAG('d','t','s','c'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "libdca", "libdca", FOURCC_TAG('d','t','s','e'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "libdca", "libdca", FOURCC_TAG('d','t','s','h'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "libdca", "libdca", FOURCC_TAG('d','t','s','l'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} +}; +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(wtag==probes[i].wtag) + return &probes[i]; + return NULL; +} + int dca_fillbuff(sh_audio_t *sh_audio,float *pts){ int length=0,flen=0; int flags=0; Modified: mplayerxp/libmpcodecs/ad_dmo.c =================================================================== --- mplayerxp/libmpcodecs/ad_dmo.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_dmo.c 2012-11-13 17:34:45 UTC (rev 358) @@ -32,7 +32,7 @@ DMO_AudioDecoder* ds_adec; }priv_t; -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { return NULL; } static MPXP_Rc init(sh_audio_t *sh) { Modified: mplayerxp/libmpcodecs/ad_dshow.c =================================================================== --- mplayerxp/libmpcodecs/ad_dshow.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_dshow.c 2012-11-13 17:34:45 UTC (rev 358) @@ -27,7 +27,7 @@ DS_AudioDecoder* ds_adec; }priv_t; -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { return NULL; } MPXP_Rc init(sh_audio_t *sh) { Modified: mplayerxp/libmpcodecs/ad_dvdpcm.c =================================================================== --- mplayerxp/libmpcodecs/ad_dvdpcm.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_dvdpcm.c 2012-11-13 17:34:45 UTC (rev 358) @@ -18,8 +18,19 @@ LIBAD_EXTERN(dvdpcm) -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t probes[] = { + { "dvdpcm", "dvdpcm", 0x10001, ACodecStatus_Working, {AFMT_S24_LE, AFMT_S16_LE} }, + { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} +}; +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(wtag==probes[i].wtag) + return &probes[i]; + return NULL; +} + MPXP_Rc init(sh_audio_t *sh) { /* DVD PCM Audio:*/ Modified: mplayerxp/libmpcodecs/ad_faad.c =================================================================== --- mplayerxp/libmpcodecs/ad_faad.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_faad.c 2012-11-13 17:34:45 UTC (rev 358) @@ -40,8 +40,31 @@ float pts; }priv_t; -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t probes[] = { + { "faad", "libfaad", 0xFF, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad", 0x4143, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad", 0x706D, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad", 0xA106, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad", 0xAAC0, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad", FOURCC_TAG('A','A','C',' '), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad", FOURCC_TAG('A','A','C','P'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad", FOURCC_TAG('M','P','4','A'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad", FOURCC_TAG('M','P','4','L'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad", FOURCC_TAG('M','P','4','A'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad", FOURCC_TAG('R','A','A','C'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad", FOURCC_TAG('R','A','A','P'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad", FOURCC_TAG('V','L','B',' '), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} +}; +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(wtag==probes[i].wtag) + return &probes[i]; + return NULL; +} + typedef any_t*NeAACDecHandle; typedef struct NeAACDecConfiguration { unsigned char defObjectType; Modified: mplayerxp/libmpcodecs/ad_ffmpeg.c =================================================================== --- mplayerxp/libmpcodecs/ad_ffmpeg.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_ffmpeg.c 2012-11-13 17:34:45 UTC (rev 358) @@ -21,13 +21,12 @@ typedef struct priv_s { AVCodecContext *lavc_ctx; + audio_probe_t* probe; }priv_t; -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } - -struct codecs_st* __FASTCALL__ find_ffmpeg_audio(sh_audio_t* sh) { +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { unsigned i; - struct codecs_st* acodec = NULL; + audio_probe_t* acodec = NULL; const char *what="AVCodecID"; priv_t* priv=sh->context; enum AVCodecID id = ff_codec_get_id(ff_codec_wav_tags,sh->wtag); @@ -36,7 +35,7 @@ MSG_ERR("Cannot find %s for for '0x%X' tag! Try force -ac option\n" ,what ,sh->wtag); - return 0; + return NULL; } if(!priv){ priv=mp_mallocz(sizeof(priv_t)); @@ -47,18 +46,33 @@ AVCodec *codec=avcodec_find_decoder(id); if(!codec) { what="AVCodec"; goto prn_err; } - acodec=mp_mallocz(sizeof(struct codecs_st)); - strcpy(acodec->dll_name,avcodec_get_name(id)); - strcpy(acodec->driver_name,"ffmpeg"); - strcpy(acodec->codec_name,acodec->dll_name); + acodec=mp_mallocz(sizeof(audio_probe_t)); + acodec->codec_dll=mp_strdup(avcodec_get_name(id)); + acodec->driver="ffmpeg"; + acodec->wtag=wtag; if(codec->sample_fmts) - for(i=0;i<CODECS_MAX_OUTFMT;i++) { + for(i=0;i<Audio_MaxOutSample;i++) { if(codec->sample_fmts[i]==-1) break; - acodec->outfmt[i]=ff_codec_get_tag(ff_codec_wav_tags,codec->sample_fmts[i]); + acodec->sample_fmt[i]=ff_codec_get_tag(ff_codec_wav_tags,codec->sample_fmts[i]); } + priv->probe=acodec; return acodec; } +struct codecs_st* __FASTCALL__ find_ffmpeg_audio(sh_audio_t* sh) { + unsigned i; + audio_probe_t* aprobe=probe(sh,sh->wtag); + struct codecs_st* acodec = NULL; + if(aprobe) { + acodec=mp_mallocz(sizeof(struct codecs_st)); + strcpy(acodec->dll_name,aprobe->codec_dll); + strcpy(acodec->driver_name,aprobe->driver); + strcpy(acodec->codec_name,acodec->dll_name); + memcpy(acodec->outfmt,aprobe->sample_fmt,sizeof(aprobe->sample_fmt)); + } + return acodec; +} + #ifndef FF_INPUT_BUFFER_PADDING_SIZE #define FF_INPUT_BUFFER_PADDING_SIZE 8 #endif Modified: mplayerxp/libmpcodecs/ad_hwac3.c =================================================================== --- mplayerxp/libmpcodecs/ad_hwac3.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_hwac3.c 2012-11-13 17:34:45 UTC (rev 358) @@ -11,6 +11,7 @@ #include "help_mp.h" #include "codecs_ld.h" #include "osdep/cpudetect.h" +#include "osdep/bswap.h" #include "libao2/afmt.h" @@ -159,8 +160,24 @@ static a52_state_t * (*a52_init_ptr) (uint32_t mm_accel); #define a52_init(a) (*a52_init_ptr)(a) -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t probes[] = { + { "hwac3", "hwac3", 0x2000, ACodecStatus_Working, {AFMT_AC3} }, + { "hwac3", "hwac3", 0x2001, ACodecStatus_Working, {AFMT_AC3} }, + { "hwac3", "hwac3", FOURCC_TAG('A','C','_','3'), ACodecStatus_Working, {AFMT_AC3} }, + { "hwac3", "hwac3", FOURCC_TAG('D','N','E','T'), ACodecStatus_Working, {AFMT_AC3} }, + { "hwac3", "hwac3", FOURCC_TAG('S','A','C','3'), ACodecStatus_Working, {AFMT_AC3} }, + { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} +}; +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(wtag==probes[i].wtag) + return &probes[i]; + return NULL; +} + + MPXP_Rc preinit(sh_audio_t *sh) { /* Dolby AC3 audio: */ Modified: mplayerxp/libmpcodecs/ad_internal.h =================================================================== --- mplayerxp/libmpcodecs/ad_internal.h 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_internal.h 2012-11-13 17:34:45 UTC (rev 358) @@ -12,7 +12,7 @@ #include "ad_msg.h" -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag); +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag); static MPXP_Rc __FASTCALL__ init(sh_audio_t *sh); static MPXP_Rc __FASTCALL__ preinit(sh_audio_t *sh); static void __FASTCALL__ uninit(sh_audio_t *sh); Modified: mplayerxp/libmpcodecs/ad_libdv.c =================================================================== --- mplayerxp/libmpcodecs/ad_libdv.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_libdv.c 2012-11-13 17:34:45 UTC (rev 358) @@ -16,6 +16,7 @@ #include "libmpdemux/demuxer.h" #include "libmpdemux/stheader.h" #include "libao2/afmt.h" +#include "osdep/bswap.h" #include "ad_internal.h" @@ -32,8 +33,19 @@ LIBAD_EXTERN(libdv) -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t probes[] = { + { "libdv", "libdv", FOURCC_TAG('R','A','D','V'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} +}; +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(wtag==probes[i].wtag) + return &probes[i]; + return NULL; +} + // defined in vd_libdv.c: dv_decoder_t* init_global_rawdv_decoder(void); Modified: mplayerxp/libmpcodecs/ad_mp3.c =================================================================== --- mplayerxp/libmpcodecs/ad_mp3.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_mp3.c 2012-11-13 17:34:45 UTC (rev 358) @@ -9,6 +9,7 @@ #include "osdep/mm_accel.h" #include "osdep/fastmemcpy.h" #include "osdep/mplib.h" +#include "osdep/bswap.h" #include "codecs_ld.h" #include "libao2/afmt.h" #include "libao2/audio_out.h" @@ -27,8 +28,26 @@ LIBAD_EXTERN(mp3) -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t probes[] = { + { "libmp3", "libmpg123", 0x50, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "libmp3", "libmpg123", 0x55, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "libmp3", "libmpg123", 0x55005354, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "libmp3", "libmpg123", 0x5000736D, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "libmp3", "libmpg123", 0x5500736D, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "libmp3", "libmpg123", FOURCC_TAG('.','M','P','3'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "libmp3", "libmpg123", FOURCC_TAG('L','A','M','E'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "libmp3", "libmpg123", FOURCC_TAG('M','P','3',' '), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} +}; +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(wtag==probes[i].wtag) + return &probes[i]; + return NULL; +} + /** Opaque structure for the libmpg123 decoder handle. */ struct mpg123_handle_struct; typedef struct mpg123_handle_struct mpg123_handle; Modified: mplayerxp/libmpcodecs/ad_null.c =================================================================== --- mplayerxp/libmpcodecs/ad_null.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_null.c 2012-11-13 17:34:45 UTC (rev 358) @@ -16,7 +16,7 @@ LIBAD_EXTERN(null) -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { return NULL; } MPXP_Rc init(sh_audio_t *sh) { Modified: mplayerxp/libmpcodecs/ad_pcm.c =================================================================== --- mplayerxp/libmpcodecs/ad_pcm.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_pcm.c 2012-11-13 17:34:45 UTC (rev 358) @@ -3,6 +3,7 @@ #include <unistd.h> #include "ad_internal.h" #include "libao2/afmt.h" +#include "osdep/bswap.h" static const ad_info_t info = { "Uncompressed PCM audio decoder", @@ -17,8 +18,34 @@ LIBAD_EXTERN(pcm) -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t probes[] = { + { "pcm", "pcm", 0x0, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", 0x1, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", 0x3, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", 0xFFFE,ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", FOURCC_TAG('F','L','3','2'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", FOURCC_TAG('2','3','L','F'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", FOURCC_TAG('N','O','N','E'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", FOURCC_TAG('I','N','2','4'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", FOURCC_TAG('4','2','N','I'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", FOURCC_TAG('I','N','3','2'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", FOURCC_TAG('2','3','N','I'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", FOURCC_TAG('L','P','C','M'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", FOURCC_TAG('R','A','W',' '), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", FOURCC_TAG('T','W','O','S'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "pcm", "pcm", FOURCC_TAG('S','O','W','T'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} +}; +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(wtag==probes[i].wtag) + return &probes[i]; + return NULL; +} + + MPXP_Rc init(sh_audio_t *sh_audio) { WAVEFORMATEX *h=sh_audio->wf; Modified: mplayerxp/libmpcodecs/ad_qtaudio.c =================================================================== --- mplayerxp/libmpcodecs/ad_qtaudio.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_qtaudio.c 2012-11-13 17:34:45 UTC (rev 358) @@ -31,7 +31,7 @@ LIBAD_EXTERN(qtaudio) -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { return NULL; } typedef struct OpaqueSoundConverter* SoundConverter; typedef unsigned long OSType; Modified: mplayerxp/libmpcodecs/ad_real.c =================================================================== --- mplayerxp/libmpcodecs/ad_real.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_real.c 2012-11-13 17:34:45 UTC (rev 358) @@ -12,6 +12,7 @@ #include "codecs_ld.h" #include "ad_msg.h" #include "osdep/mplib.h" +#include "osdep/bswap.h" #include "libao2/afmt.h" static const ad_info_t info = { "RealAudio decoder", @@ -26,8 +27,23 @@ LIBAD_EXTERN(real) -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t probes[] = { + { "realaudio", "14_4.so.6.0", FOURCC_TAG('1','4','_','4'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "realaudio", "28_8.so.6.0", FOURCC_TAG('2','8','_','8'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "realaudio", "cook.so.6.0", FOURCC_TAG('C','O','O','K'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "realaudio", "sipr.so.6.0", FOURCC_TAG('S','I','P','R'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { "realaudio", "atrc.so.6.0", FOURCC_TAG('A','T','R','C'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE, AFMT_S8} }, + { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} +}; +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(wtag==probes[i].wtag) + return &probes[i]; + return NULL; +} + static any_t*handle=NULL; any_t*__builtin_new(unsigned long size) { Modified: mplayerxp/libmpcodecs/ad_twin.c =================================================================== --- mplayerxp/libmpcodecs/ad_twin.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_twin.c 2012-11-13 17:34:45 UTC (rev 358) @@ -26,7 +26,7 @@ LIBAD_EXTERN(twin) -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { return NULL; } /************************/ /*** General settings ***/ Modified: mplayerxp/libmpcodecs/ad_vorbis.c =================================================================== --- mplayerxp/libmpcodecs/ad_vorbis.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/ad_vorbis.c 2012-11-13 17:34:45 UTC (rev 358) @@ -8,6 +8,7 @@ #include "libao2/afmt.h" #include "libao2/audio_out.h" #include "osdep/mplib.h" +#include "osdep/bswap.h" extern ao_data_t* ao_data; @@ -24,8 +25,20 @@ LIBAD_EXTERN(vorbis) -static audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } +static const audio_probe_t probes[] = { + { "vorbis", "vorbis", 0x566F, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "vorbis", "vorbis", FOURCC_TAG('V','R','B','S'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} +}; +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(wtag==probes[i].wtag) + return &probes[i]; + return NULL; +} + #include <math.h> #include <vorbis/codec.h> Modified: mplayerxp/libmpcodecs/vd.h =================================================================== --- mplayerxp/libmpcodecs/vd.h 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd.h 2012-11-13 17:34:45 UTC (rev 358) @@ -24,8 +24,8 @@ typedef struct video_probe_s { const char* driver; + const char* codec_dll; uint32_t fourcc; - const char* codec_dll; vcodec_status_e status; uint32_t pix_fmt[Video_MaxOutFmt]; video_flags_e flags[Video_MaxOutFmt]; @@ -44,7 +44,7 @@ { const vd_info_t* info; const config_t* options;/**< Optional: MPlayerXP's option related */ - video_probe_t* (*__FASTCALL__ probe)(uint32_t fourcc); + const video_probe_t*(*__FASTCALL__ probe)(sh_video_t *sh,uint32_t fourcc); MPXP_Rc (*__FASTCALL__ init)(sh_video_t *sh,any_t* libinput); void (*__FASTCALL__ uninit)(sh_video_t *sh); MPXP_Rc (* control)(sh_video_t *sh,int cmd,any_t* arg, ...); Modified: mplayerxp/libmpcodecs/vd_divx4.c =================================================================== --- mplayerxp/libmpcodecs/vd_divx4.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd_divx4.c 2012-11-13 17:34:45 UTC (rev 358) @@ -21,6 +21,7 @@ #include "codecs_ld.h" #include "libvo/video_out.h" #include "osdep/mplib.h" +#include "osdep/bswap.h" static const vd_info_t info = { "DivX4Linux lib (divx4/5 mode)", @@ -35,8 +36,25 @@ LIBVD_EXTERN(divx4) -static video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } +static const video_probe_t probes[] = { + { "divx", "libdivx.so",FOURCC_TAG('D','Y','U','V'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0')}, {0, 0} }, + { "divx", "libdivx.so",FOURCC_TAG('D','I','V','3'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0')}, {0, 0} }, + { "divx", "libdivx.so",FOURCC_TAG('D','I','V','4'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0')}, {0, 0} }, + { "divx", "libdivx.so",FOURCC_TAG('D','I','V','5'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0')}, {0, 0} }, + { "divx", "libdivx.so",FOURCC_TAG('D','I','V','6'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0')}, {0, 0} }, + { "divx", "libdivx.so",FOURCC_TAG('D','I','V','X'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0')}, {0, 0} }, + { "divx", "libdivx.so",FOURCC_TAG('D','X','5','0'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0')}, {0, 0} }, + { NULL, NULL, 0x0, VCodecStatus_NotWorking, {0x0}, { 0 }} +}; +static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(fourcc==probes[i].fourcc) + return &probes[i]; + return NULL; +} + #define DIVX4LINUX_BETA 0 #define DIVX4LINUX 1 #define DIVX5LINUX 2 Modified: mplayerxp/libmpcodecs/vd_dmo.c =================================================================== --- mplayerxp/libmpcodecs/vd_dmo.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd_dmo.c 2012-11-13 17:34:45 UTC (rev 358) @@ -27,7 +27,7 @@ LIBVD_EXTERN(dmo) -static video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } +static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc) { return NULL; } // to set/get/query special features/parameters static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ Modified: mplayerxp/libmpcodecs/vd_dshow.c =================================================================== --- mplayerxp/libmpcodecs/vd_dshow.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd_dshow.c 2012-11-13 17:34:45 UTC (rev 358) @@ -12,6 +12,7 @@ #include "loader/dshow/DS_VideoDecoder.h" #include "codecs_ld.h" +#include "osdep/bswap.h" static const vd_info_t info = { "Win32/DirectShow video codecs", @@ -26,7 +27,7 @@ LIBVD_EXTERN(dshow) -static video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } +static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc) { return NULL; } // to set/get/query special features/parameters static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ Modified: mplayerxp/libmpcodecs/vd_ffmpeg.c =================================================================== --- mplayerxp/libmpcodecs/vd_ffmpeg.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd_ffmpeg.c 2012-11-13 17:34:45 UTC (rev 358) @@ -98,6 +98,7 @@ int b_count; int vo_inited; int hello_printed; + video_probe_t* probe; }priv_t; static pp_context* ppContext=NULL; static void draw_slice(struct AVCodecContext *s, const AVFrame *src, int offset[4], int y, int type, int height); @@ -186,35 +187,49 @@ return MPXP_Unknown; } -static video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } - -static MPXP_Rc find_vdecoder(sh_video_t* sh) { +static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fcc) { unsigned i; unsigned char flag = CODECS_FLAG_NOFLIP; - enum AVCodecID id = ff_codec_get_id(ff_codec_bmp_tags,sh->fourcc); + video_probe_t* vprobe = NULL; + priv_t* priv=sh->context; + enum AVCodecID id = ff_codec_get_id(ff_codec_bmp_tags,fcc); if (id <= 0) { const char *fourcc; prn_err: - fourcc=&sh->fourcc; + fourcc=&fcc; MSG_ERR("Cannot find AVCodecID for for '%c%c%c%c' fourcc! Try force -vc option\n" ,fourcc[0],fourcc[1],fourcc[2],fourcc[3]); - return MPXP_False; + return NULL; } AVCodec *codec=avcodec_find_decoder(id); if(!codec) goto prn_err; - sh->codec=mp_mallocz(sizeof(struct codecs_st)); - strcpy(sh->codec->dll_name,"ffmpeg"); - strcpy(sh->codec->driver_name,"ffmpeg"); - strcpy(sh->codec->codec_name,avcodec_get_name(id)); + vprobe=mp_mallocz(sizeof(video_probe_t)); + vprobe->driver="ffmpeg"; + vprobe->codec_dll=mp_strdup(avcodec_get_name(id)); if(codec->pix_fmts) for(i=0;i<CODECS_MAX_OUTFMT;i++) { if(codec->pix_fmts[i]==-1) break; - sh->codec->outfmt[i]=avcodec_pix_fmt_to_codec_tag(codec->pix_fmts[i]); - sh->codec->outflags[i]=flag; + vprobe->pix_fmt[i]=avcodec_pix_fmt_to_codec_tag(codec->pix_fmts[i]); + vprobe->flags[i]=flag; } - return MPXP_Ok; + priv->probe=vprobe; + return vprobe; } +static MPXP_Rc find_vdecoder(sh_video_t* sh) { + unsigned i; + const video_probe_t* vprobe=probe(sh,sh->fourcc); + if(vprobe) { + sh->codec=mp_mallocz(sizeof(struct codecs_st)); + strcpy(sh->codec->dll_name,vprobe->codec_dll); + strcpy(sh->codec->driver_name,vprobe->driver); + strcpy(sh->codec->codec_name,sh->codec->dll_name); + memcpy(sh->codec->outfmt,vprobe->pix_fmt,sizeof(vprobe->pix_fmt)); + return MPXP_Ok; + } + return MPXP_False; +} + extern unsigned xp_num_cpu; static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ unsigned avc_version=0; Modified: mplayerxp/libmpcodecs/vd_huffyuv.c =================================================================== --- mplayerxp/libmpcodecs/vd_huffyuv.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd_huffyuv.c 2012-11-13 17:34:45 UTC (rev 358) @@ -24,6 +24,7 @@ #include "vd_internal.h" #include "help_mp.h" #include "osdep/mplib.h" +#include "osdep/bswap.h" static const vd_info_t info = { "HuffYUV Video decoder", @@ -38,8 +39,19 @@ LIBVD_EXTERN(huffyuv) -static video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } +static const video_probe_t probes[] = { + { "huffyuv", "huffyuv", FOURCC_TAG('H','F','Y','U'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2'),FOURCC_TAG('B','G','R',32),FOURCC_TAG('B','G','R',24)}, {0, 0} }, + { NULL, NULL, 0x0, VCodecStatus_NotWorking, {0x0}, { 0 }} +}; +static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(fourcc==probes[i].fourcc) + return &probes[i]; + return NULL; +} + /* * Bitmap types */ Modified: mplayerxp/libmpcodecs/vd_internal.h =================================================================== --- mplayerxp/libmpcodecs/vd_internal.h 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd_internal.h 2012-11-13 17:34:45 UTC (rev 358) @@ -13,7 +13,7 @@ //static vd_info_t info; static const config_t options[]; -static video_probe_t* __FASTCALL__ probe(uint32_t fourcc); +static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc); static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...); static int __FASTCALL__ init(sh_video_t *sh,any_t* libinput); static void __FASTCALL__ uninit(sh_video_t *sh); Modified: mplayerxp/libmpcodecs/vd_libdv.c =================================================================== --- mplayerxp/libmpcodecs/vd_libdv.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd_libdv.c 2012-11-13 17:34:45 UTC (rev 358) @@ -8,6 +8,7 @@ #include "mp_config.h" #include "libvo/img_format.h" +#include "osdep/bswap.h" #include <libdv/dv.h> #include <libdv/dv_types.h> @@ -31,8 +32,33 @@ LIBVD_EXTERN(libdv) -static video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } +static const video_probe_t probes[] = { + { "libdv", "libdv", FOURCC_TAG('A','V','d','1'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('A','V','d','v'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('D','V','C',' '), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('D','V','C','P'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('D','V','5','0'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('D','V','5','N'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('D','V','5','P'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('D','V','H','3'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('D','V','H','5'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('D','V','H','6'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('D','V','H','Q'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('D','V','H','P'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('D','V','P','P'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('D','V','S','C'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { "libdv", "libdv", FOURCC_TAG('D','V','S','D'), VCodecStatus_Working, {FOURCC_TAG('Y','U','Y','2')}, {0, 0} }, + { NULL, NULL, 0x0, VCodecStatus_NotWorking, {0x0}, { 0 }} +}; +static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(fourcc==probes[i].fourcc) + return &probes[i]; + return NULL; +} + // to set/get/query special features/parameters static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ return MPXP_Unknown; Modified: mplayerxp/libmpcodecs/vd_libmpeg2.c =================================================================== --- mplayerxp/libmpcodecs/vd_libmpeg2.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd_libmpeg2.c 2012-11-13 17:34:45 UTC (rev 358) @@ -18,6 +18,7 @@ #include "postproc/postprocess.h" #include "codecs_ld.h" #include "osdep/mplib.h" +#include "osdep/bswap.h" static const vd_info_t info = { "libmpeg2 MPEG 1/2 Video decoder", @@ -32,9 +33,82 @@ LIBVD_EXTERN(libmpeg2) -static video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } +static const video_probe_t probes[] = { + { "mpeg2", "libmpeg2", 0x10000001, VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", 0x10000002, VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('A','V','M','P'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('D','V','R',' '), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('L','M','P','2'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','1','V',' '), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','1','V','1'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','2','V','1'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','7','0','1'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','M','E','S'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','2','V'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','G','V'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','E','G'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','G','1'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','G','2'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','5','P'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('P','I','M','1'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('P','I','M','2'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','1'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','2'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','3'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','4'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','5'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','6'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','7'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','8'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','9'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','A'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','3','N'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','3','P'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','4','N'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','4','P'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','5','N'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','1'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','2'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','3'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','4'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','5'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','6'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','7'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','8'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','9'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','A'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','B'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','C'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','D'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','E'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','F'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','1'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','2'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','3'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','4'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','5'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','6'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','7'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','8'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','9'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','A'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','B'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','C'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','D'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','E'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','F'), VCodecStatus_Working, {FOURCC_TAG('Y','V','1','2'), FOURCC_TAG('I','4','2','0'), FOURCC_TAG('4','2','2','P')}, {0, 0} }, + { NULL, NULL, 0x0, VCodecStatus_NotWorking, {0x0}, { 0 }} +}; +static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(fourcc==probes[i].fourcc) + return &probes[i]; + return NULL; +} + #include "libmpdemux/parse_es.h" #include "libvo/video_out.h" #ifdef ATTRIBUTE_ALIGNED_MAX Modified: mplayerxp/libmpcodecs/vd_mpegpes.c =================================================================== --- mplayerxp/libmpcodecs/vd_mpegpes.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd_mpegpes.c 2012-11-13 17:34:45 UTC (rev 358) @@ -2,8 +2,8 @@ #include <stdlib.h> #include "mp_config.h" - #include "vd_internal.h" +#include "osdep/bswap.h" static const vd_info_t info = { "MPEG 1/2 Video passthrough", @@ -18,8 +18,81 @@ LIBVD_EXTERN(mpegpes) -static video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } +static const video_probe_t probes[] = { + { "mpeg2", "libmpeg2", 0x10000001, VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", 0x10000002, VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('A','V','M','P'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('D','V','R',' '), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('L','M','P','2'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','1','V',' '), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','1','V','1'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','2','V','1'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','7','0','1'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','M','E','S'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','2','V'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','G','V'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','E','G'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','G','1'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','G','2'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','5','P'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('P','I','M','1'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('P','I','M','2'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','1'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','2'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','3'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','4'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','5'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','6'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','7'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','8'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','9'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','A'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','3','N'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','3','P'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','4','N'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','4','P'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','5','N'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','1'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','2'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','3'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','4'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','5'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','6'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','7'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','8'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','9'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','A'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','B'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','C'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','D'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','E'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','F'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','1'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','2'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','3'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','4'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','5'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','6'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','7'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','8'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','9'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','A'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','B'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','C'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','D'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','E'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','F'), VCodecStatus_Working, {FOURCC_TAG('M','P','E','S')}, {0} }, + { NULL, NULL, 0x0, VCodecStatus_NotWorking, {0x0}, { 0 }} +}; +static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(fourcc==probes[i].fourcc) + return &probes[i]; + return NULL; +} + // to set/get/query special features/parameters static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ return MPXP_Unknown; Modified: mplayerxp/libmpcodecs/vd_null.c =================================================================== --- mplayerxp/libmpcodecs/vd_null.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd_null.c 2012-11-13 17:34:45 UTC (rev 358) @@ -18,7 +18,7 @@ LIBVD_EXTERN(null) -static video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } +static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc) { return NULL; } // to set/get/query special features/parameters static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ Modified: mplayerxp/libmpcodecs/vd_nuv.c =================================================================== --- mplayerxp/libmpcodecs/vd_nuv.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd_nuv.c 2012-11-13 17:34:45 UTC (rev 358) @@ -4,6 +4,7 @@ #include "libnuppelvideo/nuppelvideo.h" #include "vd_internal.h" #include "codecs_ld.h" +#include "osdep/bswap.h" static const vd_info_t info = { "NuppelVideo decoder", @@ -18,8 +19,20 @@ LIBVD_EXTERN(nuv) -static video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } +static const video_probe_t probes[] = { + { "nuv", "nuv", FOURCC_TAG('N','U','V','1'), VCodecStatus_Working, {FOURCC_TAG('I','4','2','0')}, {0, 0} }, + { "nuv", "nuv", FOURCC_TAG('R','J','P','G'), VCodecStatus_Working, {FOURCC_TAG('I','4','2','0')}, {0, 0} }, + { NULL, NULL, 0x0, VCodecStatus_NotWorking, {0x0}, { 0 }} +}; +static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(fourcc==probes[i].fourcc) + return &probes[i]; + return NULL; +} + // to set/get/query special features/parameters static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ switch(cmd) { Modified: mplayerxp/libmpcodecs/vd_qtvideo.c =================================================================== --- mplayerxp/libmpcodecs/vd_qtvideo.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd_qtvideo.c 2012-11-13 17:34:45 UTC (rev 358) @@ -28,7 +28,7 @@ LIBVD_EXTERN(qtvideo) -static video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } +static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc) { return NULL; } #include "osdep/bswap.h" Modified: mplayerxp/libmpcodecs/vd_raw.c =================================================================== --- mplayerxp/libmpcodecs/vd_raw.c 2012-11-13 12:42:38 UTC (rev 357) +++ mplayerxp/libmpcodecs/vd_raw.c 2012-11-13 17:34:45 UTC (rev 358) @@ -2,8 +2,8 @@ #include <stdlib.h> #include "mp_config.h" - #include "vd_internal.h" +#include "osdep/bswap.h" static const vd_info_t info = { "RAW Uncompressed Video", @@ -18,8 +18,65 @@ LIBVD_EXTERN(raw) -static video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } +static const video_probe_t probes[] = { + { "raw", "raw", 0x0, VCodecStatus_Working, {FOURCC_TAG('R','G','B',32),FOURCC_TAG('R','G','B',24),FOURCC_TAG('R','G','B',16),FOURCC_TAG('Y','U','Y','2'),FOURCC_TAG('Y... [truncated message content] |