#include <vdpau/vdpau.h>
#include "avcodec.h"
+#include "hwaccel.h"
#include "mpeg4video.h"
#include "vdpau.h"
#include "vdpau_internal.h"
info->trb[0] = s->pb_time;
info->trd[1] = s->pp_field_time >> 1;
info->trb[1] = s->pb_field_time >> 1;
- info->vop_time_increment_resolution = s->avctx->time_base.den;
+ info->vop_time_increment_resolution = s->avctx->framerate.num;
info->vop_fcode_forward = s->f_code;
info->vop_fcode_backward = s->b_code;
info->resync_marker_disable = !ctx->resync_marker;
return 0;
}
-#if CONFIG_H263_VDPAU_HWACCEL
-AVHWAccel ff_h263_vdpau_hwaccel = {
- .name = "h263_vdpau",
- .type = AVMEDIA_TYPE_VIDEO,
- .id = AV_CODEC_ID_H263,
- .pix_fmt = AV_PIX_FMT_VDPAU,
- .start_frame = vdpau_mpeg4_start_frame,
- .end_frame = ff_vdpau_mpeg_end_frame,
- .decode_slice = vdpau_mpeg4_decode_slice,
- .frame_priv_data_size = sizeof(struct vdpau_picture_context),
-};
-#endif
+static int vdpau_mpeg4_init(AVCodecContext *avctx)
+{
+ VdpDecoderProfile profile;
+
+ switch (avctx->profile) {
+ case FF_PROFILE_MPEG4_SIMPLE:
+ profile = VDP_DECODER_PROFILE_MPEG4_PART2_SP;
+ break;
+ case FF_PROFILE_MPEG4_ADVANCED_SIMPLE:
+ profile = VDP_DECODER_PROFILE_MPEG4_PART2_ASP;
+ break;
+ default:
+ return AVERROR(ENOTSUP);
+ }
+
+ return ff_vdpau_common_init(avctx, profile, avctx->level);
+}
-#if CONFIG_MPEG4_VDPAU_HWACCEL
AVHWAccel ff_mpeg4_vdpau_hwaccel = {
.name = "mpeg4_vdpau",
.type = AVMEDIA_TYPE_VIDEO,
.end_frame = ff_vdpau_mpeg_end_frame,
.decode_slice = vdpau_mpeg4_decode_slice,
.frame_priv_data_size = sizeof(struct vdpau_picture_context),
+ .init = vdpau_mpeg4_init,
+ .uninit = ff_vdpau_common_uninit,
+ .priv_data_size = sizeof(VDPAUContext),
+ .caps_internal = HWACCEL_CAP_ASYNC_SAFE,
};
-#endif