diff options
author | Eric Hameleers <alien@slackware.com> | 2010-05-29 15:18:57 +0000 |
---|---|---|
committer | Eric Hameleers <alien@slackware.com> | 2010-05-29 15:18:57 +0000 |
commit | 75c56d3f9f62a518211681a38e5d4781d147c3a2 (patch) | |
tree | e93d2868bc75c36369bec6dc0d2475bee01a4e3d /ffmpeg/build/ffmpeg-r23357_webm_fix.diff | |
parent | 9ff2dfd6cbe32353208356170d2f312c4fe1f8b6 (diff) | |
download | asb-75c56d3f9f62a518211681a38e5d4781d147c3a2.tar.gz asb-75c56d3f9f62a518211681a38e5d4781d147c3a2.tar.xz |
Initial revision
Diffstat (limited to 'ffmpeg/build/ffmpeg-r23357_webm_fix.diff')
-rw-r--r-- | ffmpeg/build/ffmpeg-r23357_webm_fix.diff | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/ffmpeg/build/ffmpeg-r23357_webm_fix.diff b/ffmpeg/build/ffmpeg-r23357_webm_fix.diff new file mode 100644 index 00000000..60542df3 --- /dev/null +++ b/ffmpeg/build/ffmpeg-r23357_webm_fix.diff @@ -0,0 +1,241 @@ +diff -uarN ffmpeg-r23357/configure ffmpeg-r23357.new/configure +--- ffmpeg-r23357/configure 2010-05-28 01:00:29.000000000 +0200 ++++ ffmpeg-r23357.new/configure 2010-05-28 14:13:45.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-r23357/libavcodec/Makefile ffmpeg-r23357.new/libavcodec/Makefile +--- ffmpeg-r23357/libavcodec/Makefile 2010-05-28 14:15:18.000000000 +0200 ++++ ffmpeg-r23357.new/libavcodec/Makefile 2010-05-28 14:12:41.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-r23357/libavcodec/allcodecs.c ffmpeg-r23357.new/libavcodec/allcodecs.c +--- ffmpeg-r23357/libavcodec/allcodecs.c 2010-05-28 14:15:18.000000000 +0200 ++++ ffmpeg-r23357.new/libavcodec/allcodecs.c 2010-05-28 14:12:41.000000000 +0200 +@@ -349,7 +349,7 @@ + REGISTER_DECODER (LIBSPEEX, libspeex); + REGISTER_ENCODER (LIBTHEORA, libtheora); + REGISTER_ENCODER (LIBVORBIS, libvorbis); +- REGISTER_DECODER (LIBVPX, libvpx); ++ REGISTER_ENCDEC (LIBVPX, libvpx); + REGISTER_ENCODER (LIBX264, libx264); + REGISTER_ENCODER (LIBXVID, libxvid); + +diff -uarN ffmpeg-r23357/libavcodec/libvpxdec.c ffmpeg-r23357.new/libavcodec/libvpxdec.c +--- ffmpeg-r23357/libavcodec/libvpxdec.c 2010-05-28 14:15:18.000000000 +0200 ++++ ffmpeg-r23357.new/libavcodec/libvpxdec.c 2010-05-28 14:13:10.000000000 +0200 +@@ -24,8 +24,8 @@ + */ + + #define VPX_CODEC_DISABLE_COMPAT 1 +-#include <vpx_decoder.h> +-#include <vp8dx.h> ++#include <vpx/vpx_decoder.h> ++#include <vpx/vp8dx.h> + + #include "avcodec.h" + +@@ -70,130 +70,6 @@ + + if (vpx_codec_decode(&ctx->decoder, avpkt->data, avpkt->size, NULL, 0) != + VPX_CODEC_OK) { +- const char *error = vpx_codec_error(&ctx->decoder); +- const char *detail = vpx_codec_error_detail(&ctx->decoder); +- +- av_log(avctx, AV_LOG_ERROR, "Failed to decode frame: %s\n", error); +- if (detail) +- av_log(avctx, AV_LOG_ERROR, " Additional information: %s\n", +- detail); +- return AVERROR_INVALIDDATA; +- } +- +- if ((img = vpx_codec_get_frame(&ctx->decoder, &iter))) { +- if (img->fmt != VPX_IMG_FMT_I420) { +- av_log(avctx, AV_LOG_ERROR, "Unsupported output colorspace (%d)\n", +- img->fmt); +- return AVERROR_INVALIDDATA; +- } +- +- if ((int) img->d_w != avctx->width || (int) img->d_h != avctx->height) { +- av_log(avctx, AV_LOG_INFO, "dimension change! %dx%d -> %dx%d\n", +- avctx->width, avctx->height, img->d_w, img->d_h); +- if (avcodec_check_dimensions(avctx, img->d_w, img->d_h)) +- return AVERROR_INVALIDDATA; +- avcodec_set_dimensions(avctx, img->d_w, img->d_h); +- } +- picture->data[0] = img->planes[0]; +- picture->data[1] = img->planes[1]; +- picture->data[2] = img->planes[2]; +- picture->data[3] = NULL; +- picture->linesize[0] = img->stride[0]; +- picture->linesize[1] = img->stride[1]; +- picture->linesize[2] = img->stride[2]; +- picture->linesize[3] = 0; +- *data_size = sizeof(AVPicture); +- } +- return avpkt->size; +-} +- +-static av_cold int vp8_free(AVCodecContext *avctx) +-{ +- VP8Context *ctx = avctx->priv_data; +- vpx_codec_destroy(&ctx->decoder); +- return 0; +-} +- +-AVCodec libvpx_decoder = { +- "libvpx", +- AVMEDIA_TYPE_VIDEO, +- CODEC_ID_VP8, +- sizeof(VP8Context), +- vp8_init, +- NULL, /* encode */ +- vp8_free, +- vp8_decode, +- 0, /* capabilities */ +- .long_name = NULL_IF_CONFIG_SMALL("libvpx VP8"), +-}; +-/* +- * Copyright (c) 2010, Google, Inc. +- * +- * This file is part of FFmpeg. +- * +- * FFmpeg is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2.1 of the License, or (at your option) any later version. +- * +- * FFmpeg is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with FFmpeg; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- */ +- +-/** +- * @file +- * VP8 decoder support via libvpx +- */ +- +-#define VPX_CODEC_DISABLE_COMPAT 1 +-#include <vpx/vpx_decoder.h> +-#include <vpx/vp8dx.h> +- +-#include "avcodec.h" +- +-typedef struct VP8DecoderContext { +- struct vpx_codec_ctx decoder; +-} VP8Context; +- +-static av_cold int vp8_init(AVCodecContext *avctx) +-{ +- VP8Context *ctx = avctx->priv_data; +- const struct vpx_codec_iface *iface = &vpx_codec_vp8_dx_algo; +- struct vpx_codec_dec_cfg deccfg = { +- /* token partitions+1 would be a decent choice */ +- .threads = FFMIN(avctx->thread_count, 16) +- }; +- +- av_log(avctx, AV_LOG_INFO, "%s\n", vpx_codec_version_str()); +- av_log(avctx, AV_LOG_VERBOSE, "%s\n", vpx_codec_build_config()); +- +- if (vpx_codec_dec_init(&ctx->decoder, iface, &deccfg, 0) != VPX_CODEC_OK) { +- const char *error = vpx_codec_error(&ctx->decoder); +- av_log(avctx, AV_LOG_ERROR, "Failed to initialize decoder: %s\n", +- error); +- return AVERROR(EINVAL); +- } +- +- avctx->pix_fmt = PIX_FMT_YUV420P; +- return 0; +-} +- +-static int vp8_decode(AVCodecContext *avctx, +- void *data, int *data_size, AVPacket *avpkt) +-{ +- VP8Context *ctx = avctx->priv_data; +- AVFrame *picture = data; +- const void *iter = NULL; +- struct vpx_image *img; +- +- if (vpx_codec_decode(&ctx->decoder, avpkt->data, avpkt->size, NULL, 0) != +- VPX_CODEC_OK) { + const char *error = vpx_codec_error(&ctx->decoder); + const char *detail = vpx_codec_error_detail(&ctx->decoder); + +diff -uarN ffmpeg-r23357/libavcodec/libvpxenc.c ffmpeg-r23357.new/libavcodec/libvpxenc.c +--- ffmpeg-r23357/libavcodec/libvpxenc.c 2010-05-28 14:15:18.000000000 +0200 ++++ ffmpeg-r23357.new/libavcodec/libvpxenc.c 2010-05-29 00:40:49.000000000 +0200 +@@ -66,9 +66,10 @@ + #ifndef HAVE_STDINT_H + # define HAVE_STDINT_H 1 + #endif ++#include <vpx/vpx_codec.h> + #define VPX_CODEC_DISABLE_COMPAT 1 +-#include <vpx_encoder.h> +-#include <vp8cx.h> ++#include <vpx/vpx_encoder.h> ++#include <vpx/vp8cx.h> + + /** + * Portion of #vpx_codec_cx_pkt_t from vpx_encoder.h. +diff -uarN ffmpeg-r23357/libavformat/matroskadec.c ffmpeg-r23357.new/libavformat/matroskadec.c +--- ffmpeg-r23357/libavformat/matroskadec.c 2010-05-28 01:00:29.000000000 +0200 ++++ ffmpeg-r23357.new/libavformat/matroskadec.c 2010-05-28 14:12:41.000000000 +0200 +@@ -1155,8 +1155,10 @@ + return AVERROR_PATCHWELCOME; + } + for (i = 0; i < FF_ARRAY_ELEMS(matroska_doctypes); i++) +- if (!strcmp(ebml.doctype, matroska_doctypes[i])) ++ if (!strcmp(ebml.doctype, matroska_doctypes[i])) { ++ av_metadata_set2(&s->metadata, "doctype", ebml.doctype, 0); + break; ++ } + if (i >= FF_ARRAY_ELEMS(matroska_doctypes)) { + av_log(s, AV_LOG_WARNING, "Unknown EBML doctype '%s'\n", ebml.doctype); + } +diff -uarN ffmpeg-r23357/libavformat/matroskaenc.c ffmpeg-r23357.new/libavformat/matroskaenc.c +--- ffmpeg-r23357/libavformat/matroskaenc.c 2010-05-28 14:15:18.000000000 +0200 ++++ ffmpeg-r23357.new/libavformat/matroskaenc.c 2010-05-28 14:12:41.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) |