Signed-off-by: Diego Biurrun <diego@biurrun.de>tags/n1.2
@@ -1609,9 +1609,11 @@ h264_vda_hwaccel_select="vda h264_decoder" | |||||
h264_vdpau_decoder_select="vdpau h264_decoder" | h264_vdpau_decoder_select="vdpau h264_decoder" | ||||
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder" | mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder" | ||||
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder" | mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder" | ||||
mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder" | |||||
mpeg2_dxva2_hwaccel_deps="dxva2api_h" | mpeg2_dxva2_hwaccel_deps="dxva2api_h" | ||||
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder" | mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder" | ||||
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder" | mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder" | ||||
mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder" | |||||
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder" | mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder" | ||||
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder" | mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder" | ||||
vc1_dxva2_hwaccel_deps="dxva2api_h" | vc1_dxva2_hwaccel_deps="dxva2api_h" | ||||
@@ -245,10 +245,12 @@ OBJS-$(CONFIG_MP3ON4FLOAT_DECODER) += mpegaudiodec_float.o mpeg4audio.o | |||||
OBJS-$(CONFIG_MPC7_DECODER) += mpc7.o mpc.o | OBJS-$(CONFIG_MPC7_DECODER) += mpc7.o mpc.o | ||||
OBJS-$(CONFIG_MPC8_DECODER) += mpc8.o mpc.o | OBJS-$(CONFIG_MPC8_DECODER) += mpc8.o mpc.o | ||||
OBJS-$(CONFIG_MPEG_XVMC_DECODER) += mpegvideo_xvmc.o | OBJS-$(CONFIG_MPEG_XVMC_DECODER) += mpegvideo_xvmc.o | ||||
OBJS-$(CONFIG_MPEG1_VDPAU_HWACCEL) += vdpau_mpeg12.o | |||||
OBJS-$(CONFIG_MPEG1VIDEO_DECODER) += mpeg12.o mpeg12data.o | OBJS-$(CONFIG_MPEG1VIDEO_DECODER) += mpeg12.o mpeg12data.o | ||||
OBJS-$(CONFIG_MPEG1VIDEO_ENCODER) += mpeg12enc.o mpeg12.o | OBJS-$(CONFIG_MPEG1VIDEO_ENCODER) += mpeg12enc.o mpeg12.o | ||||
OBJS-$(CONFIG_MPEG2_DXVA2_HWACCEL) += dxva2_mpeg2.o | OBJS-$(CONFIG_MPEG2_DXVA2_HWACCEL) += dxva2_mpeg2.o | ||||
OBJS-$(CONFIG_MPEG2_VAAPI_HWACCEL) += vaapi_mpeg2.o | OBJS-$(CONFIG_MPEG2_VAAPI_HWACCEL) += vaapi_mpeg2.o | ||||
OBJS-$(CONFIG_MPEG2_VDPAU_HWACCEL) += vdpau_mpeg12.o | |||||
OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12.o mpeg12data.o | OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12.o mpeg12data.o | ||||
OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpeg12.o | OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpeg12.o | ||||
OBJS-$(CONFIG_MPEG4_VAAPI_HWACCEL) += vaapi_mpeg4.o | OBJS-$(CONFIG_MPEG4_VAAPI_HWACCEL) += vaapi_mpeg4.o | ||||
@@ -77,8 +77,10 @@ void avcodec_register_all(void) | |||||
REGISTER_HWACCEL(H264_DXVA2, h264_dxva2); | REGISTER_HWACCEL(H264_DXVA2, h264_dxva2); | ||||
REGISTER_HWACCEL(H264_VAAPI, h264_vaapi); | REGISTER_HWACCEL(H264_VAAPI, h264_vaapi); | ||||
REGISTER_HWACCEL(H264_VDA, h264_vda); | REGISTER_HWACCEL(H264_VDA, h264_vda); | ||||
REGISTER_HWACCEL(MPEG1_VDPAU, mpeg1_vdpau); | |||||
REGISTER_HWACCEL(MPEG2_DXVA2, mpeg2_dxva2); | REGISTER_HWACCEL(MPEG2_DXVA2, mpeg2_dxva2); | ||||
REGISTER_HWACCEL(MPEG2_VAAPI, mpeg2_vaapi); | REGISTER_HWACCEL(MPEG2_VAAPI, mpeg2_vaapi); | ||||
REGISTER_HWACCEL(MPEG2_VDPAU, mpeg2_vdpau); | |||||
REGISTER_HWACCEL(MPEG4_VAAPI, mpeg4_vaapi); | REGISTER_HWACCEL(MPEG4_VAAPI, mpeg4_vaapi); | ||||
REGISTER_HWACCEL(VC1_DXVA2, vc1_dxva2); | REGISTER_HWACCEL(VC1_DXVA2, vc1_dxva2); | ||||
REGISTER_HWACCEL(VC1_VAAPI, vc1_vaapi); | REGISTER_HWACCEL(VC1_VAAPI, vc1_vaapi); | ||||
@@ -134,6 +134,7 @@ const enum AVPixelFormat ff_hwaccel_pixfmt_list_420[] = { | |||||
AV_PIX_FMT_DXVA2_VLD, | AV_PIX_FMT_DXVA2_VLD, | ||||
AV_PIX_FMT_VAAPI_VLD, | AV_PIX_FMT_VAAPI_VLD, | ||||
AV_PIX_FMT_VDA_VLD, | AV_PIX_FMT_VDA_VLD, | ||||
AV_PIX_FMT_VDPAU, | |||||
AV_PIX_FMT_YUV420P, | AV_PIX_FMT_YUV420P, | ||||
AV_PIX_FMT_NONE | AV_PIX_FMT_NONE | ||||
}; | }; | ||||
@@ -0,0 +1,116 @@ | |||||
/* | |||||
* MPEG-1/2 HW decode acceleration through VDPAU | |||||
* | |||||
* Copyright (c) 2008 NVIDIA | |||||
* Copyright (c) 2013 Rémi Denis-Courmont | |||||
* | |||||
* This file is part of Libav. | |||||
* | |||||
* Libav 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. | |||||
* | |||||
* Libav 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 Libav; if not, write to the Free Software Foundation, | |||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||||
*/ | |||||
#include <vdpau/vdpau.h> | |||||
#include "avcodec.h" | |||||
#include "vdpau.h" | |||||
#include "vdpau_internal.h" | |||||
static int vdpau_mpeg_start_frame(AVCodecContext *avctx, | |||||
const uint8_t *buffer, uint32_t size) | |||||
{ | |||||
MpegEncContext * const s = avctx->priv_data; | |||||
AVVDPAUContext *hwctx = avctx->hwaccel_context; | |||||
VdpPictureInfoMPEG1Or2 *info = &hwctx->info.mpeg; | |||||
VdpVideoSurface ref; | |||||
int i; | |||||
/* fill VdpPictureInfoMPEG1Or2 struct */ | |||||
info->forward_reference = VDP_INVALID_HANDLE; | |||||
info->backward_reference = VDP_INVALID_HANDLE; | |||||
switch (s->pict_type) { | |||||
case AV_PICTURE_TYPE_B: | |||||
ref = ff_vdpau_get_surface_id(&s->next_picture); | |||||
assert(ref != VDP_INVALID_HANDLE); | |||||
hwctx->info.mpeg.backward_reference = ref; | |||||
/* fall through to forward prediction */ | |||||
case AV_PICTURE_TYPE_P: | |||||
ref = ff_vdpau_get_surface_id(&s->last_picture); | |||||
hwctx->info.mpeg.forward_reference = ref; | |||||
} | |||||
info->slice_count = 0; | |||||
info->picture_structure = s->picture_structure; | |||||
info->picture_coding_type = s->pict_type; | |||||
info->intra_dc_precision = s->intra_dc_precision; | |||||
info->frame_pred_frame_dct = s->frame_pred_frame_dct; | |||||
info->concealment_motion_vectors = s->concealment_motion_vectors; | |||||
info->intra_vlc_format = s->intra_vlc_format; | |||||
info->alternate_scan = s->alternate_scan; | |||||
info->q_scale_type = s->q_scale_type; | |||||
info->top_field_first = s->top_field_first; | |||||
// Both for MPEG-1 only, zero for MPEG-2: | |||||
info->full_pel_forward_vector = s->full_pel[0]; | |||||
info->full_pel_backward_vector = s->full_pel[1]; | |||||
// For MPEG-1 fill both horizontal & vertical: | |||||
info->f_code[0][0] = s->mpeg_f_code[0][0]; | |||||
info->f_code[0][1] = s->mpeg_f_code[0][1]; | |||||
info->f_code[1][0] = s->mpeg_f_code[1][0]; | |||||
info->f_code[1][1] = s->mpeg_f_code[1][1]; | |||||
for (i = 0; i < 64; ++i) { | |||||
info->intra_quantizer_matrix[i] = s->intra_matrix[i]; | |||||
info->non_intra_quantizer_matrix[i] = s->inter_matrix[i]; | |||||
} | |||||
return ff_vdpau_common_start_frame(avctx, buffer, size); | |||||
} | |||||
static int vdpau_mpeg_decode_slice(AVCodecContext *avctx, | |||||
const uint8_t *buffer, uint32_t size) | |||||
{ | |||||
AVVDPAUContext *hwctx = avctx->hwaccel_context; | |||||
int val; | |||||
val = ff_vdpau_add_buffer(avctx, buffer, size); | |||||
if (val < 0) | |||||
return val; | |||||
hwctx->info.mpeg.slice_count++; | |||||
return 0; | |||||
} | |||||
#if CONFIG_MPEG1_VDPAU_HWACCEL | |||||
AVHWAccel ff_mpeg1_vdpau_hwaccel = { | |||||
.name = "mpeg1_vdpau", | |||||
.type = AVMEDIA_TYPE_VIDEO, | |||||
.id = AV_CODEC_ID_MPEG1VIDEO, | |||||
.pix_fmt = AV_PIX_FMT_VDPAU, | |||||
.start_frame = vdpau_mpeg_start_frame, | |||||
.end_frame = ff_vdpau_common_end_frame, | |||||
.decode_slice = vdpau_mpeg_decode_slice, | |||||
}; | |||||
#endif | |||||
#if CONFIG_MPEG2_VDPAU_HWACCEL | |||||
AVHWAccel ff_mpeg2_vdpau_hwaccel = { | |||||
.name = "mpeg2_vdpau", | |||||
.type = AVMEDIA_TYPE_VIDEO, | |||||
.id = AV_CODEC_ID_MPEG2VIDEO, | |||||
.pix_fmt = AV_PIX_FMT_VDPAU, | |||||
.start_frame = vdpau_mpeg_start_frame, | |||||
.end_frame = ff_vdpau_common_end_frame, | |||||
.decode_slice = vdpau_mpeg_decode_slice, | |||||
}; | |||||
#endif |
@@ -27,7 +27,7 @@ | |||||
*/ | */ | ||||
#define LIBAVCODEC_VERSION_MAJOR 54 | #define LIBAVCODEC_VERSION_MAJOR 54 | ||||
#define LIBAVCODEC_VERSION_MINOR 36 | |||||
#define LIBAVCODEC_VERSION_MINOR 37 | |||||
#define LIBAVCODEC_VERSION_MICRO 0 | #define LIBAVCODEC_VERSION_MICRO 0 | ||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | ||||