xbmc-pvr: update internal FFMPEG

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2012-05-14 16:11:49 +02:00
parent 0ddf2008b6
commit 480b709270
8 changed files with 484603 additions and 1269 deletions

View File

@ -201,6 +201,9 @@ cd $PKG_BUILD
# Clean the generated files
find . -depth -type d -name "autom4te.cache" -exec rm -rf {} \;
# hack: make codec_names.sh executable
chmod +x lib/ffmpeg/libavcodec/codec_names.sh
./configure --host=$TARGET_NAME \
--build=$HOST_NAME \
--with-arch=$TARGET_ARCH \

View File

@ -0,0 +1,35 @@
From 45e41b9096869062a2113590f3158321d06dea8b Mon Sep 17 00:00:00 2001
From: elupus <elupus@xbmc.org>
Date: Tue, 17 Apr 2012 01:13:15 +0200
Subject: [PATCH] fixed: dvd still frames ended up in internal lavf buffer
This is very hackish, but it's the old solution we had for dvd
still frames. The problem is that the demuxer asks for probing
of the codec in the mpeg stream. This causes lavf to read the
whole menu structure into internal buffers. After which, it
won't read from input stream anymore and no events triggers.
The only proper fix to avoid this is to allow this situation
in our navigator. This needs further work so that we can
process HOP/ACTIVATION events in libdvdnav without advancing
stream.
---
lib/ffmpeg/libavformat/utils.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/ffmpeg/libavformat/utils.c b/lib/ffmpeg/libavformat/utils.c
index 4729a40..63f89dd 100644
--- a/lib/ffmpeg/libavformat/utils.c
+++ b/lib/ffmpeg/libavformat/utils.c
@@ -833,7 +833,7 @@ int av_read_packet(AVFormatContext *s, AVPacket *pkt)
if(end || av_log2(pd->buf_size) != av_log2(pd->buf_size - pkt->size)){
int score= set_codec_from_probe_data(s, st, pd);
- if( (st->codec->codec_id != CODEC_ID_NONE && score > AVPROBE_SCORE_MAX/4)
+ if( (st->codec->codec_id != CODEC_ID_NONE && score > AVPROBE_SCORE_MAX/4-1)
|| end){
pd->buf_size=0;
av_freep(&pd->buf);
--
1.7.10

View File

@ -0,0 +1,813 @@
diff -Naur xbmc-11.0.1/lib/ffmpeg/configure xbmc-11.0.1.patch/lib/ffmpeg/configure
--- xbmc-11.0.1/lib/ffmpeg/configure 2012-05-12 21:45:47.005596234 +0200
+++ xbmc-11.0.1.patch/lib/ffmpeg/configure 2012-05-12 21:46:03.902936436 +0200
@@ -113,6 +113,7 @@
--enable-vdpau enable VDPAU code [autodetect]
--disable-dxva2 disable DXVA2 code
--disable-vda disable VDA code
+ --disable-xvba disable XVBA code
--enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
--enable-hardcoded-tables use hardcoded tables instead of runtime generation
--disable-safe-bitstream-reader
@@ -1084,6 +1085,7 @@
vaapi
vda
vdpau
+ xvba
version3
x11grab
zlib
@@ -1423,6 +1425,7 @@
h264_vaapi_hwaccel_select="vaapi h264_decoder"
h264_vda_hwaccel_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
h264_vda_hwaccel_select="vda h264_decoder"
+h264_xvba_hwaccel_select="xvba"
h264_vdpau_decoder_select="vdpau h264_decoder"
imc_decoder_select="fft mdct sinewin"
jpegls_decoder_select="golomb"
@@ -1459,6 +1462,7 @@
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
mpeg4_encoder_select="h263_encoder"
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
+mpeg2_xvba_hwaccel_select="xvba mpeg2video_decoder"
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
msmpeg4_crystalhd_decoder_select="crystalhd"
msmpeg4v1_decoder_select="h263_decoder"
@@ -1501,6 +1505,7 @@
vc1_dxva2_hwaccel_deps="dxva2api_h"
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
+vc1_xvba_hwaccel_select="xvba vc1_decoder"
vc1_vdpau_decoder_select="vdpau vc1_decoder"
vc1image_decoder_select="vc1_decoder"
vorbis_decoder_select="mdct"
@@ -1525,6 +1530,7 @@
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
wmv3image_decoder_select="wmv3_decoder"
+wmv3_xvba_hwaccel_select="vc1_xvba_hwaccel"
zlib_decoder_select="zlib"
zlib_encoder_select="zlib"
zmbv_decoder_select="zlib"
@@ -1533,6 +1539,7 @@
crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
vaapi_deps="va_va_h"
vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
+xvba_deps="amd_amdxvba_h"
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
# parsers
@@ -3062,6 +3069,7 @@
check_header termios.h
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
+check_header amd/amdxvba.h
check_cpp_condition vdpau/vdpau.h "defined(VDP_DECODER_PROFILE_MPEG4_PART2_SP)" && enable vdpau_mpeg4_support
check_header X11/extensions/XvMClib.h
diff -Naur xbmc-11.0.1/lib/ffmpeg/libavcodec/allcodecs.c xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/allcodecs.c
--- xbmc-11.0.1/lib/ffmpeg/libavcodec/allcodecs.c 2012-05-12 21:45:47.257601308 +0200
+++ xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/allcodecs.c 2012-05-12 21:46:03.905936496 +0200
@@ -59,14 +59,18 @@
REGISTER_HWACCEL (H264_VAAPI, h264_vaapi);
REGISTER_HWACCEL (H264_VDA, h264_vda);
REGISTER_HWACCEL (MPEG1_VDPAU, mpeg1_vdpau);
+ REGISTER_HWACCEL (H264_XVBA, h264_xvba);
REGISTER_HWACCEL (MPEG2_DXVA2, mpeg2_dxva2);
REGISTER_HWACCEL (MPEG2_VAAPI, mpeg2_vaapi);
REGISTER_HWACCEL (MPEG2_VDPAU, mpeg2_vdpau);
REGISTER_HWACCEL (MPEG4_VAAPI, mpeg4_vaapi);
+ REGISTER_HWACCEL (MPEG2_XVBA, mpeg2_xvba);
REGISTER_HWACCEL (VC1_DXVA2, vc1_dxva2);
REGISTER_HWACCEL (VC1_VAAPI, vc1_vaapi);
+ REGISTER_HWACCEL (VC1_XVBA, vc1_xvba);
REGISTER_HWACCEL (WMV3_DXVA2, wmv3_dxva2);
REGISTER_HWACCEL (WMV3_VAAPI, wmv3_vaapi);
+ REGISTER_HWACCEL (WMV3_XVBA, wmv3_xvba);
/* video codecs */
REGISTER_ENCODER (A64MULTI, a64multi);
diff -Naur xbmc-11.0.1/lib/ffmpeg/libavcodec/h264.c xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/h264.c
--- xbmc-11.0.1/lib/ffmpeg/libavcodec/h264.c 2012-05-12 21:45:47.757611376 +0200
+++ xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/h264.c 2012-05-12 21:46:03.908936558 +0200
@@ -60,6 +60,7 @@
PIX_FMT_DXVA2_VLD,
PIX_FMT_VAAPI_VLD,
PIX_FMT_VDA_VLD,
+ PIX_FMT_XVBA_VLD,
PIX_FMT_YUVJ420P,
PIX_FMT_NONE
};
diff -Naur xbmc-11.0.1/lib/ffmpeg/libavcodec/Makefile xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/Makefile
--- xbmc-11.0.1/lib/ffmpeg/libavcodec/Makefile 2012-05-12 21:45:47.927614798 +0200
+++ xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/Makefile 2012-05-12 21:46:03.904936476 +0200
@@ -3,7 +3,7 @@
NAME = avcodec
FFLIBS = avutil
-HEADERS = avcodec.h avfft.h dxva2.h opt.h vaapi.h vda.h vdpau.h version.h xvmc.h
+HEADERS = avcodec.h avfft.h dxva2.h opt.h vaapi.h vda.h vdpau.h version.h xvmc.h xvba.h
OBJS = allcodecs.o \
audioconvert.o \
@@ -51,6 +51,7 @@
OBJS-$(CONFIG_VAAPI) += vaapi.o
OBJS-$(CONFIG_VDA) += vda.o
OBJS-$(CONFIG_VDPAU) += vdpau.o
+OBJS-$(CONFIG_XVBA) += xvba.o
# decoders/encoders/hardware accelerators
OBJS-$(CONFIG_A64MULTI_ENCODER) += a64multienc.o elbg.o
@@ -201,6 +202,7 @@
OBJS-$(CONFIG_H264_DXVA2_HWACCEL) += dxva2_h264.o
OBJS-$(CONFIG_H264_VAAPI_HWACCEL) += vaapi_h264.o
OBJS-$(CONFIG_H264_VDA_HWACCEL) += vda_h264.o
+OBJS-$(CONFIG_H264_XVBA_HWACCEL) += xvba_h264.o
OBJS-$(CONFIG_HUFFYUV_DECODER) += huffyuv.o
OBJS-$(CONFIG_HUFFYUV_ENCODER) += huffyuv.o
OBJS-$(CONFIG_IDCIN_DECODER) += idcinvideo.o
@@ -284,6 +286,7 @@
mpegvideo.o error_resilience.o
OBJS-$(CONFIG_MPEG2_DXVA2_HWACCEL) += dxva2_mpeg2.o
OBJS-$(CONFIG_MPEG2_VAAPI_HWACCEL) += vaapi_mpeg2.o
+OBJS-$(CONFIG_MPEG2_XVBA_HWACCEL) += xvba_mpeg2.o
OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12.o mpeg12data.o \
mpegvideo.o error_resilience.o
OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpegvideo_enc.o \
@@ -431,6 +434,7 @@
intrax8.o intrax8dsp.o
OBJS-$(CONFIG_VC1_DXVA2_HWACCEL) += dxva2_vc1.o
OBJS-$(CONFIG_VC1_VAAPI_HWACCEL) += vaapi_vc1.o
+OBJS-$(CONFIG_VC1_XVBA_HWACCEL) += xvba_vc1.o
OBJS-$(CONFIG_VCR1_DECODER) += vcr1.o
OBJS-$(CONFIG_VCR1_ENCODER) += vcr1.o
OBJS-$(CONFIG_VMDAUDIO_DECODER) += vmdav.o
@@ -732,6 +736,7 @@
SKIPHEADERS-$(CONFIG_LIBSCHROEDINGER) += libschroedinger.h
SKIPHEADERS-$(CONFIG_VAAPI) += vaapi_internal.h
SKIPHEADERS-$(CONFIG_VDA) += vda_internal.h
+SKIPHEADERS-$(CONFIG_XVBA) += xvba_internal.h
SKIPHEADERS-$(CONFIG_VDPAU) += vdpau.h
SKIPHEADERS-$(CONFIG_XVMC) += xvmc.h
SKIPHEADERS-$(HAVE_W32THREADS) += w32pthreads.h
diff -Naur xbmc-11.0.1/lib/ffmpeg/libavcodec/mpegvideo.c xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/mpegvideo.c
--- xbmc-11.0.1/lib/ffmpeg/libavcodec/mpegvideo.c 2012-05-12 21:45:48.027616812 +0200
+++ xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/mpegvideo.c 2012-05-12 21:46:03.910936598 +0200
@@ -136,6 +136,7 @@
PIX_FMT_DXVA2_VLD,
PIX_FMT_VAAPI_VLD,
PIX_FMT_VDA_VLD,
+ PIX_FMT_XVBA_VLD,
PIX_FMT_YUV420P,
PIX_FMT_NONE
};
diff -Naur xbmc-11.0.1/lib/ffmpeg/libavcodec/xvba.c xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvba.c
--- xbmc-11.0.1/lib/ffmpeg/libavcodec/xvba.c 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvba.c 2012-05-12 21:46:03.918936758 +0200
@@ -0,0 +1,66 @@
+/*
+ * HW decode acceleration for MPEG-2, H.264 and VC-1
+ *
+ * Copyright (C) 2005-2011 Team XBMC
+ *
+ * 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
+ */
+
+
+/**
+ * \addtogroup XVBA_Decoding
+ *
+ * @{
+ */
+
+#include <stdint.h>
+#include "xvba.h"
+#include "xvba_internal.h"
+#include "avcodec.h"
+
+int ff_xvba_translate_profile(int profile) {
+
+ if (profile == 66)
+ return 1;
+ else if (profile == 77)
+ return 2;
+ else if (profile == 100)
+ return 3;
+ else if (profile == 0)
+ return 4;
+ else if (profile == 1)
+ return 5;
+ else if (profile == 3)
+ return 6;
+ else
+ return -1;
+}
+
+void ff_xvba_add_slice_data(struct xvba_render_state *render, const uint8_t *buffer, uint32_t size) {
+
+ render->buffers = av_fast_realloc(
+ render->buffers,
+ &render->buffers_alllocated,
+ sizeof(struct xvba_bitstream_buffers)*(render->num_slices + 1)
+ );
+
+ render->buffers[render->num_slices].buffer = buffer;
+ render->buffers[render->num_slices].size = size;
+
+ render->num_slices++;
+}
+
diff -Naur xbmc-11.0.1/lib/ffmpeg/libavcodec/xvba.h xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvba.h
--- xbmc-11.0.1/lib/ffmpeg/libavcodec/xvba.h 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvba.h 2012-05-12 21:46:03.918936758 +0200
@@ -0,0 +1,71 @@
+/*
+ * HW decode acceleration for MPEG-2, H.264 and VC-1
+ *
+ * Copyright (C) 2005-2011 Team XBMC
+ *
+ * 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
+ */
+
+#ifndef AVCODEC_XVBA_H
+#define AVCODEC_XVBA_H
+
+#include <stdint.h>
+#include <X11/Xlib.h>
+#include <amd/amdxvba.h>
+
+
+/**
+ * \defgroup XVBA_Decoding VA API Decoding
+ * \ingroup Decoder
+ * @{
+ */
+
+/** \brief The videoSurface is used for rendering. */
+#define FF_XVBA_STATE_USED_FOR_RENDER 1
+
+/**
+ * \brief The videoSurface is needed for reference/prediction.
+ * The codec manipulates this.
+ */
+#define FF_XVBA_STATE_USED_FOR_REFERENCE 2
+
+/**
+ * \brief The videoSurface holds a decoded frame.
+ * The codec manipulates this.
+ */
+#define FF_XVBA_STATE_DECODED 4
+
+/* @} */
+
+struct xvba_bitstream_buffers
+{
+ const void *buffer;
+ unsigned int size;
+};
+
+struct xvba_render_state {
+
+ int state; ///< Holds FF_XVBA_STATE_* values.
+ void *surface;
+ XVBAPictureDescriptor *picture_descriptor;
+ XVBAQuantMatrixAvc *iq_matrix;
+ int num_slices;
+ struct xvba_bitstream_buffers *buffers;
+ uint32_t buffers_alllocated;
+};
+
+#endif /* AVCODEC_XVBA_H */
diff -Naur xbmc-11.0.1/lib/ffmpeg/libavcodec/xvba_h264.c xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvba_h264.c
--- xbmc-11.0.1/lib/ffmpeg/libavcodec/xvba_h264.c 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvba_h264.c 2012-05-12 21:46:03.919936778 +0200
@@ -0,0 +1,180 @@
+/*
+ * H.264 HW decode acceleration through XVBA
+ *
+ * Copyright (C) 2005-2011 Team XBMC
+ *
+ * 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
+ */
+
+#include "xvba.h"
+#include "xvba_internal.h"
+#include "h264.h"
+#include <assert.h>
+
+/** @file
+ * This file implements the glue code between FFmpeg's and XvBA API's
+ * structures for H.264 decoding.
+ */
+
+
+/** Initialize and start decoding a frame with XVBA. */
+static int start_frame(AVCodecContext *avctx,
+ av_unused const uint8_t *buffer,
+ av_unused uint32_t size)
+{
+ H264Context * const h = avctx->priv_data;
+ MpegEncContext * const s = &h->s;
+ struct xvba_render_state *render;
+ XVBAPictureDescriptor *pic_descriptor;
+ int i;
+
+ render = (struct xvba_render_state *)s->current_picture_ptr->f.data[0];
+ assert(render);
+
+ if (render->picture_descriptor == 0)
+ return -1;
+
+ pic_descriptor = render->picture_descriptor;
+
+ for (i = 0; i < 2; ++i) {
+ int foc = s->current_picture_ptr->field_poc[i];
+ if (foc == INT_MAX)
+ foc = 0;
+ pic_descriptor->avc_curr_field_order_cnt_list[i] = foc;
+ }
+
+ pic_descriptor->avc_frame_num = h->frame_num;
+
+ render->num_slices = 0;
+
+ return 0;
+}
+
+/** End a hardware decoding based frame. */
+static int end_frame(AVCodecContext *avctx)
+{
+ H264Context * const h = avctx->priv_data;
+ MpegEncContext * const s = &h->s;
+ struct xvba_render_state *render;
+ XVBAPictureDescriptor *pic_descriptor;
+ XVBAQuantMatrixAvc *iq_matrix;
+
+ render = (struct xvba_render_state *)s->current_picture_ptr->f.data[0];
+ assert(render);
+
+ if (render->picture_descriptor == 0 || render->iq_matrix == 0)
+ return -1;
+
+ pic_descriptor = render->picture_descriptor;
+ iq_matrix = render->iq_matrix;
+
+ av_dlog(avctx, "end_frame()\n");
+
+ /* Fill in Picture Parameters*/
+ pic_descriptor->profile = ff_xvba_translate_profile(avctx->profile);
+ pic_descriptor->level = avctx->level;
+ pic_descriptor->width_in_mb = s->mb_width;
+ pic_descriptor->height_in_mb = s->mb_height;
+ pic_descriptor->picture_structure = s->picture_structure;
+ pic_descriptor->chroma_format = s->chroma_format ? s->chroma_format : 1;
+ pic_descriptor->avc_intra_flag = (h->slice_type == FF_I_TYPE) ? 1 : 0;
+ pic_descriptor->avc_reference = (s->current_picture_ptr->f.reference & 3) ? 1 : 0;
+
+ pic_descriptor->avc_bit_depth_luma_minus8 = h->sps.bit_depth_luma - 8;
+ pic_descriptor->avc_bit_depth_chroma_minus8 = h->sps.bit_depth_chroma - 8;
+ pic_descriptor->avc_log2_max_frame_num_minus4 = h->sps.log2_max_frame_num -4;
+ pic_descriptor->avc_pic_order_cnt_type = h->sps.poc_type;
+ pic_descriptor->avc_log2_max_pic_order_cnt_lsb_minus4 = h->sps.log2_max_poc_lsb - 4;
+ pic_descriptor->avc_num_ref_frames = h->sps.ref_frame_count;
+ pic_descriptor->avc_reserved_8bit = 0;
+
+ pic_descriptor->avc_num_slice_groups_minus1 = h->pps.slice_group_count - 1;
+ pic_descriptor->avc_num_ref_idx_l0_active_minus1 = h->pps.ref_count[0] - 1;
+ pic_descriptor->avc_num_ref_idx_l1_active_minus1 = h->pps.ref_count[1] - 1;
+
+ pic_descriptor->avc_pic_init_qp_minus26 = h->pps.init_qp - 26;
+ pic_descriptor->avc_pic_init_qs_minus26 = h->pps.init_qs - 26;
+ pic_descriptor->avc_chroma_qp_index_offset = h->pps.chroma_qp_index_offset[0];
+ pic_descriptor->avc_second_chroma_qp_index_offset = h->pps.chroma_qp_index_offset[1];
+ pic_descriptor->avc_slice_group_change_rate_minus1 = 0; // not implemented in ffmpeg
+ pic_descriptor->avc_reserved_16bit = 0; // must be 0
+ memset(pic_descriptor->avc_field_order_cnt_list,0,sizeof(pic_descriptor->avc_field_order_cnt_list)); // must be 0
+ memset(pic_descriptor->avc_slice_group_map,0,sizeof(pic_descriptor->avc_slice_group_map)); // must be 0
+
+ // sps
+ pic_descriptor->sps_info.avc.delta_pic_always_zero_flag = h->sps.delta_pic_order_always_zero_flag;
+ pic_descriptor->sps_info.avc.direct_8x8_inference_flag = h->sps.direct_8x8_inference_flag;
+ pic_descriptor->sps_info.avc.frame_mbs_only_flag = h->sps.frame_mbs_only_flag;
+ pic_descriptor->sps_info.avc.gaps_in_frame_num_value_allowed_flag = h->sps.gaps_in_frame_num_allowed_flag;
+ pic_descriptor->sps_info.avc.mb_adaptive_frame_field_flag = h->sps.mb_aff;
+ pic_descriptor->sps_info.avc.residual_colour_transform_flag = h->sps.residual_color_transform_flag;
+ pic_descriptor->sps_info.avc.xvba_avc_sps_reserved = 0;
+
+ // pps
+ pic_descriptor->pps_info.avc.entropy_coding_mode_flag = h->pps.cabac;
+ pic_descriptor->pps_info.avc.pic_order_present_flag = h->pps.pic_order_present;
+ pic_descriptor->pps_info.avc.weighted_pred_flag = h->pps.weighted_pred;
+ pic_descriptor->pps_info.avc.weighted_bipred_idc = h->pps.weighted_bipred_idc;
+ pic_descriptor->pps_info.avc.deblocking_filter_control_present_flag = h->pps.deblocking_filter_parameters_present;
+ pic_descriptor->pps_info.avc.constrained_intra_pred_flag = h->pps.constrained_intra_pred;
+ pic_descriptor->pps_info.avc.redundant_pic_cnt_present_flag = h->pps.redundant_pic_cnt_present;
+ pic_descriptor->pps_info.avc.transform_8x8_mode_flag = h->pps.transform_8x8_mode;
+ pic_descriptor->pps_info.avc.xvba_avc_pps_reserved = 0; // must be 0
+
+ memcpy(iq_matrix->bScalingLists4x4, h->pps.scaling_matrix4, sizeof(iq_matrix->bScalingLists4x4));
+ memcpy(iq_matrix->bScalingLists8x8, h->pps.scaling_matrix8, sizeof(iq_matrix->bScalingLists8x8));
+
+ // Wait for an I-frame before start decoding. Workaround for ATI UVD and UVD+ GPUs
+ if (!h->got_first_iframe) {
+ if (h->slice_type != FF_I_TYPE && h->slice_type != FF_SI_TYPE)
+ return -1;
+ h->got_first_iframe = 1;
+ }
+
+ ff_draw_horiz_band(s, 0, s->avctx->height);
+
+ return 0;
+}
+
+/** Decode the given H.264 slice with XVBA. */
+static int decode_slice(AVCodecContext *avctx,
+ const uint8_t *buffer,
+ uint32_t size)
+{
+ H264Context * const h = avctx->priv_data;
+ MpegEncContext * const s = &h->s;
+ struct xvba_render_state *render;
+
+ render = (struct xvba_render_state *)s->current_picture_ptr->f.data[0];
+ assert(render);
+
+ ff_xvba_add_slice_data(render, buffer, size);
+
+ return 0;
+}
+
+AVHWAccel ff_h264_xvba_hwaccel = {
+ .name = "h264_xvba",
+ .type = AVMEDIA_TYPE_VIDEO,
+ .id = CODEC_ID_H264,
+ .pix_fmt = PIX_FMT_XVBA_VLD,
+ .capabilities = 0,
+ .start_frame = start_frame,
+ .end_frame = end_frame,
+ .decode_slice = decode_slice,
+ .priv_data_size = 0,
+};
diff -Naur xbmc-11.0.1/lib/ffmpeg/libavcodec/xvba_internal.h xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvba_internal.h
--- xbmc-11.0.1/lib/ffmpeg/libavcodec/xvba_internal.h 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvba_internal.h 2012-05-12 21:46:03.920936798 +0200
@@ -0,0 +1,24 @@
+/*
+ * HW decode acceleration for MPEG-2, H.264 and VC-1
+ *
+ * Copyright (C) 2005-2011 Team XBMC
+ *
+ * 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
+ */
+
+int ff_xvba_translate_profile(int profile);
+void ff_xvba_add_slice_data(struct xvba_render_state *render, const uint8_t *buffer, uint32_t size);
diff -Naur xbmc-11.0.1/lib/ffmpeg/libavcodec/xvba_mpeg2.c xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvba_mpeg2.c
--- xbmc-11.0.1/lib/ffmpeg/libavcodec/xvba_mpeg2.c 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvba_mpeg2.c 2012-05-12 21:46:03.920936798 +0200
@@ -0,0 +1,52 @@
+/*
+ * MPEG-2 HW decode acceleration through XVBA
+ *
+ * Copyright (C) 2005-2011 Team XBMC
+ *
+ * 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
+ */
+
+#include "dsputil.h"
+
+static int start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
+{
+ struct MpegEncContext * const s = avctx->priv_data;
+ return 0;
+}
+
+static int end_frame(AVCodecContext *avctx)
+{
+ return 0;
+}
+
+static int decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
+{
+ struct MpegEncContext * const s = avctx->priv_data;
+ return 0;
+}
+
+AVHWAccel ff_mpeg2_xvba_hwaccel = {
+ .name = "mpeg2_xvba",
+ .type = AVMEDIA_TYPE_VIDEO,
+ .id = CODEC_ID_MPEG2VIDEO,
+ .pix_fmt = PIX_FMT_XVBA_VLD,
+ .capabilities = 0,
+ .start_frame = start_frame,
+ .end_frame = end_frame,
+ .decode_slice = decode_slice,
+ .priv_data_size = 0,
+};
diff -Naur xbmc-11.0.1/lib/ffmpeg/libavcodec/xvba_vc1.c xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvba_vc1.c
--- xbmc-11.0.1/lib/ffmpeg/libavcodec/xvba_vc1.c 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvba_vc1.c 2012-05-12 21:46:03.921936819 +0200
@@ -0,0 +1,194 @@
+/*
+ * VC-1 HW decode acceleration through XVBA
+ *
+ * Copyright (C) 2005-2011 Team XBMC
+ *
+ * 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
+ */
+
+#include "xvba.h"
+#include "xvba_internal.h"
+#include "vc1.h"
+#include "vc1data.h"
+#include <assert.h>
+
+
+/** @file
+ * Implement structures of ffmpeg <-> XvBA
+ */
+
+/* Initialize and start decoding a frame with XvBA */
+static int start_frame(AVCodecContext *avctx,
+ av_unused const uint8_t *buffer,
+ av_unused uint32_t size)
+{
+ VC1Context * const v = avctx->priv_data;
+ MpegEncContext * const s = &v->s;
+ struct xvba_render_state *render;
+
+ render = (struct xvba_render_state *)s->current_picture_ptr->f.data[0];
+ assert(render);
+
+ render->num_slices = 0;
+ return 0;
+}
+
+/* End a hardware decoding based frame */
+static int end_frame(AVCodecContext *avctx)
+{
+ VC1Context* const v = avctx->priv_data;
+ MpegEncContext* const s = &v->s;
+ struct xvba_render_state *render, *last, *next;
+ XVBAPictureDescriptor *pic_descriptor;
+
+ render = (struct xvba_render_state *)s->current_picture_ptr->f.data[0];
+ assert(render);
+
+ if (render->picture_descriptor == 0)
+ return -1;
+
+ pic_descriptor = render->picture_descriptor;
+
+ av_dlog(avctx, "xvba_vc1_end_frame()\n");
+
+ memset(pic_descriptor, 0, sizeof(*pic_descriptor));
+
+ /* Fill in Parameters - for reference see AMD sdk documentation */
+ pic_descriptor->profile = ff_xvba_translate_profile(v->profile);
+ pic_descriptor->level = v->level;
+ //done like in va-driver and vaapi
+ if (v->profile == PROFILE_ADVANCED) {
+ pic_descriptor->width_in_mb = s->avctx->coded_width;
+ pic_descriptor->height_in_mb = s->avctx->coded_height;
+ } else {
+ pic_descriptor->width_in_mb = s->mb_width;
+ pic_descriptor->height_in_mb = s->mb_height;
+ }
+ pic_descriptor->picture_structure = s->picture_structure;
+ // xvba-video set this to 1 only 4:2:0 supported
+ // doc says: if not set, choose 1 - we try this
+ pic_descriptor->chroma_format = 1;
+ pic_descriptor->avc_intra_flag = s->pict_type == FF_I_TYPE || v->bi_type == 1;
+ pic_descriptor->avc_reference = (s->current_picture_ptr->f.reference & 3) ? 1 : 0;
+
+ // VC-1 explicit parameters see page 30 of sdk
+ // sps_info
+ pic_descriptor->sps_info.vc1.postprocflag = v->postprocflag;
+
+ // done as in vaapi
+ pic_descriptor->sps_info.vc1.pulldown = v->broadcast;
+ pic_descriptor->sps_info.vc1.interlace = v->interlace;
+ pic_descriptor->sps_info.vc1.tfcntrflag = v->tfcntrflag;
+ pic_descriptor->sps_info.vc1.finterpflag = v->finterpflag;
+ pic_descriptor->sps_info.vc1.reserved = 1;
+ // eventually check if this makes sense together with interlace
+ pic_descriptor->sps_info.vc1.psf = v->psf;
+ // what about if it is a frame (page 31)
+ // looked at xvba-driver
+ pic_descriptor->sps_info.vc1.second_field = !s->first_field;
+ pic_descriptor->sps_info.vc1.xvba_vc1_sps_reserved = 0;
+
+ // VC-1 explicit parameters see page 30 of sdk
+ // pps_info
+ pic_descriptor->pps_info.vc1.panscan_flag = v->panscanflag;
+ pic_descriptor->pps_info.vc1.refdist_flag = v->refdist_flag;
+ pic_descriptor->pps_info.vc1.loopfilter = s->loop_filter;
+ pic_descriptor->pps_info.vc1.fastuvmc = v->fastuvmc;
+ pic_descriptor->pps_info.vc1.extended_mv = v->extended_mv;
+ pic_descriptor->pps_info.vc1.dquant = v->dquant;
+ pic_descriptor->pps_info.vc1.vstransform = v->vstransform;
+ pic_descriptor->pps_info.vc1.overlap = v->overlap;
+ pic_descriptor->pps_info.vc1.quantizer = v->quantizer_mode;
+ pic_descriptor->pps_info.vc1.extended_dmv = v->extended_dmv;
+ pic_descriptor->pps_info.vc1.maxbframes = s->avctx->max_b_frames;
+ pic_descriptor->pps_info.vc1.rangered = (pic_descriptor->profile == PROFILE_SIMPLE) ? 0 : v->rangered;
+ pic_descriptor->pps_info.vc1.syncmarker = (pic_descriptor->profile == PROFILE_SIMPLE) ? 0 : s->resync_marker;
+ pic_descriptor->pps_info.vc1.multires = v->multires;
+ pic_descriptor->pps_info.vc1.reserved = 1;
+ pic_descriptor->pps_info.vc1.range_mapy_flag = v->range_mapy_flag;
+ pic_descriptor->pps_info.vc1.range_mapy = v->range_mapy;
+ pic_descriptor->pps_info.vc1.range_mapuv_flag = v->range_mapuv_flag;
+ pic_descriptor->pps_info.vc1.range_mapuv = v->range_mapuv;
+ pic_descriptor->pps_info.vc1.xvba_vc1_pps_reserved = 0;
+
+ pic_descriptor->past_surface = 0;
+ pic_descriptor->future_surface = 0;
+ switch (s->pict_type) {
+ case FF_B_TYPE:
+ next = (struct xvba_render_state *)s->next_picture.f.data[0];
+ assert(next);
+ if (next)
+ pic_descriptor->past_surface = next->surface;
+ // fall-through
+ case FF_P_TYPE:
+ last = (struct xvba_render_state *)s->last_picture.f.data[0];
+ assert(last);
+ if (last)
+ pic_descriptor->future_surface = last->surface;
+ break;
+ }
+
+ ff_draw_horiz_band(s, 0, s->avctx->height);
+
+ return 0;
+}
+
+static int decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
+{
+ VC1Context* const v = avctx->priv_data;
+ MpegEncContext* const s = &v->s;
+ struct xvba_render_state *render;
+
+ render = (struct xvba_render_state *)s->current_picture_ptr->f.data[0];
+ assert(render);
+
+ if (avctx->codec_id == CODEC_ID_VC1 &&
+ size >= 4 && IS_MARKER(AV_RB32(buffer))) {
+ buffer += 4;
+ size -= 4;
+ }
+
+ ff_xvba_add_slice_data(render, buffer, size);
+
+ return 0;
+}
+
+#if CONFIG_WMV3_XVBA_HWACCEL
+AVHWAccel ff_wmv3_xvba_hwaccel = {
+ .name = "wmv3_xvba",
+ .type = AVMEDIA_TYPE_VIDEO,
+ .id = CODEC_ID_WMV3,
+ .pix_fmt = PIX_FMT_XVBA_VLD,
+ .capabilities = 0,
+ .start_frame = start_frame,
+ .end_frame = end_frame,
+ .decode_slice = decode_slice,
+ .priv_data_size = 0,
+};
+#endif
+
+AVHWAccel ff_vc1_xvba_hwaccel = {
+ .name = "vc1_xvba",
+ .type = AVMEDIA_TYPE_VIDEO,
+ .id = CODEC_ID_VC1,
+ .pix_fmt = PIX_FMT_XVBA_VLD,
+ .capabilities = 0,
+ .start_frame = start_frame,
+ .end_frame = end_frame,
+ .decode_slice = decode_slice,
+ .priv_data_size = 0,
+};
diff -Naur xbmc-11.0.1/lib/ffmpeg/libavcodec/xvmc_internal.h xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvmc_internal.h
--- xbmc-11.0.1/lib/ffmpeg/libavcodec/xvmc_internal.h 2012-05-12 21:45:48.572627784 +0200
+++ xbmc-11.0.1.patch/lib/ffmpeg/libavcodec/xvmc_internal.h 2012-05-12 21:46:03.922936840 +0200
@@ -1,5 +1,7 @@
/*
- * XVideo Motion Compensation internal functions
+ * HW decode acceleration for MPEG-2, H.264 and VC-1
+ *
+ * Copyright (C) 2005-2011 Team XBMC
*
* This file is part of FFmpeg.
*
diff -Naur xbmc-11.0.1/lib/ffmpeg/libavutil/pixdesc.c xbmc-11.0.1.patch/lib/ffmpeg/libavutil/pixdesc.c
--- xbmc-11.0.1/lib/ffmpeg/libavutil/pixdesc.c 2012-05-12 21:45:49.442645301 +0200
+++ xbmc-11.0.1.patch/lib/ffmpeg/libavutil/pixdesc.c 2012-05-12 21:46:03.923936860 +0200
@@ -874,6 +874,12 @@
.log2_chroma_h = 1,
.flags = PIX_FMT_HWACCEL,
},
+ [PIX_FMT_XVBA_VLD] = {
+ .name = "xvba_vld",
+ .log2_chroma_w = 1,
+ .log2_chroma_h = 1,
+ .flags = PIX_FMT_HWACCEL,
+ },
[PIX_FMT_YUV420P9LE] = {
.name = "yuv420p9le",
.nb_components = 3,
diff -Naur xbmc-11.0.1/lib/ffmpeg/libavutil/pixfmt.h xbmc-11.0.1.patch/lib/ffmpeg/libavutil/pixfmt.h
--- xbmc-11.0.1/lib/ffmpeg/libavutil/pixfmt.h 2012-05-12 21:45:49.445645361 +0200
+++ xbmc-11.0.1.patch/lib/ffmpeg/libavutil/pixfmt.h 2012-05-12 21:46:03.924936880 +0200
@@ -129,6 +129,7 @@
PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
PIX_FMT_VDPAU_MPEG4, ///< MPEG4 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer
+ PIX_FMT_XVBA_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a vaapi_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0
PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0

View File

@ -0,0 +1,50 @@
From 1f4d4832065673eaa989bd8d45f55703d8a135ab Mon Sep 17 00:00:00 2001
From: xbmc <xbmc@AD02.(none)>
Date: Mon, 30 Apr 2012 13:58:29 +0200
Subject: [PATCH] ffmpeg: xvba, adapt to new ffmpeg, fix artifacts for h.264
---
lib/ffmpeg/libavcodec/xvba_h264.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/lib/ffmpeg/libavcodec/xvba_h264.c b/lib/ffmpeg/libavcodec/xvba_h264.c
index 1f737b0..9be6ffb 100644
--- a/lib/ffmpeg/libavcodec/xvba_h264.c
+++ b/lib/ffmpeg/libavcodec/xvba_h264.c
@@ -91,7 +91,7 @@ static int end_frame(AVCodecContext *avctx)
pic_descriptor->height_in_mb = s->mb_height;
pic_descriptor->picture_structure = s->picture_structure;
pic_descriptor->chroma_format = s->chroma_format ? s->chroma_format : 1;
- pic_descriptor->avc_intra_flag = (h->slice_type == FF_I_TYPE) ? 1 : 0;
+ pic_descriptor->avc_intra_flag = (h->slice_type == AV_PICTURE_TYPE_I) ? 1 : 0;
pic_descriptor->avc_reference = (s->current_picture_ptr->f.reference & 3) ? 1 : 0;
pic_descriptor->avc_bit_depth_luma_minus8 = h->sps.bit_depth_luma - 8;
@@ -136,11 +136,12 @@ static int end_frame(AVCodecContext *avctx)
pic_descriptor->pps_info.avc.xvba_avc_pps_reserved = 0; // must be 0
memcpy(iq_matrix->bScalingLists4x4, h->pps.scaling_matrix4, sizeof(iq_matrix->bScalingLists4x4));
- memcpy(iq_matrix->bScalingLists8x8, h->pps.scaling_matrix8, sizeof(iq_matrix->bScalingLists8x8));
+ memcpy(iq_matrix->bScalingLists8x8[0], h->pps.scaling_matrix8[0], sizeof(iq_matrix->bScalingLists8x8[0]));
+ memcpy(iq_matrix->bScalingLists8x8[1], h->pps.scaling_matrix8[3], sizeof(iq_matrix->bScalingLists8x8[0]));
// Wait for an I-frame before start decoding. Workaround for ATI UVD and UVD+ GPUs
if (!h->got_first_iframe) {
- if (h->slice_type != FF_I_TYPE && h->slice_type != FF_SI_TYPE)
+ if (h->slice_type != AV_PICTURE_TYPE_I && h->slice_type != AV_PICTURE_TYPE_SI)
return -1;
h->got_first_iframe = 1;
}
@@ -172,9 +173,7 @@ static int decode_slice(AVCodecContext *avctx,
.type = AVMEDIA_TYPE_VIDEO,
.id = CODEC_ID_H264,
.pix_fmt = PIX_FMT_XVBA_VLD,
- .capabilities = 0,
.start_frame = start_frame,
.end_frame = end_frame,
.decode_slice = decode_slice,
- .priv_data_size = 0,
};
--
1.7.10

View File

@ -0,0 +1,64 @@
From 81d1514a1daf379d58c61080244bb01c7ee7e662 Mon Sep 17 00:00:00 2001
From: fritsch <peter.fruehberger@gmail.com>
Date: Mon, 30 Apr 2012 21:33:18 +0200
Subject: [PATCH] xvba: (VC-1) rename FF_P_TYPE, FF_B_TYPE and FF_I_TYPE to
new ffmpeg conventions
---
lib/ffmpeg/libavcodec/xvba_vc1.c | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/lib/ffmpeg/libavcodec/xvba_vc1.c b/lib/ffmpeg/libavcodec/xvba_vc1.c
index c202b9c..7315b62 100644
--- a/lib/ffmpeg/libavcodec/xvba_vc1.c
+++ b/lib/ffmpeg/libavcodec/xvba_vc1.c
@@ -82,7 +82,7 @@ static int end_frame(AVCodecContext *avctx)
// xvba-video set this to 1 only 4:2:0 supported
// doc says: if not set, choose 1 - we try this
pic_descriptor->chroma_format = 1;
- pic_descriptor->avc_intra_flag = s->pict_type == FF_I_TYPE || v->bi_type == 1;
+ pic_descriptor->avc_intra_flag = s->pict_type == AV_PICTURE_TYPE_I || v->bi_type == 1;
pic_descriptor->avc_reference = (s->current_picture_ptr->f.reference & 3) ? 1 : 0;
// VC-1 explicit parameters see page 30 of sdk
@@ -128,13 +128,13 @@ static int end_frame(AVCodecContext *avctx)
pic_descriptor->past_surface = 0;
pic_descriptor->future_surface = 0;
switch (s->pict_type) {
- case FF_B_TYPE:
+ case AV_PICTURE_TYPE_B:
next = (struct xvba_render_state *)s->next_picture.f.data[0];
assert(next);
if (next)
pic_descriptor->past_surface = next->surface;
// fall-through
- case FF_P_TYPE:
+ case AV_PICTURE_TYPE_P:
last = (struct xvba_render_state *)s->last_picture.f.data[0];
assert(last);
if (last)
@@ -173,11 +173,9 @@ static int decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t s
.type = AVMEDIA_TYPE_VIDEO,
.id = CODEC_ID_WMV3,
.pix_fmt = PIX_FMT_XVBA_VLD,
- .capabilities = 0,
.start_frame = start_frame,
.end_frame = end_frame,
.decode_slice = decode_slice,
- .priv_data_size = 0,
};
#endif
@@ -186,9 +184,7 @@ static int decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t s
.type = AVMEDIA_TYPE_VIDEO,
.id = CODEC_ID_VC1,
.pix_fmt = PIX_FMT_XVBA_VLD,
- .capabilities = 0,
.start_frame = start_frame,
.end_frame = end_frame,
.decode_slice = decode_slice,
- .priv_data_size = 0,
};
--
1.7.10

View File

@ -1,6 +1,6 @@
diff -Naur xbmc-pvr-11.0.1/language/Dutch/strings.xml xbmc-pvr-11.0.1.patch/language/Dutch/strings.xml
--- xbmc-pvr-11.0.1/language/Dutch/strings.xml 2012-03-27 17:55:51.000000000 +0200
+++ xbmc-pvr-11.0.1.patch/language/Dutch/strings.xml 2012-05-14 09:40:49.363267601 +0200
+++ xbmc-pvr-11.0.1.patch/language/Dutch/strings.xml 2012-05-14 14:13:28.656860932 +0200
@@ -1542,7 +1542,6 @@
<string id="16322">Spline36</string>
<string id="16323">Spline36 geoptimaliseerd</string>
@ -11,7 +11,7 @@ diff -Naur xbmc-pvr-11.0.1/language/Dutch/strings.xml xbmc-pvr-11.0.1.patch/lang
diff -Naur xbmc-pvr-11.0.1/language/English/strings.xml xbmc-pvr-11.0.1.patch/language/English/strings.xml
--- xbmc-pvr-11.0.1/language/English/strings.xml 2012-03-27 17:55:51.000000000 +0200
+++ xbmc-pvr-11.0.1.patch/language/English/strings.xml 2012-05-14 09:40:49.366267654 +0200
+++ xbmc-pvr-11.0.1.patch/language/English/strings.xml 2012-05-14 14:13:28.661861033 +0200
@@ -1539,9 +1539,7 @@
<string id="16321">DXVA Best</string>
<string id="16322">Spline36</string>
@ -23,8 +23,8 @@ diff -Naur xbmc-pvr-11.0.1/language/English/strings.xml xbmc-pvr-11.0.1.patch/la
<string id="16400">Post-processing</string>
diff -Naur xbmc-pvr-11.0.1/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp xbmc-pvr-11.0.1.patch/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
--- xbmc-pvr-11.0.1/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp 2012-03-27 17:55:38.000000000 +0200
+++ xbmc-pvr-11.0.1.patch/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp 2012-05-14 09:40:49.371267744 +0200
--- xbmc-pvr-11.0.1/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp 2012-05-14 14:11:52.791931577 +0200
+++ xbmc-pvr-11.0.1.patch/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp 2012-05-14 14:13:28.663861073 +0200
@@ -531,8 +531,7 @@
bool CVDPAU::Supports(EINTERLACEMETHOD method)
{
@ -59,7 +59,7 @@ diff -Naur xbmc-pvr-11.0.1/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp xbmc-p
{
VdpBool enabled[]={1,0,0};
vdp_st = vdp_video_mixer_set_feature_enables(videoMixer, ARSIZE(feature), feature, enabled);
@@ -1401,16 +1387,14 @@
@@ -1399,16 +1385,14 @@
if (mode == VS_DEINTERLACEMODE_FORCE
|| (mode == VS_DEINTERLACEMODE_AUTO && m_DVDVideoPics.front().iFlags & DVP_FLAG_INTERLACED))
{
@ -80,7 +80,7 @@ diff -Naur xbmc-pvr-11.0.1/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp xbmc-p
m_mixerstep = 0;
diff -Naur xbmc-pvr-11.0.1/xbmc/video/dialogs/GUIDialogVideoSettings.cpp xbmc-pvr-11.0.1.patch/xbmc/video/dialogs/GUIDialogVideoSettings.cpp
--- xbmc-pvr-11.0.1/xbmc/video/dialogs/GUIDialogVideoSettings.cpp 2012-03-27 17:55:34.000000000 +0200
+++ xbmc-pvr-11.0.1.patch/xbmc/video/dialogs/GUIDialogVideoSettings.cpp 2012-05-14 09:40:52.908330712 +0200
+++ xbmc-pvr-11.0.1.patch/xbmc/video/dialogs/GUIDialogVideoSettings.cpp 2012-05-14 14:13:28.664861093 +0200
@@ -113,7 +113,6 @@
entries.push_back(make_pair(VS_INTERLACEMETHOD_VDPAU_INVERSE_TELECINE , 16314));
entries.push_back(make_pair(VS_INTERLACEMETHOD_DXVA_BOB , 16320));