summaryrefslogtreecommitdiffstats
path: root/ffmpeg/build/ffmpeg_webm_fix.diff
diff options
context:
space:
mode:
author Eric Hameleers <alien@slackware.com>2010-05-28 23:23:32 +0000
committer Eric Hameleers <alien@slackware.com>2010-05-28 23:23:32 +0000
commit2afa2b8e16671431f9bcdcb30b06bf8b7e45d80b (patch)
treeca8693271ce081ecc38a4c693d0309bce27095cc /ffmpeg/build/ffmpeg_webm_fix.diff
parenta21dd53bdf28a0a2c0c979e1dbb6a9b51d97cbf9 (diff)
downloadasb-2afa2b8e16671431f9bcdcb30b06bf8b7e45d80b.tar.gz
asb-2afa2b8e16671431f9bcdcb30b06bf8b7e45d80b.tar.xz
Initial revision
Diffstat (limited to 'ffmpeg/build/ffmpeg_webm_fix.diff')
-rw-r--r--ffmpeg/build/ffmpeg_webm_fix.diff241
1 files changed, 241 insertions, 0 deletions
diff --git a/ffmpeg/build/ffmpeg_webm_fix.diff b/ffmpeg/build/ffmpeg_webm_fix.diff
new file mode 100644
index 00000000..60542df3
--- /dev/null
+++ b/ffmpeg/build/ffmpeg_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)