diff options
author | Darren Salt <linux@youmustbejoking.demon.co.uk> | 2009-01-16 00:42:34 +0000 |
---|---|---|
committer | Darren Salt <linux@youmustbejoking.demon.co.uk> | 2009-01-16 00:42:34 +0000 |
commit | c4593c8fdd129d838a143fdf9d88c6c55b9df1db (patch) | |
tree | c11d6d489efd92ec4f55fb2d36ae9a278da506da | |
parent | 0d53acade0cc2568aac531f2763aafc332a50012 (diff) | |
parent | d0af98c722b43e14189992e640dbc74a59c1dfac (diff) | |
download | xine-lib-c4593c8fdd129d838a143fdf9d88c6c55b9df1db.tar.gz xine-lib-c4593c8fdd129d838a143fdf9d88c6c55b9df1db.tar.bz2 |
Merge ffmeg codecs list creation rework from 1.1 with adaptations.
There are no CONFIG_*_DECODER macros, so don't write the #ifdefs for them.
Instead, check the avcodec version number if requested ("config=foo=51,50,1").
Also, allow for AV_VERSION_INT being undefined.
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | src/combined/ffmpeg/Makefile.am | 36 | ||||
-rw-r--r-- | src/combined/ffmpeg/ff_audio_decoder.c | 79 | ||||
-rw-r--r-- | src/combined/ffmpeg/ff_video_decoder.c | 161 | ||||
-rwxr-xr-x | src/combined/ffmpeg/mkcodeclist.pl | 94 | ||||
-rw-r--r-- | src/combined/ffmpeg/xine_audio.list | 54 | ||||
-rw-r--r-- | src/combined/ffmpeg/xine_video.list | 106 |
7 files changed, 298 insertions, 238 deletions
diff --git a/configure.ac b/configure.ac index f6b524800..8177b4ef1 100644 --- a/configure.ac +++ b/configure.ac @@ -175,6 +175,12 @@ AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_AWK +AC_PATH_PROG([PERL], [perl], [no]) +if test "$PERL" = no; then + AC_MSG_ERROR([perl not found]) +fi +AC_SUBST([PERL]) + AC_CHECK_TOOL([STRINGS], [strings], [false]) PKG_PROG_PKG_CONFIG diff --git a/src/combined/ffmpeg/Makefile.am b/src/combined/ffmpeg/Makefile.am index a89f19be5..020a04622 100644 --- a/src/combined/ffmpeg/Makefile.am +++ b/src/combined/ffmpeg/Makefile.am @@ -6,6 +6,15 @@ AM_LDFLAGS = $(xineplug_ldflags) xineplug_LTLIBRARIES = xineplug_decode_ff.la +ff_generated = \ + avcodec_video.list avcodec_audio.list \ + ff_video_list.h ff_audio_list.h + +BUILT_SOURCES = $(ff_generated) +DISTCLEANFILES = $(ff_generated) + +EXTRA_DIST = xine_video.list xine_audio.list mkcodeclist.pl + xineplug_decode_ff_la_SOURCES = ffmpeg_decoder.c ff_audio_decoder.c ff_video_decoder.c \ ff_mpeg_parser.c ffmpeg_decoder.h ff_mpeg_parser.h @@ -15,3 +24,30 @@ xineplug_decode_ff_la_CFLAGS = $(AM_CFLAGS) $(FFMPEG_CFLAGS) $(FFMPEG_POSTPROC_C xineplug_decode_ff_la_LIBADD = $(XINE_LIB) $(MLIB_LIBS) -lm $(ZLIB_LIBS) \ $(FFMPEG_LIBS) $(AVUTIL_LIBS) $(FFMPEG_POSTPROC_LIBS) $(PTHREAD_LIBS) $(LTLIBINTL) xineplug_decode_ff_la_LDFLAGS = $(AM_LDFLAGS) $(IMPURE_TEXT_LDFLAGS) + +# Generation of ffmpeg->xine codec mapping lists (see xine_*.list). + +AV_CPP = $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) + +# Extract some CODEC_ID_* from avcodec.h. Requires some sed mangling. +avcodec_audio.list: AV_CODECS:=/CODEC_ID_PCM_S16LE/,/CODEC_ID_DVD_SUBTITLE/ +avcodec_video.list: AV_CODECS:=/CODEC_ID_MPEG1VIDEO/,/CODEC_ID_PCM_S16LE/ + +avcodec_audio.list avcodec_video.list: + echo '#include "$(srcdir)/ffmpeg_decoder.h"' | $(AV_CPP) - |\ + sed -e $(AV_CODECS)'! d; s/^\s*//; s/[=,].*//; /^$$/ d' |\ + head -n -1 >$@ + +# Generate the mappings. These are #included where needed. +ff_%_list.h: $(srcdir)/mkcodeclist.pl avcodec_%.list $(srcdir)/xine_%.list + $(PERL) $^ $@ + +ff_audio_decoder.c: ff_audio_list.h +ff_video_decoder.c: ff_video_list.h + +# 'make report' prints tokens corresponding to any unhandled codecs. +report: avcodec_audio.list avcodec_video.list + @$(top_srcdir)/src/combined/ffmpeg/mkcodeclist.pl avcodec_audio.list xine_audio.list - audio + @$(top_srcdir)/src/combined/ffmpeg/mkcodeclist.pl avcodec_video.list xine_video.list - video + +.PHONY: report diff --git a/src/combined/ffmpeg/ff_audio_decoder.c b/src/combined/ffmpeg/ff_audio_decoder.c index 38b393506..893e405b1 100644 --- a/src/combined/ffmpeg/ff_audio_decoder.c +++ b/src/combined/ffmpeg/ff_audio_decoder.c @@ -72,45 +72,7 @@ typedef struct ff_audio_decoder_s { } ff_audio_decoder_t; -static const ff_codec_t ff_audio_lookup[] = { - {BUF_AUDIO_WMAV1, CODEC_ID_WMAV1, "MS Windows Media Audio 1 (ffmpeg)"}, - {BUF_AUDIO_WMAV2, CODEC_ID_WMAV2, "MS Windows Media Audio 2 (ffmpeg)"}, - {BUF_AUDIO_14_4, CODEC_ID_RA_144, "Real 14.4 (ffmpeg)"}, - {BUF_AUDIO_28_8, CODEC_ID_RA_288, "Real 28.8 (ffmpeg)"}, - {BUF_AUDIO_MPEG, CODEC_ID_MP3, "MP3 (ffmpeg)"}, - {BUF_AUDIO_MP3ADU, CODEC_ID_MP3ADU, "MPEG-3 adu (ffmpeg)"}, - {BUF_AUDIO_MSADPCM, CODEC_ID_ADPCM_MS, "MS ADPCM (ffmpeg)"}, - {BUF_AUDIO_QTIMAADPCM, CODEC_ID_ADPCM_IMA_QT, "QT IMA ADPCM (ffmpeg)"}, - {BUF_AUDIO_MSIMAADPCM, CODEC_ID_ADPCM_IMA_WAV, "MS IMA ADPCM (ffmpeg)"}, - {BUF_AUDIO_DK3ADPCM, CODEC_ID_ADPCM_IMA_DK3, "Duck DK3 ADPCM (ffmpeg)"}, - {BUF_AUDIO_DK4ADPCM, CODEC_ID_ADPCM_IMA_DK4, "Duck DK4 ADPCM (ffmpeg)"}, - {BUF_AUDIO_VQA_IMA, CODEC_ID_ADPCM_IMA_WS, "Westwood Studios IMA (ffmpeg)"}, - {BUF_AUDIO_SMJPEG_IMA, CODEC_ID_ADPCM_IMA_SMJPEG, "SMJPEG IMA (ffmpeg)"}, - {BUF_AUDIO_XA_ADPCM, CODEC_ID_ADPCM_XA, "CD-ROM/XA ADPCM (ffmpeg)"}, - {BUF_AUDIO_4X_ADPCM, CODEC_ID_ADPCM_4XM, "4X ADPCM (ffmpeg)"}, - {BUF_AUDIO_EA_ADPCM, CODEC_ID_ADPCM_EA, "Electronic Arts ADPCM (ffmpeg)"}, - {BUF_AUDIO_MULAW, CODEC_ID_PCM_MULAW, "mu-law logarithmic PCM (ffmpeg)"}, - {BUF_AUDIO_ALAW, CODEC_ID_PCM_ALAW, "A-law logarithmic PCM (ffmpeg)"}, - {BUF_AUDIO_ROQ, CODEC_ID_ROQ_DPCM, "RoQ DPCM (ffmpeg)"}, - {BUF_AUDIO_INTERPLAY, CODEC_ID_INTERPLAY_DPCM, "Interplay DPCM (ffmpeg)"}, - {BUF_AUDIO_MAC3, CODEC_ID_MACE3, "MACE 3:1 (ffmpeg)"}, - {BUF_AUDIO_MAC6, CODEC_ID_MACE6, "MACE 6:1 (ffmpeg)"}, - {BUF_AUDIO_XAN_DPCM, CODEC_ID_XAN_DPCM, "Origin Xan DPCM (ffmpeg)"}, - {BUF_AUDIO_VMD, CODEC_ID_VMDAUDIO, "Sierra VMD Audio (ffmpeg)"}, - {BUF_AUDIO_FLAC, CODEC_ID_FLAC, "FLAC (ffmpeg)"}, - {BUF_AUDIO_SHORTEN, CODEC_ID_SHORTEN, "Shorten (ffmpeg)"}, - {BUF_AUDIO_ALAC, CODEC_ID_ALAC, "ALAC (ffmpeg)"}, - {BUF_AUDIO_QDESIGN2, CODEC_ID_QDM2, "QDesign (ffmpeg)"}, - {BUF_AUDIO_COOK, CODEC_ID_COOK, "RealAudio Cooker (ffmpeg)"}, - {BUF_AUDIO_TRUESPEECH, CODEC_ID_TRUESPEECH, "TrueSpeech (ffmpeg)"}, - {BUF_AUDIO_TTA, CODEC_ID_TTA, "True Audio Lossless (ffmpeg)"}, - {BUF_AUDIO_SMACKER, CODEC_ID_SMACKAUDIO, "Smacker (ffmpeg)"}, - {BUF_AUDIO_FLVADPCM, CODEC_ID_ADPCM_SWF, "Flash ADPCM (ffmpeg)"}, - {BUF_AUDIO_WAVPACK, CODEC_ID_WAVPACK, "WavPack (ffmpeg)"}, - {BUF_AUDIO_AMR_NB, CODEC_ID_AMR_NB, "AMR narrow band (ffmpeg)"}, - {BUF_AUDIO_AMR_WB, CODEC_ID_AMR_WB, "AMR wide band (ffmpeg)"}, -}; - +#include "ff_audio_list.h" static void ff_audio_ensure_buffer_size(ff_audio_decoder_t *this, int size) { if (size > this->bufsize) { @@ -494,45 +456,6 @@ void *init_audio_plugin (xine_t *xine, void *data) { return this; } -static const uint32_t supported_audio_types[] = { - BUF_AUDIO_WMAV1, - BUF_AUDIO_WMAV2, - BUF_AUDIO_14_4, - BUF_AUDIO_28_8, - BUF_AUDIO_MPEG, - BUF_AUDIO_MSADPCM, - BUF_AUDIO_QTIMAADPCM, - BUF_AUDIO_MSIMAADPCM, - BUF_AUDIO_DK3ADPCM, - BUF_AUDIO_DK4ADPCM, - BUF_AUDIO_VQA_IMA, - BUF_AUDIO_SMJPEG_IMA, - BUF_AUDIO_XA_ADPCM, - BUF_AUDIO_4X_ADPCM, - BUF_AUDIO_EA_ADPCM, - BUF_AUDIO_MULAW, - BUF_AUDIO_ALAW, - BUF_AUDIO_ROQ, - BUF_AUDIO_INTERPLAY, - BUF_AUDIO_MAC3, - BUF_AUDIO_MAC6, - BUF_AUDIO_XAN_DPCM, - BUF_AUDIO_VMD, - BUF_AUDIO_FLAC, - BUF_AUDIO_SHORTEN, - BUF_AUDIO_ALAC, - BUF_AUDIO_QDESIGN2, - BUF_AUDIO_COOK, - BUF_AUDIO_TRUESPEECH, - BUF_AUDIO_TTA, - BUF_AUDIO_SMACKER, - BUF_AUDIO_FLVADPCM, - BUF_AUDIO_WAVPACK, - BUF_AUDIO_AMR_NB, - BUF_AUDIO_AMR_WB, - 0 -}; - decoder_info_t dec_info_ffmpeg_audio = { supported_audio_types, /* supported types */ 7 /* priority */ diff --git a/src/combined/ffmpeg/ff_video_decoder.c b/src/combined/ffmpeg/ff_video_decoder.c index beb22a6cc..19e10cbc9 100644 --- a/src/combined/ffmpeg/ff_video_decoder.c +++ b/src/combined/ffmpeg/ff_video_decoder.c @@ -247,85 +247,7 @@ static void release_buffer(struct AVCodecContext *context, AVFrame *av_frame){ } #endif -static const ff_codec_t ff_video_lookup[] = { - {BUF_VIDEO_MSMPEG4_V1, CODEC_ID_MSMPEG4V1, "Microsoft MPEG-4 v1 (ffmpeg)"}, - {BUF_VIDEO_MSMPEG4_V2, CODEC_ID_MSMPEG4V2, "Microsoft MPEG-4 v2 (ffmpeg)"}, - {BUF_VIDEO_MSMPEG4_V3, CODEC_ID_MSMPEG4V3, "Microsoft MPEG-4 v3 (ffmpeg)"}, - {BUF_VIDEO_WMV7, CODEC_ID_WMV1, "MS Windows Media Video 7 (ffmpeg)"}, - {BUF_VIDEO_WMV8, CODEC_ID_WMV2, "MS Windows Media Video 8 (ffmpeg)"}, - {BUF_VIDEO_WMV9, CODEC_ID_WMV3, "MS Windows Media Video 9 (ffmpeg)"}, - {BUF_VIDEO_VC1, CODEC_ID_VC1, "MS Windows Media Video VC-1 (ffmpeg)"}, - {BUF_VIDEO_MPEG4, CODEC_ID_MPEG4, "ISO MPEG-4 (ffmpeg)"}, - {BUF_VIDEO_XVID, CODEC_ID_MPEG4, "ISO MPEG-4 (XviD, ffmpeg)"}, - {BUF_VIDEO_DIVX5, CODEC_ID_MPEG4, "ISO MPEG-4 (DivX5, ffmpeg)"}, - {BUF_VIDEO_3IVX, CODEC_ID_MPEG4, "ISO MPEG-4 (3ivx, ffmpeg)"}, - {BUF_VIDEO_JPEG, CODEC_ID_MJPEG, "Motion JPEG (ffmpeg)"}, - {BUF_VIDEO_MJPEG, CODEC_ID_MJPEG, "Motion JPEG (ffmpeg)"}, - {BUF_VIDEO_MJPEG_B, CODEC_ID_MJPEGB, "Motion JPEG B (ffmpeg)"}, - {BUF_VIDEO_I263, CODEC_ID_H263I, "ITU H.263 (ffmpeg)"}, - {BUF_VIDEO_H263, CODEC_ID_H263, "H.263 (ffmpeg)"}, - {BUF_VIDEO_RV10, CODEC_ID_RV10, "Real Video 1.0 (ffmpeg)"}, - {BUF_VIDEO_RV20, CODEC_ID_RV20, "Real Video 2.0 (ffmpeg)"}, - {BUF_VIDEO_IV31, CODEC_ID_INDEO3, "Indeo Video 3.1 (ffmpeg)"}, - {BUF_VIDEO_IV32, CODEC_ID_INDEO3, "Indeo Video 3.2 (ffmpeg)"}, - {BUF_VIDEO_SORENSON_V1, CODEC_ID_SVQ1, "Sorenson Video 1 (ffmpeg)"}, - {BUF_VIDEO_SORENSON_V3, CODEC_ID_SVQ3, "Sorenson Video 3 (ffmpeg)"}, - {BUF_VIDEO_DV, CODEC_ID_DVVIDEO, "DV (ffmpeg)"}, - {BUF_VIDEO_HUFFYUV, CODEC_ID_HUFFYUV, "HuffYUV (ffmpeg)"}, - {BUF_VIDEO_VP31, CODEC_ID_VP3, "On2 VP3.1 (ffmpeg)"}, - {BUF_VIDEO_VP5, CODEC_ID_VP5, "On2 VP5 (ffmpeg)"}, - {BUF_VIDEO_VP6, CODEC_ID_VP6, "On2 VP6 (ffmpeg)"}, - {BUF_VIDEO_VP6F, CODEC_ID_VP6F, "On2 VP6 (ffmpeg)"}, - {BUF_VIDEO_4XM, CODEC_ID_4XM, "4X Video (ffmpeg)"}, - {BUF_VIDEO_CINEPAK, CODEC_ID_CINEPAK, "Cinepak (ffmpeg)"}, - {BUF_VIDEO_MSVC, CODEC_ID_MSVIDEO1, "Microsoft Video 1 (ffmpeg)"}, - {BUF_VIDEO_MSRLE, CODEC_ID_MSRLE, "Microsoft RLE (ffmpeg)"}, - {BUF_VIDEO_RPZA, CODEC_ID_RPZA, "Apple Quicktime Video/RPZA (ffmpeg)"}, - {BUF_VIDEO_CYUV, CODEC_ID_CYUV, "Creative YUV (ffmpeg)"}, - {BUF_VIDEO_ROQ, CODEC_ID_ROQ, "Id Software RoQ (ffmpeg)"}, - {BUF_VIDEO_IDCIN, CODEC_ID_IDCIN, "Id Software CIN (ffmpeg)"}, - {BUF_VIDEO_WC3, CODEC_ID_XAN_WC3, "Xan (ffmpeg)"}, - {BUF_VIDEO_VQA, CODEC_ID_WS_VQA, "Westwood Studios VQA (ffmpeg)"}, - {BUF_VIDEO_INTERPLAY, CODEC_ID_INTERPLAY_VIDEO, "Interplay MVE (ffmpeg)"}, - {BUF_VIDEO_FLI, CODEC_ID_FLIC, "FLIC Video (ffmpeg)"}, - {BUF_VIDEO_8BPS, CODEC_ID_8BPS, "Planar RGB (ffmpeg)"}, - {BUF_VIDEO_SMC, CODEC_ID_SMC, "Apple Quicktime Graphics/SMC (ffmpeg)"}, - {BUF_VIDEO_DUCKTM1, CODEC_ID_TRUEMOTION1,"Duck TrueMotion v1 (ffmpeg)"}, - {BUF_VIDEO_DUCKTM2, CODEC_ID_TRUEMOTION2,"Duck TrueMotion v2 (ffmpeg)"}, - {BUF_VIDEO_VMD, CODEC_ID_VMDVIDEO, "Sierra VMD Video (ffmpeg)"}, - {BUF_VIDEO_ZLIB, CODEC_ID_ZLIB, "ZLIB Video (ffmpeg)"}, - {BUF_VIDEO_MSZH, CODEC_ID_MSZH, "MSZH Video (ffmpeg)"}, - {BUF_VIDEO_ASV1, CODEC_ID_ASV1, "ASV v1 Video (ffmpeg)"}, - {BUF_VIDEO_ASV2, CODEC_ID_ASV2, "ASV v2 Video (ffmpeg)"}, - {BUF_VIDEO_ATIVCR1, CODEC_ID_VCR1, "ATI VCR-1 (ffmpeg)"}, - {BUF_VIDEO_FLV1, CODEC_ID_FLV1, "Flash Video (ffmpeg)"}, - {BUF_VIDEO_QTRLE, CODEC_ID_QTRLE, "Apple Quicktime Animation/RLE (ffmpeg)"}, - {BUF_VIDEO_H264, CODEC_ID_H264, "H.264/AVC (ffmpeg)"}, - {BUF_VIDEO_H261, CODEC_ID_H261, "H.261 (ffmpeg)"}, - {BUF_VIDEO_AASC, CODEC_ID_AASC, "Autodesk Video (ffmpeg)"}, - {BUF_VIDEO_LOCO, CODEC_ID_LOCO, "LOCO (ffmpeg)"}, - {BUF_VIDEO_QDRW, CODEC_ID_QDRAW, "QuickDraw (ffmpeg)"}, - {BUF_VIDEO_QPEG, CODEC_ID_QPEG, "Q-Team QPEG (ffmpeg)"}, - {BUF_VIDEO_TSCC, CODEC_ID_TSCC, "TechSmith Video (ffmpeg)"}, - {BUF_VIDEO_ULTI, CODEC_ID_ULTI, "IBM UltiMotion (ffmpeg)"}, - {BUF_VIDEO_WNV1, CODEC_ID_WNV1, "Winnow Video (ffmpeg)"}, - {BUF_VIDEO_XL, CODEC_ID_VIXL, "Miro/Pinnacle VideoXL (ffmpeg)"}, - {BUF_VIDEO_RT21, CODEC_ID_INDEO2, "Indeo/RealTime 2 (ffmpeg)"}, - {BUF_VIDEO_FPS1, CODEC_ID_FRAPS, "Fraps (ffmpeg)"}, - {BUF_VIDEO_MPEG, CODEC_ID_MPEG1VIDEO, "MPEG 1/2 (ffmpeg)"}, - {BUF_VIDEO_CSCD, CODEC_ID_CSCD, "CamStudio (ffmpeg)"}, - {BUF_VIDEO_AVS, CODEC_ID_AVS, "AVS (ffmpeg)"}, - {BUF_VIDEO_ALGMM, CODEC_ID_MMVIDEO, "American Laser Games MM (ffmpeg)"}, - {BUF_VIDEO_ZMBV, CODEC_ID_ZMBV, "Zip Motion Blocks Video (ffmpeg)"}, - {BUF_VIDEO_SMACKER, CODEC_ID_SMACKVIDEO, "Smacker (ffmpeg)"}, - {BUF_VIDEO_NUV, CODEC_ID_NUV, "NuppelVideo (ffmpeg)"}, - {BUF_VIDEO_KMVC, CODEC_ID_KMVC, "Karl Morton's Video Codec (ffmpeg)"}, - {BUF_VIDEO_FLASHSV, CODEC_ID_FLASHSV, "Flash Screen Video (ffmpeg)"}, - {BUF_VIDEO_CAVS, CODEC_ID_CAVS, "Chinese AVS (ffmpeg)"}, - {BUF_VIDEO_VMNC, CODEC_ID_VMNC, "VMware Screen Codec (ffmpeg)"}, - {BUF_VIDEO_THEORA_RAW, CODEC_ID_THEORA, "Theora (ffmpeg)"}, - {BUF_VIDEO_SNOW, CODEC_ID_SNOW, "Snow (ffmpeg)"}, -}; +#include "ff_video_list.h" static const char *const skip_loop_filter_enum_names[] = { "default", /* AVDISCARD_DEFAULT */ @@ -1765,87 +1687,6 @@ void *init_video_plugin (xine_t *xine, void *data) { return this; } -static const uint32_t supported_video_types[] = { - BUF_VIDEO_MSMPEG4_V1, - BUF_VIDEO_MSMPEG4_V2, - BUF_VIDEO_MSMPEG4_V3, - BUF_VIDEO_WMV7, - BUF_VIDEO_WMV8, - BUF_VIDEO_WMV9, - BUF_VIDEO_VC1, - BUF_VIDEO_MPEG4, - BUF_VIDEO_XVID, - BUF_VIDEO_DIVX5, - BUF_VIDEO_3IVX, - BUF_VIDEO_JPEG, - BUF_VIDEO_MJPEG, - BUF_VIDEO_MJPEG_B, - BUF_VIDEO_I263, - BUF_VIDEO_H263, - BUF_VIDEO_RV10, - BUF_VIDEO_RV20, - BUF_VIDEO_IV31, - BUF_VIDEO_IV32, - BUF_VIDEO_SORENSON_V1, - BUF_VIDEO_SORENSON_V3, - BUF_VIDEO_DV, - BUF_VIDEO_HUFFYUV, - BUF_VIDEO_VP31, - BUF_VIDEO_VP5, - BUF_VIDEO_VP6, - BUF_VIDEO_VP6F, - BUF_VIDEO_4XM, - BUF_VIDEO_CINEPAK, - BUF_VIDEO_MSVC, - BUF_VIDEO_MSRLE, - BUF_VIDEO_RPZA, - BUF_VIDEO_CYUV, - BUF_VIDEO_ROQ, - BUF_VIDEO_IDCIN, - BUF_VIDEO_WC3, - BUF_VIDEO_VQA, - BUF_VIDEO_INTERPLAY, - BUF_VIDEO_FLI, - BUF_VIDEO_8BPS, - BUF_VIDEO_SMC, - BUF_VIDEO_DUCKTM1, - BUF_VIDEO_DUCKTM2, - BUF_VIDEO_VMD, - BUF_VIDEO_ZLIB, - BUF_VIDEO_MSZH, - BUF_VIDEO_ASV1, - BUF_VIDEO_ASV2, - BUF_VIDEO_ATIVCR1, - BUF_VIDEO_FLV1, - BUF_VIDEO_QTRLE, - BUF_VIDEO_H264, - BUF_VIDEO_H261, - BUF_VIDEO_AASC, - BUF_VIDEO_LOCO, - BUF_VIDEO_QDRW, - BUF_VIDEO_QPEG, - BUF_VIDEO_TSCC, - BUF_VIDEO_ULTI, - BUF_VIDEO_WNV1, - BUF_VIDEO_XL, - BUF_VIDEO_RT21, - BUF_VIDEO_FPS1, - BUF_VIDEO_MPEG, - BUF_VIDEO_CSCD, - BUF_VIDEO_AVS, - BUF_VIDEO_ALGMM, - BUF_VIDEO_ZMBV, - BUF_VIDEO_SMACKER, - BUF_VIDEO_NUV, - BUF_VIDEO_KMVC, - BUF_VIDEO_FLASHSV, - BUF_VIDEO_CAVS, - BUF_VIDEO_VMNC, - BUF_VIDEO_SNOW, - BUF_VIDEO_THEORA_RAW, - 0 -}; - static const uint32_t wmv8_video_types[] = { BUF_VIDEO_WMV8, 0 diff --git a/src/combined/ffmpeg/mkcodeclist.pl b/src/combined/ffmpeg/mkcodeclist.pl new file mode 100755 index 000000000..3f587342d --- /dev/null +++ b/src/combined/ffmpeg/mkcodeclist.pl @@ -0,0 +1,94 @@ +#! /usr/bin/perl -w + +# Make codec lists for #inclusion by ff_*_decoder.c. +# Parameters: +# list of ffmpeg CODEC_ID_* (pre-processed, one per line) +# list of codecs recognised by xine-lib (see list for details) +# output file name, or "-" to generate a report on unhandled codecs + +my ($ffmpeg, $xine, $out) = @ARGV; +my $line; + +# Read in the ffmpeg codec IDs +my %codecs; +open LIST, "< $ffmpeg" or die $!; +while (defined ($line = <LIST>)) { + chomp $line; + $line =~ s/^CODEC_ID_//o; + $codecs{$line} = 0; +} +close LIST or die $!; + +# Read in the xine-lib codec IDs +my %config; +my @known; +my $type = 'audio'; # default type +my $Type = 'AUDIO'; +my ($a, $f, $t); +open LIST, "< $xine" or die $!; +while (defined ($line = <LIST>)) { + next if substr ($line, 0, 1) eq '#' or $line =~ /^\s*$/o; + chomp $line; + if (substr ($line, 0, 5) eq 'type=') { + # codec type; "FOO" in "BUF_FOO_BAR" + $type = substr ($line, 5); + $type =~ tr/A-Z/a-z/; + $Type = $type; + $Type =~ tr/a-z/A-Z/; + } elsif (substr ($line, 0, 7) eq 'config=') { + # avcodec minimum version mappings + ($a, $f, $t) = split (/=/, $line, 3); + $config{$f} = $t if $t =~ /^\d+,\d+,\d+$/ + } else { + # codec details + push @known, [split (/\s+/, $line, 3)]; + } +} +close LIST or die $!; + +# Look through the mappings. +# Mark what we can handle and report on what the installed ffmpeg can't +foreach $line (@known) { + if (defined $codecs{$line->[1]}) { + ++$codecs{$line->[1]}; + } else { + print "Ignored $line->[0] = $line->[1]\n"; + } +} + +my $w = ($out ne '-'); + +if ($w) { + # Write the C source code for the codec lists + open LIST, "> $out" or die $!; + print LIST "#ifndef AV_VERSION_INT\n# define AV_VERSION_INT(a,b,c) 0x7FFFFFFF\n#endif\n" or die $!; + print LIST "static const ff_codec_t ff_${type}_lookup[] = {\n" or die $!; + foreach $line (@known) { + next if $line->[0] eq '!'; + next unless defined $codecs{$line->[1]}; + print LIST " { BUF_${Type}_$line->[0], CODEC_ID_$line->[1], \"$line->[2] (ffmpeg)\" },\n" or die $!; + } + print LIST "};\n\nstatic uint32_t supported_${type}_types[] = {\n" or die $!; + foreach $line (@known) { + next if $line->[0] eq '!'; + next unless defined $codecs{$line->[1]}; + $a = ''; + $a = $config{$a} if defined $config{$a}; + if ($a eq '') { + print LIST " BUF_${Type}_$line->[0],\n" or die $!; + } else { + print LIST " #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT($a)\n BUF_${Type}_$line->[0],\n #endif\n" or die $!; + } + } + print LIST "};\n" or die $!; + close LIST or die $!; +} +else { + # Report on ffmpeg codecs which we don't handle + print "Unhandled $type codecs:\n"; + foreach $line (sort keys %codecs) { + print " $line\n" if $codecs{$line} == 0; + } +} + +exit 0; diff --git a/src/combined/ffmpeg/xine_audio.list b/src/combined/ffmpeg/xine_audio.list new file mode 100644 index 000000000..78d2b62eb --- /dev/null +++ b/src/combined/ffmpeg/xine_audio.list @@ -0,0 +1,54 @@ +type=audio + +# xine-lib BUF_AUDIO_ ffmpeg CODEC_ID_ description or comment +# ("!"=ignore) (quote any "s) + +WMAV1 WMAV1 MS Windows Media Audio 1 +WMAV2 WMAV2 MS Windows Media Audio 2 +14_4 RA_144 Real 14.4 +28_8 RA_288 Real 28.8 +MPEG MP3 MP3 +MP3ADU MP3ADU MPEG-3 adu +MSADPCM ADPCM_MS MS ADPCM +QTIMAADPCM ADPCM_IMA_QT QT IMA ADPCM +MSIMAADPCM ADPCM_IMA_WAV MS IMA ADPCM +DK3ADPCM ADPCM_IMA_DK3 Duck DK3 ADPCM +DK4ADPCM ADPCM_IMA_DK4 Duck DK4 ADPCM +VQA_IMA ADPCM_IMA_WS Westwood Studios IMA +SMJPEG_IMA ADPCM_IMA_SMJPEG SMJPEG IMA +XA_ADPCM ADPCM_XA CD-ROM/XA ADPCM +4X_ADPCM ADPCM_4XM 4X ADPCM +EA_ADPCM ADPCM_EA Electronic Arts ADPCM +MULAW PCM_MULAW mu-law logarithmic PCM +ALAW PCM_ALAW A-law logarithmic PCM +ROQ ROQ_DPCM RoQ DPCM +INTERPLAY INTERPLAY_DPCM Interplay DPCM +MAC3 MACE3 MACE 3:1 +MAC6 MACE6 MACE 6:1 +XAN_DPCM XAN_DPCM Origin Xan DPCM +VMD VMDAUDIO Sierra VMD Audio +FLAC FLAC FLAC +SHORTEN SHORTEN Shorten +ALAC ALAC ALAC +QDESIGN2 QDM2 QDesign +COOK COOK RealAudio Cooker +TRUESPEECH TRUESPEECH TrueSpeech +TTA TTA True Audio Lossless +SMACKER SMACKAUDIO Smacker +FLVADPCM ADPCM_SWF Flash ADPCM +WAVPACK WAVPACK WavPack +AMR_NB AMR_NB AMR narrow band +AMR_WB AMR_WB AMR wide band + +# disabled codecs (ref. configure.ac) +! AAC +! AC3 +! ADPCM_ADX +! ADPCM_G726 +! DSICINAUDIO +! DVAUDIO +! IMC +! MP3ON4 +! SONIC +! SONIC_LS +! VORBIS diff --git a/src/combined/ffmpeg/xine_video.list b/src/combined/ffmpeg/xine_video.list new file mode 100644 index 000000000..144bbe1c2 --- /dev/null +++ b/src/combined/ffmpeg/xine_video.list @@ -0,0 +1,106 @@ +type=video + +# xine-lib BUF_VIDEO_ ffmpeg CODEC_ID_ description or comment +# ("!"=ignore) (quote any "s) + +MSMPEG4_V1 MSMPEG4V1 Microsoft MPEG-4 v1 +MSMPEG4_V2 MSMPEG4V2 Microsoft MPEG-4 v2 +MSMPEG4_V3 MSMPEG4V3 Microsoft MPEG-4 v3 +WMV7 WMV1 MS Windows Media Video 7 +WMV8 WMV2 MS Windows Media Video 8 +WMV9 WMV3 MS Windows Media Video 9 +VC1 VC1 MS Windows Media Video VC-1 +MPEG4 MPEG4 ISO MPEG-4 +XVID MPEG4 ISO MPEG-4 (XviD) +DIVX5 MPEG4 ISO MPEG-4 (DivX5) +3IVX MPEG4 ISO MPEG-4 (3ivx) +JPEG MJPEG Motion JPEG +MJPEG MJPEG Motion JPEG +MJPEG_B MJPEGB Motion JPEG B +I263 H263I ITU H.263 +H263 H263 H.263 +RV10 RV10 Real Video 1.0 +RV20 RV20 Real Video 2.0 +IV31 INDEO3 Indeo Video 3.1 +IV32 INDEO3 Indeo Video 3.2 +SORENSON_V1 SVQ1 Sorenson Video 1 +SORENSON_V3 SVQ3 Sorenson Video 3 +DV DVVIDEO DV +HUFFYUV HUFFYUV HuffYUV +VP31 VP3 On2 VP3.1 +VP5 VP5 On2 VP5 +VP6 VP6 On2 VP6 +VP6F VP6F On2 VP6 +4XM 4XM 4X Video +CINEPAK CINEPAK Cinepak +MSVC MSVIDEO1 Microsoft Video 1 +MSRLE MSRLE Microsoft RLE +RPZA RPZA Apple Quicktime Video/RPZA +CYUV CYUV Creative YUV +ROQ ROQ Id Software RoQ +IDCIN IDCIN Id Software CIN +WC3 XAN_WC3 Xan +VQA WS_VQA Westwood Studios VQA +INTERPLAY INTERPLAY_VIDEO Interplay MVE +FLI FLIC FLIC Video +8BPS 8BPS Planar RGB +SMC SMC Apple Quicktime Graphics/SMC +DUCKTM1 TRUEMOTION1 Duck TrueMotion v1 +DUCKTM2 TRUEMOTION2 Duck TrueMotion v2 +VMD VMDVIDEO Sierra VMD Video +ZLIB ZLIB ZLIB Video +MSZH MSZH MSZH Video +ASV1 ASV1 ASV v1 Video +ASV2 ASV2 ASV v2 Video +ATIVCR1 VCR1 ATI VCR-1 +FLV1 FLV1 Flash Video +QTRLE QTRLE Apple Quicktime Animation/RLE +H264 H264 H.264/AVC +H261 H261 H.261 +AASC AASC Autodesk Video +LOCO LOCO LOCO +QDRW QDRAW QuickDraw +QPEG QPEG Q-Team QPEG +TSCC TSCC TechSmith Video +ULTI ULTI IBM UltiMotion +WNV1 WNV1 Winnow Video +XL VIXL Miro/Pinnacle VideoXL +RT21 INDEO2 Indeo/RealTime 2 +FPS1 FRAPS Fraps +MPEG MPEG1VIDEO MPEG 1/2 +CSCD CSCD CamStudio +AVS AVS AVS +ALGMM MMVIDEO American Laser Games MM +ZMBV ZMBV Zip Motion Blocks Video +SMACKER SMACKVIDEO Smacker +NUV NUV NuppelVideo +KMVC KMVC Karl Morton's Video Codec +FLASHSV FLASHSV Flash Screen Video +CAVS CAVS Chinese AVS +VMNC VMNC VMware Screen Codec +THEORA_RAW THEORA Theora +SNOW SNOW Snow + +# disabled codecs (ref. configure.ac) +! BMP +! CLJR +! DSICINVIDEO +! FFV1 +! FFVHUFF +! GIF +! H263P +! JPEGLS +! LJPEG +! MDEC +! PAM +! PBM +! PGM +! PGMYUV +! PNG +! PPM +! RAWVIDEO +! SP5X +! TARGA +! TIERTEXSEQVIDEO +! TIFF +! XVID ⇒ MPEG4 |