From 73e5249c797223236908f855d3710709d7fd85fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Mon, 13 Sep 2010 20:25:24 +0000 Subject: [PATCH] * Enabled libvorbis and libtheora encoders in FFmpeg * Enabled ogg muxer in MuxerTable. ogg/vorbis creation successfully tested with MediaConverter. ogg/theora needs more testing, it seems to work, but I need to switch from the other vorbis/theora/ogg plugins to the FFmpeg built-in support, otherwise the current theora stream is not supported by the old plugin. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38641 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../media/plugins/ffmpeg/EncoderTable.cpp | 34 ++++++++++++++++--- src/add-ons/media/plugins/ffmpeg/Jamfile | 8 +++++ .../media/plugins/ffmpeg/MuxerTable.cpp | 28 +++++++-------- src/add-ons/media/plugins/ffmpeg/config.h | 8 ++--- .../media/plugins/ffmpeg/libavcodec/Jamfile | 17 ++++++++-- 5 files changed, 71 insertions(+), 24 deletions(-) diff --git a/src/add-ons/media/plugins/ffmpeg/EncoderTable.cpp b/src/add-ons/media/plugins/ffmpeg/EncoderTable.cpp index a96ac69e5f..c68a9ce1b2 100644 --- a/src/add-ons/media/plugins/ffmpeg/EncoderTable.cpp +++ b/src/add-ons/media/plugins/ffmpeg/EncoderTable.cpp @@ -10,7 +10,7 @@ const EncoderDescription gEncoderTable[] = { { { - "MPEG4 Video", + "MPEG4 video", "mpeg4", 0, CODEC_ID_MPEG4, @@ -23,7 +23,7 @@ const EncoderDescription gEncoderTable[] = { }, { { - "MPEG1 Video", + "MPEG1 video", "mpeg1video", 0, CODEC_ID_MPEG1VIDEO, @@ -36,7 +36,7 @@ const EncoderDescription gEncoderTable[] = { }, { { - "MPEG2 Video", + "MPEG2 video", "mpeg2video", 0, CODEC_ID_MPEG2VIDEO, @@ -49,7 +49,20 @@ const EncoderDescription gEncoderTable[] = { }, { { - "Raw Audio", + "Theora video", + "theora", + 0, + CODEC_ID_THEORA, + { 0 } + }, + B_ANY_FORMAT_FAMILY, + B_MEDIA_RAW_VIDEO, + B_MEDIA_ENCODED_VIDEO, + 23 + }, + { + { + "Raw audio", "pcm", 0, 0, @@ -72,6 +85,19 @@ const EncoderDescription gEncoderTable[] = { B_MEDIA_RAW_AUDIO, B_MEDIA_ENCODED_AUDIO, 10 + }, + { + { + "Vorbis audio", + "vorbis", + 0, + CODEC_ID_VORBIS, + { 0 } + }, + B_ANY_FORMAT_FAMILY, + B_MEDIA_RAW_AUDIO, + B_MEDIA_ENCODED_AUDIO, + 10 } }; diff --git a/src/add-ons/media/plugins/ffmpeg/Jamfile b/src/add-ons/media/plugins/ffmpeg/Jamfile index a628bc6391..8b935e5d35 100644 --- a/src/add-ons/media/plugins/ffmpeg/Jamfile +++ b/src/add-ons/media/plugins/ffmpeg/Jamfile @@ -32,6 +32,11 @@ Addon ffmpeg : libavcodec_$(TARGET_ARCH).a libavutil.a libswscale.a + + libvorbis_ffmpeg.a + libtheora_ffmpeg.a + libogg_ffmpeg.a + be libmedia.so libz.a @@ -102,4 +107,7 @@ HAIKU_FFMPEG_DEFINES = [ FDefines $(HAIKU_FFMPEG_DEFINES) ] ; SubInclude HAIKU_TOP src add-ons media plugins ffmpeg libavcodec ; SubInclude HAIKU_TOP src add-ons media plugins ffmpeg libavformat ; SubInclude HAIKU_TOP src add-ons media plugins ffmpeg libavutil ; +SubInclude HAIKU_TOP src add-ons media plugins ffmpeg libogg ; SubInclude HAIKU_TOP src add-ons media plugins ffmpeg libswscale ; +SubInclude HAIKU_TOP src add-ons media plugins ffmpeg libtheora ; +SubInclude HAIKU_TOP src add-ons media plugins ffmpeg libvorbis ; diff --git a/src/add-ons/media/plugins/ffmpeg/MuxerTable.cpp b/src/add-ons/media/plugins/ffmpeg/MuxerTable.cpp index ecbddcc270..0be7067868 100644 --- a/src/add-ons/media/plugins/ffmpeg/MuxerTable.cpp +++ b/src/add-ons/media/plugins/ffmpeg/MuxerTable.cpp @@ -57,20 +57,20 @@ const media_file_format gMuxerTable[] = { // TODO: This one rejects unknown codecs. We probably need to define // a media_format_family for it so that Encoders can announce their support // for it specifically. -// { -// media_file_format::B_WRITABLE -// | media_file_format::B_KNOWS_ENCODED_VIDEO -// | media_file_format::B_KNOWS_ENCODED_AUDIO, -// { 0 }, -// B_AVI_FORMAT_FAMILY, -// 100, -// { 0 }, -// "application/ogg", -// "Ogg (Xiph.Org Foundation)", -// "ogg", -// "ogg", -// { 0 } -// }, + { + media_file_format::B_WRITABLE + | media_file_format::B_KNOWS_ENCODED_VIDEO + | media_file_format::B_KNOWS_ENCODED_AUDIO, + { 0 }, + B_MISC_FORMAT_FAMILY, + 100, + { 0 }, + "application/ogg", + "Ogg (Xiph.Org Foundation)", + "ogg", + "ogg", + { 0 } + }, { media_file_format::B_WRITABLE | media_file_format::B_KNOWS_ENCODED_AUDIO, diff --git a/src/add-ons/media/plugins/ffmpeg/config.h b/src/add-ons/media/plugins/ffmpeg/config.h index 5e861fbb77..c975c4c495 100644 --- a/src/add-ons/media/plugins/ffmpeg/config.h +++ b/src/add-ons/media/plugins/ffmpeg/config.h @@ -196,8 +196,8 @@ #define CONFIG_LIBRTMP 0 #define CONFIG_LIBSCHROEDINGER 0 #define CONFIG_LIBSPEEX 0 -#define CONFIG_LIBTHEORA 0 -#define CONFIG_LIBVORBIS 0 +#define CONFIG_LIBTHEORA 1 +#define CONFIG_LIBVORBIS 1 #define CONFIG_LIBVPX 0 #define CONFIG_LIBX264 0 #define CONFIG_LIBXVID 0 @@ -585,8 +585,8 @@ #define CONFIG_LIBMP3LAME_ENCODER 0 #define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 #define CONFIG_LIBSCHROEDINGER_ENCODER 0 -#define CONFIG_LIBTHEORA_ENCODER 0 -#define CONFIG_LIBVORBIS_ENCODER 0 +#define CONFIG_LIBTHEORA_ENCODER 1 +#define CONFIG_LIBVORBIS_ENCODER 1 #define CONFIG_LIBVPX_ENCODER 0 #define CONFIG_LIBX264_ENCODER 0 #define CONFIG_LIBXVID_ENCODER 0 diff --git a/src/add-ons/media/plugins/ffmpeg/libavcodec/Jamfile b/src/add-ons/media/plugins/ffmpeg/libavcodec/Jamfile index 0568c5bdec..fc97c90d99 100644 --- a/src/add-ons/media/plugins/ffmpeg/libavcodec/Jamfile +++ b/src/add-ons/media/plugins/ffmpeg/libavcodec/Jamfile @@ -2,8 +2,12 @@ SubDir HAIKU_TOP src add-ons media plugins ffmpeg libavcodec ; SubDirHdrs [ FDirName $(SUBDIR) .. ] ; SubDirHdrs [ FDirName $(SUBDIR) $(TARGET_ARCH) ] ; -SubDirHdrs [ FDirName $(SUBDIR) ../libavutil ] ; -SubDirHdrs [ FDirName $(SUBDIR) ../libswscale ] ; +SubDirHdrs [ FDirName $(SUBDIR) .. libavutil ] ; +SubDirHdrs [ FDirName $(SUBDIR) .. libswscale ] ; +SubDirSysHdrs [ FDirName $(SUBDIR) .. libogg include ] ; +SubDirSysHdrs [ FDirName $(SUBDIR) .. libtheora include ] ; +SubDirSysHdrs [ FDirName $(SUBDIR) .. libvorbis include ] ; + UseLibraryHeaders zlib ; @@ -15,6 +19,7 @@ SubDirCcFlags $(HAIKU_FFMPEG_GCC_EXTRA_FLAGS) ; SubDirCcFlags $(HAIKU_FFMPEG_DEFINES) ; SubDirC++Flags $(HAIKU_FFMPEG_DEFINES) ; + StaticLibrary libavcodec.a : 4xm.c 8bps.c @@ -183,6 +188,8 @@ StaticLibrary libavcodec.a : kmvc.c lcldec.c # lclenc.c + libtheoraenc.c + libvorbis.c # ljpegenc.c loco.c lpc.c @@ -361,6 +368,12 @@ StaticLibrary libavcodec.a : zmbv.c ; +# GCC2 needs this in order to find codec.h in each of these directories +# respectively and to find the correct codec.h, we need to define this +# per individual file. +SourceHdrs libvorbis.c : [ FDirName $(SUBDIR) .. libvorbis include vorbis ] ; +SourceHdrs libtheoraenc.c : [ FDirName $(SUBDIR) .. libtheora include theora ] ; + SubInclude HAIKU_TOP src add-ons media plugins ffmpeg libavcodec $(TARGET_ARCH) ;