[FFmpeg-cvslog] r23549 - in branches/0.6: . Changelog doc/general.texi libavcodec/Makefile libavformat/Makefile libavformat/allformats.c libavformat/avformat.h libavformat/matroskaenc.c
siretart
subversion
Wed Jun 9 17:54:27 CEST 2010
Author: siretart
Date: Wed Jun 9 17:54:27 2010
New Revision: 23549
Log:
Add WebM muxer
Patch by James Zern <jzern at google>
backport r23474 by conrad
Modified:
branches/0.6/ (props changed)
branches/0.6/Changelog
branches/0.6/doc/general.texi
branches/0.6/libavcodec/Makefile
branches/0.6/libavformat/Makefile
branches/0.6/libavformat/allformats.c
branches/0.6/libavformat/avformat.h
branches/0.6/libavformat/matroskaenc.c
Modified: branches/0.6/Changelog
==============================================================================
--- branches/0.6/Changelog Wed Jun 9 11:19:36 2010 (r23548)
+++ branches/0.6/Changelog Wed Jun 9 17:54:27 2010 (r23549)
@@ -76,6 +76,7 @@ version 0.6:
- 35% faster VP3/Theora decoding
- faster AAC decoding
- faster H.264 decoding
+- WebM support in Matroska de/muxer
- low overhead Ogg muxing
- WebM support in Matroska demuxer
- VP8 de/encoding via libvpx
Modified: branches/0.6/doc/general.texi
==============================================================================
--- branches/0.6/doc/general.texi Wed Jun 9 11:19:36 2010 (r23548)
+++ branches/0.6/doc/general.texi Wed Jun 9 17:54:27 2010 (r23549)
@@ -234,7 +234,7 @@ library:
@item VC-1 test bitstream @tab X @tab X
@item WAV @tab X @tab X
@item WavPack @tab @tab X
- at item WebM @tab @tab X
+ at item WebM @tab X @tab X
@item Wing Commander III movie @tab @tab X
@tab Multimedia format used in Origin's Wing Commander III computer game.
@item Westwood Studios audio @tab @tab X
Modified: branches/0.6/libavcodec/Makefile
==============================================================================
--- branches/0.6/libavcodec/Makefile Wed Jun 9 11:19:36 2010 (r23548)
+++ branches/0.6/libavcodec/Makefile Wed Jun 9 17:54:27 2010 (r23549)
@@ -501,6 +501,8 @@ OBJS-$(CONFIG_OGG_DEMUXER) +
dirac.o mpeg12data.o
OBJS-$(CONFIG_OGG_MUXER) += xiph.o flacdec.o flacdata.o flac.o
OBJS-$(CONFIG_RTP_MUXER) += mpegvideo.o
+OBJS-$(CONFIG_WEBM_MUXER) += xiph.o mpeg4audio.o \
+ flacdec.o flacdata.o flac.o
# external codec libraries
OBJS-$(CONFIG_LIBDIRAC_DECODER) += libdiracdec.o
Modified: branches/0.6/libavformat/Makefile
==============================================================================
--- branches/0.6/libavformat/Makefile Wed Jun 9 11:19:36 2010 (r23548)
+++ branches/0.6/libavformat/Makefile Wed Jun 9 17:54:27 2010 (r23549)
@@ -255,6 +255,9 @@ OBJS-$(CONFIG_W64_DEMUXER)
OBJS-$(CONFIG_WAV_DEMUXER) += wav.o riff.o raw.o
OBJS-$(CONFIG_WAV_MUXER) += wav.o riff.o
OBJS-$(CONFIG_WC3_DEMUXER) += wc3movie.o
+OBJS-$(CONFIG_WEBM_MUXER) += matroskaenc.o matroska.o \
+ riff.o isom.o avc.o \
+ flacenc_header.o
OBJS-$(CONFIG_WSAUD_DEMUXER) += westwood.o
OBJS-$(CONFIG_WSVQA_DEMUXER) += westwood.o
OBJS-$(CONFIG_WV_DEMUXER) += wv.o apetag.o id3v1.o
Modified: branches/0.6/libavformat/allformats.c
==============================================================================
--- branches/0.6/libavformat/allformats.c Wed Jun 9 11:19:36 2010 (r23548)
+++ branches/0.6/libavformat/allformats.c Wed Jun 9 17:54:27 2010 (r23549)
@@ -203,6 +203,7 @@ void av_register_all(void)
REGISTER_DEMUXER (W64, w64);
REGISTER_MUXDEMUX (WAV, wav);
REGISTER_DEMUXER (WC3, wc3);
+ REGISTER_MUXER (WEBM, webm);
REGISTER_DEMUXER (WSAUD, wsaud);
REGISTER_DEMUXER (WSVQA, wsvqa);
REGISTER_DEMUXER (WV, wv);
Modified: branches/0.6/libavformat/avformat.h
==============================================================================
--- branches/0.6/libavformat/avformat.h Wed Jun 9 11:19:36 2010 (r23548)
+++ branches/0.6/libavformat/avformat.h Wed Jun 9 17:54:27 2010 (r23549)
@@ -23,7 +23,7 @@
#define LIBAVFORMAT_VERSION_MAJOR 52
#define LIBAVFORMAT_VERSION_MINOR 64
-#define LIBAVFORMAT_VERSION_MICRO 1
+#define LIBAVFORMAT_VERSION_MICRO 2
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
Modified: branches/0.6/libavformat/matroskaenc.c
==============================================================================
--- branches/0.6/libavformat/matroskaenc.c Wed Jun 9 11:19:36 2010 (r23548)
+++ branches/0.6/libavformat/matroskaenc.c Wed Jun 9 17:54:27 2010 (r23549)
@@ -65,7 +65,11 @@ typedef struct {
int write_dts;
} mkv_track;
+#define MODE_MATROSKAv2 0x01
+#define MODE_WEBM 0x02
+
typedef struct MatroskaMuxContext {
+ int mode;
ByteIOContext *dyn_bc;
ebml_master segment;
int64_t segment_offset;
@@ -563,6 +567,13 @@ static int mkv_write_tracks(AVFormatCont
}
}
+ if (mkv->mode == MODE_WEBM && !(codec->codec_id == CODEC_ID_VP8 ||
+ codec->codec_id == CODEC_ID_VORBIS)) {
+ av_log(s, AV_LOG_ERROR,
+ "Only VP8 video and Vorbis audio are supported for WebM.\n");
+ return AVERROR(EINVAL);
+ }
+
switch (codec->codec_type) {
case AVMEDIA_TYPE_VIDEO:
put_ebml_uint(pb, MATROSKA_ID_TRACKTYPE, MATROSKA_TRACK_TYPE_VIDEO);
@@ -684,6 +695,9 @@ static int mkv_write_header(AVFormatCont
AVMetadataTag *tag;
int ret;
+ if (!strcmp(s->oformat->name, "webm")) mkv->mode = MODE_WEBM;
+ else mkv->mode = MODE_MATROSKAv2;
+
mkv->md5_ctx = av_mallocz(av_md5_size);
av_md5_init(mkv->md5_ctx);
mkv->tracks = av_mallocz(s->nb_streams * sizeof(*mkv->tracks));
@@ -693,7 +707,7 @@ static int mkv_write_header(AVFormatCont
put_ebml_uint (pb, EBML_ID_EBMLREADVERSION , 1);
put_ebml_uint (pb, EBML_ID_EBMLMAXIDLENGTH , 4);
put_ebml_uint (pb, EBML_ID_EBMLMAXSIZELENGTH , 8);
- put_ebml_string (pb, EBML_ID_DOCTYPE , "matroska");
+ put_ebml_string (pb, EBML_ID_DOCTYPE , s->oformat->name);
put_ebml_uint (pb, EBML_ID_DOCTYPEVERSION , 2);
put_ebml_uint (pb, EBML_ID_DOCTYPEREADVERSION , 2);
end_ebml_master(pb, ebml_header);
@@ -736,8 +750,10 @@ static int mkv_write_header(AVFormatCont
ret = mkv_write_tracks(s);
if (ret < 0) return ret;
- ret = mkv_write_chapters(s);
- if (ret < 0) return ret;
+ if (mkv->mode != MODE_WEBM) {
+ ret = mkv_write_chapters(s);
+ if (ret < 0) return ret;
+ }
if (url_is_streamed(s->pb))
mkv_write_seekhead(pb, mkv->main_seekhead);
@@ -974,6 +990,7 @@ static int mkv_write_trailer(AVFormatCon
return 0;
}
+#if CONFIG_MATROSKA_MUXER
AVOutputFormat matroska_muxer = {
"matroska",
NULL_IF_CONFIG_SMALL("Matroska file format"),
@@ -989,7 +1006,25 @@ AVOutputFormat matroska_muxer = {
.codec_tag = (const AVCodecTag* const []){ff_codec_bmp_tags, ff_codec_wav_tags, 0},
.subtitle_codec = CODEC_ID_TEXT,
};
+#endif
+#if CONFIG_WEBM_MUXER
+AVOutputFormat webm_muxer = {
+ "webm",
+ NULL_IF_CONFIG_SMALL("WebM file format"),
+ "video/webm",
+ "webm",
+ sizeof(MatroskaMuxContext),
+ CODEC_ID_VORBIS,
+ CODEC_ID_VP8,
+ mkv_write_header,
+ mkv_write_packet,
+ mkv_write_trailer,
+ .flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS,
+};
+#endif
+
+#if CONFIG_MATROSKA_AUDIO_MUXER
AVOutputFormat matroska_audio_muxer = {
"matroska",
NULL_IF_CONFIG_SMALL("Matroska file format"),
@@ -1004,3 +1039,4 @@ AVOutputFormat matroska_audio_muxer = {
.flags = AVFMT_GLOBALHEADER,
.codec_tag = (const AVCodecTag* const []){ff_codec_wav_tags, 0},
};
+#endif
More information about the ffmpeg-cvslog
mailing list