diff -uarN ffmpeg-r23349.orig/Changelog ffmpeg-r23349/Changelog --- ffmpeg-r23349.orig/Changelog 2010-05-27 21:42:32.000000000 +0200 +++ ffmpeg-r23349/Changelog 2010-05-27 22:07:07.000000000 +0200 @@ -4,10 +4,10 @@ version : -- WebM support in Matroska demuxer +- WebM support in Matroska muxer and demuxer - low overhead Ogg muxing - MMS-TCP support -- VP8 decoding via libvpx +- VP8 decoding/encoding via libvpx - CODEC_CAP_EXPERIMENTAL added diff -uarN ffmpeg-r23349.orig/configure ffmpeg-r23349/configure --- ffmpeg-r23349.orig/configure 2010-05-27 21:42:32.000000000 +0200 +++ ffmpeg-r23349/configure 2010-05-27 22:13:29.000000000 +0200 @@ -1352,6 +1352,7 @@ libtheora_encoder_deps="libtheora" libvorbis_encoder_deps="libvorbis" libvpx_decoder_deps="libvpx" +libvpx_encoder_deps="libvpx" libx264_encoder_deps="libx264" libxvid_encoder_deps="libxvid" @@ -2621,7 +2622,8 @@ enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg -enabled libvpx && require2 libvpx "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_dec_init_ver" -lvpx +enabled libvpx && require2 libvpx "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_dec_init_ver" -lvpx && + require2 libvpx "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver" -lvpx enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm && { check_cpp_condition x264.h "X264_BUILD >= 90" || die "ERROR: libx264 version must be >= 0.90."; } diff -uarN ffmpeg-r23349.orig/libavcodec/Makefile ffmpeg-r23349/libavcodec/Makefile --- ffmpeg-r23349.orig/libavcodec/Makefile 2010-05-27 21:42:32.000000000 +0200 +++ ffmpeg-r23349/libavcodec/Makefile 2010-05-27 21:50:46.000000000 +0200 @@ -538,6 +538,7 @@ OBJS-$(CONFIG_LIBTHEORA_ENCODER) += libtheoraenc.o OBJS-$(CONFIG_LIBVORBIS_ENCODER) += libvorbis.o OBJS-$(CONFIG_LIBVPX_DECODER) += libvpxdec.o +OBJS-$(CONFIG_LIBVPX_ENCODER) += libvpxenc.o OBJS-$(CONFIG_LIBX264_ENCODER) += libx264.o OBJS-$(CONFIG_LIBXVID_ENCODER) += libxvidff.o libxvid_rc.o diff -uarN ffmpeg-r23349.orig/libavformat/matroskadec.c ffmpeg-r23349/libavformat/matroskadec.c --- ffmpeg-r23349.orig/libavformat/matroskadec.c 2010-05-27 21:42:32.000000000 +0200 +++ ffmpeg-r23349/libavformat/matroskadec.c 2010-05-27 22:05:06.000000000 +0200 @@ -825,10 +825,8 @@ } -/* - * Autodetecting... - */ -static int matroska_probe(AVProbeData *p) +static int ebml_probe(AVProbeData *p, const char probe_data[], const int probe +_data_size) { uint64_t total = 0; int len_mask = 0x80, size = 1, n = 1, i; @@ -868,6 +866,24 @@ return AVPROBE_SCORE_MAX/2; } +/* + * Autodetecting... + */ +#if CONFIG_MATROSKA_DEMUXER +static int matroska_probe(AVProbeData *p) +{ + static const char probe_data[] = "matroska"; + return ebml_probe(p, probe_data, sizeof(probe_data)); +} +#endif +#if CONFIG_WEBM_DEMUXER +static int webm_probe(AVProbeData *p) +{ + static const char probe_data[] = "webm"; + return ebml_probe(p, probe_data, sizeof(probe_data)); +} +#endif + static MatroskaTrack *matroska_find_track_by_num(MatroskaDemuxContext *matroska, int num) { diff -uarN ffmpeg-r23349.orig/libavformat/matroskaenc.c ffmpeg-r23349/libavformat/matroskaenc.c --- ffmpeg-r23349.orig/libavformat/matroskaenc.c 2010-05-27 21:42:32.000000000 +0200 +++ ffmpeg-r23349/libavformat/matroskaenc.c 2010-05-27 21:54:37.000000000 +0200 @@ -585,9 +585,17 @@ switch (codec->codec_type) { case AVMEDIA_TYPE_VIDEO: +#if CONFIG_WEBM_MUXER + if (codec->codec_id != CODEC_ID_VP8 && + !strcmp("webm", s->oformat->name)) { + av_log(s, AV_LOG_INFO, "WebM only supports VP8 video.\n"); + return -1; + } +#endif put_ebml_uint(pb, MATROSKA_ID_TRACKTYPE, MATROSKA_TRACK_TYPE_VIDEO); put_ebml_uint(pb, MATROSKA_ID_TRACKDEFAULTDURATION, av_q2d(codec->time_base)*1E9); +#if CONFIG_MATROSKA_MUXER if (!native_id && ff_codec_get_tag(codec_movvideo_tags, codec->codec_id) && (!ff_codec_get_tag(ff_codec_bmp_tags, codec->codec_id)