FFmpeg
vdpau.c
Go to the documentation of this file.
1 /*
2  * Video Decode and Presentation API for UNIX (VDPAU) is used for
3  * HW decode acceleration for MPEG-1/2, MPEG-4 ASP, H.264 and VC-1.
4  *
5  * Copyright (c) 2008 NVIDIA
6  *
7  * This file is part of FFmpeg.
8  *
9  * FFmpeg is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * FFmpeg is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with FFmpeg; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22  */
23 
24 #include "config_components.h"
25 
26 #include <limits.h>
27 
28 #include "avcodec.h"
29 #include "decode.h"
30 #include "hwaccel_internal.h"
31 #include "internal.h"
32 #include "mpegvideodec.h"
33 #include "vc1.h"
34 #include "vdpau.h"
35 #include "vdpau_internal.h"
36 
37 /**
38  * @addtogroup VDPAU_Decoding
39  *
40  * @{
41  */
42 
43 static int vdpau_error(VdpStatus status)
44 {
45  switch (status) {
46  case VDP_STATUS_OK:
47  return 0;
48  case VDP_STATUS_NO_IMPLEMENTATION:
49  return AVERROR(ENOSYS);
50  case VDP_STATUS_DISPLAY_PREEMPTED:
51  return AVERROR(EIO);
52  case VDP_STATUS_INVALID_HANDLE:
53  return AVERROR(EBADF);
54  case VDP_STATUS_INVALID_POINTER:
55  return AVERROR(EFAULT);
56  case VDP_STATUS_RESOURCES:
57  return AVERROR(ENOBUFS);
58  case VDP_STATUS_HANDLE_DEVICE_MISMATCH:
59  return AVERROR(EXDEV);
60  case VDP_STATUS_ERROR:
61  return AVERROR(EIO);
62  default:
63  return AVERROR(EINVAL);
64  }
65 }
66 
67 #if FF_API_VDPAU_ALLOC_GET_SET
69 {
71  return av_vdpau_alloc_context();
73 }
74 
75 #define MAKE_ACCESSORS(str, name, type, field) \
76  type av_##name##_get_##field(const str *s) { return s->field; } \
77  void av_##name##_set_##field(str *s, type v) { s->field = v; }
78 MAKE_ACCESSORS(AVVDPAUContext, vdpau_hwaccel, AVVDPAU_Render2, render2)
79 #endif
80 
82  VdpChromaType *type,
83  uint32_t *width, uint32_t *height)
84 {
85  VdpChromaType t;
86  uint32_t w = avctx->coded_width;
87  uint32_t h = avctx->coded_height;
88 
89  /* See <vdpau/vdpau.h> for per-type alignment constraints. */
90  switch (avctx->sw_pix_fmt) {
91  case AV_PIX_FMT_YUV420P:
95  t = VDP_CHROMA_TYPE_420;
96  w = (w + 1) & ~1;
97  h = (h + 3) & ~3;
98  break;
99  case AV_PIX_FMT_YUV422P:
100  case AV_PIX_FMT_YUVJ422P:
101  t = VDP_CHROMA_TYPE_422;
102  w = (w + 1) & ~1;
103  h = (h + 1) & ~1;
104  break;
105  case AV_PIX_FMT_YUV444P:
106  case AV_PIX_FMT_YUVJ444P:
109  t = VDP_CHROMA_TYPE_444;
110  h = (h + 1) & ~1;
111  break;
112  default:
113  return AVERROR(ENOSYS);
114  }
115 
116  if (type)
117  *type = t;
118  if (width)
119  *width = w;
120  if (height)
121  *height = h;
122  return 0;
123 }
124 
126  AVBufferRef *hw_frames_ctx)
127 {
128  AVHWFramesContext *hw_frames = (AVHWFramesContext*)hw_frames_ctx->data;
129  VdpChromaType type;
130  uint32_t width;
131  uint32_t height;
132 
134  return AVERROR(EINVAL);
135 
136  hw_frames->format = AV_PIX_FMT_VDPAU;
137  hw_frames->sw_format = avctx->sw_pix_fmt;
138  hw_frames->width = width;
139  hw_frames->height = height;
140 
141  return 0;
142 }
143 
144 int ff_vdpau_common_init(AVCodecContext *avctx, VdpDecoderProfile profile,
145  int level)
146 {
147  VDPAUHWContext *hwctx = avctx->hwaccel_context;
148  VDPAUContext *vdctx = avctx->internal->hwaccel_priv_data;
149  VdpVideoSurfaceQueryCapabilities *surface_query_caps;
150  VdpDecoderQueryCapabilities *decoder_query_caps;
151  VdpDecoderCreate *create;
152  VdpGetInformationString *info;
153  const char *info_string;
154  void *func;
155  VdpStatus status;
156  VdpBool supported;
157  uint32_t max_level, max_mb, max_width, max_height;
158  VdpChromaType type;
159  uint32_t width;
160  uint32_t height;
161  int ret;
162 
163  vdctx->width = UINT32_MAX;
164  vdctx->height = UINT32_MAX;
165 
167  return AVERROR(ENOSYS);
168 
169  if (hwctx) {
170  hwctx->reset = 0;
171 
172  if (hwctx->context.decoder != VDP_INVALID_HANDLE) {
173  vdctx->decoder = hwctx->context.decoder;
174  vdctx->render = hwctx->context.render;
175  vdctx->device = VDP_INVALID_HANDLE;
176  return 0; /* Decoder created by user */
177  }
178 
179  vdctx->device = hwctx->device;
180  vdctx->get_proc_address = hwctx->get_proc_address;
181 
182  if (hwctx->flags & AV_HWACCEL_FLAG_IGNORE_LEVEL)
183  level = 0;
184 
185  if (!(hwctx->flags & AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH) &&
186  type != VDP_CHROMA_TYPE_420)
187  return AVERROR(ENOSYS);
188  } else {
189  AVHWFramesContext *frames_ctx;
190  AVVDPAUDeviceContext *dev_ctx;
191 
193  if (ret < 0)
194  return ret;
195 
196  frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data;
197  dev_ctx = frames_ctx->device_ctx->hwctx;
198 
199  vdctx->device = dev_ctx->device;
200  vdctx->get_proc_address = dev_ctx->get_proc_address;
201 
203  level = 0;
204  }
205 
206  if (level < 0)
207  return AVERROR(ENOTSUP);
208 
209  status = vdctx->get_proc_address(vdctx->device,
210  VDP_FUNC_ID_GET_INFORMATION_STRING,
211  &func);
212  if (status != VDP_STATUS_OK)
213  return vdpau_error(status);
214  else
215  info = func;
216 
217  status = info(&info_string);
218  if (status != VDP_STATUS_OK)
219  return vdpau_error(status);
220  if (avctx->codec_id == AV_CODEC_ID_HEVC && strncmp(info_string, "NVIDIA ", 7) == 0 &&
222  int driver_version = 0;
223  sscanf(info_string, "NVIDIA VDPAU Driver Shared Library %d", &driver_version);
224  if (driver_version < 410) {
225  av_log(avctx, AV_LOG_VERBOSE, "HEVC with NVIDIA VDPAU drivers is buggy, skipping.\n");
226  return AVERROR(ENOTSUP);
227  }
228  }
229 
230  status = vdctx->get_proc_address(vdctx->device,
231  VDP_FUNC_ID_VIDEO_SURFACE_QUERY_CAPABILITIES,
232  &func);
233  if (status != VDP_STATUS_OK)
234  return vdpau_error(status);
235  else
236  surface_query_caps = func;
237 
238  status = surface_query_caps(vdctx->device, type, &supported,
239  &max_width, &max_height);
240  if (status != VDP_STATUS_OK)
241  return vdpau_error(status);
242  if (supported != VDP_TRUE ||
243  max_width < width || max_height < height)
244  return AVERROR(ENOTSUP);
245 
246  status = vdctx->get_proc_address(vdctx->device,
247  VDP_FUNC_ID_DECODER_QUERY_CAPABILITIES,
248  &func);
249  if (status != VDP_STATUS_OK)
250  return vdpau_error(status);
251  else
252  decoder_query_caps = func;
253 
254  status = decoder_query_caps(vdctx->device, profile, &supported, &max_level,
255  &max_mb, &max_width, &max_height);
256 #ifdef VDP_DECODER_PROFILE_H264_CONSTRAINED_BASELINE
257  if ((status != VDP_STATUS_OK || supported != VDP_TRUE) && profile == VDP_DECODER_PROFILE_H264_CONSTRAINED_BASELINE) {
258  profile = VDP_DECODER_PROFILE_H264_MAIN;
259  status = decoder_query_caps(vdctx->device, profile, &supported,
260  &max_level, &max_mb,
261  &max_width, &max_height);
262  }
263 #endif
264  if (status != VDP_STATUS_OK)
265  return vdpau_error(status);
266 
267  if (supported != VDP_TRUE || max_level < level ||
268  max_width < width || max_height < height)
269  return AVERROR(ENOTSUP);
270 
271  status = vdctx->get_proc_address(vdctx->device, VDP_FUNC_ID_DECODER_CREATE,
272  &func);
273  if (status != VDP_STATUS_OK)
274  return vdpau_error(status);
275  else
276  create = func;
277 
278  status = vdctx->get_proc_address(vdctx->device, VDP_FUNC_ID_DECODER_RENDER,
279  &func);
280  if (status != VDP_STATUS_OK)
281  return vdpau_error(status);
282  else
283  vdctx->render = func;
284 
285  status = create(vdctx->device, profile, width, height, avctx->refs,
286  &vdctx->decoder);
287  if (status == VDP_STATUS_OK) {
288  vdctx->width = avctx->coded_width;
289  vdctx->height = avctx->coded_height;
290  }
291 
292  return vdpau_error(status);
293 }
294 
296 {
297  VDPAUContext *vdctx = avctx->internal->hwaccel_priv_data;
298  VdpDecoderDestroy *destroy;
299  void *func;
300  VdpStatus status;
301 
302  if (vdctx->device == VDP_INVALID_HANDLE)
303  return 0; /* Decoder created and destroyed by user */
304  if (vdctx->width == UINT32_MAX && vdctx->height == UINT32_MAX)
305  return 0;
306 
307  status = vdctx->get_proc_address(vdctx->device,
308  VDP_FUNC_ID_DECODER_DESTROY, &func);
309  if (status != VDP_STATUS_OK)
310  return vdpau_error(status);
311  else
312  destroy = func;
313 
314  status = destroy(vdctx->decoder);
315  return vdpau_error(status);
316 }
317 
319 {
320  VDPAUHWContext *hwctx = avctx->hwaccel_context;
321  VDPAUContext *vdctx = avctx->internal->hwaccel_priv_data;
322 
323  if (vdctx->device == VDP_INVALID_HANDLE)
324  return 0; /* Decoder created by user */
325  if (avctx->coded_width == vdctx->width &&
326  avctx->coded_height == vdctx->height && (!hwctx || !hwctx->reset))
327  return 0;
328 
329  FF_HW_SIMPLE_CALL(avctx, uninit);
330  return FF_HW_SIMPLE_CALL(avctx, init);
331 }
332 
334  av_unused const uint8_t *buffer,
335  av_unused uint32_t size)
336 {
337  pic_ctx->bitstream_buffers_allocated = 0;
338  pic_ctx->bitstream_buffers_used = 0;
339  pic_ctx->bitstream_buffers = NULL;
340  return 0;
341 }
342 
344  struct vdpau_picture_context *pic_ctx)
345 {
346  VDPAUContext *vdctx = avctx->internal->hwaccel_priv_data;
347  AVVDPAUContext *hwctx = avctx->hwaccel_context;
348  VdpVideoSurface surf = ff_vdpau_get_surface_id(frame);
349  VdpStatus status;
350  int val;
351 
352  val = ff_vdpau_common_reinit(avctx);
353  if (val < 0)
354  return val;
355 
356  if (hwctx && !hwctx->render && hwctx->render2) {
357  status = hwctx->render2(avctx, frame, (void *)&pic_ctx->info,
358  pic_ctx->bitstream_buffers_used, pic_ctx->bitstream_buffers);
359  } else
360  status = vdctx->render(vdctx->decoder, surf, &pic_ctx->info,
361  pic_ctx->bitstream_buffers_used,
362  pic_ctx->bitstream_buffers);
363 
364  av_freep(&pic_ctx->bitstream_buffers);
365 
366  return vdpau_error(status);
367 }
368 
369 #if CONFIG_MPEG1_VDPAU_HWACCEL || \
370  CONFIG_MPEG2_VDPAU_HWACCEL || CONFIG_MPEG4_VDPAU_HWACCEL || \
371  CONFIG_VC1_VDPAU_HWACCEL || CONFIG_WMV3_VDPAU_HWACCEL
373 {
374  MpegEncContext *s = avctx->priv_data;
375  Picture *pic = s->current_picture_ptr;
376  struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private;
377  int val;
378 
379  val = ff_vdpau_common_end_frame(avctx, pic->f, pic_ctx);
380  if (val < 0)
381  return val;
382 
383  ff_mpeg_draw_horiz_band(s, 0, s->avctx->height);
384  return 0;
385 }
386 #endif
387 
389  const uint8_t *buf, uint32_t size)
390 {
391  VdpBitstreamBuffer *buffers = pic_ctx->bitstream_buffers;
392 
393  buffers = av_fast_realloc(buffers, &pic_ctx->bitstream_buffers_allocated,
394  (pic_ctx->bitstream_buffers_used + 1) * sizeof(*buffers));
395  if (!buffers)
396  return AVERROR(ENOMEM);
397 
398  pic_ctx->bitstream_buffers = buffers;
399  buffers += pic_ctx->bitstream_buffers_used++;
400 
401  buffers->struct_version = VDP_BITSTREAM_BUFFER_VERSION;
402  buffers->bitstream = buf;
403  buffers->bitstream_bytes = size;
404  return 0;
405 }
406 
407 #if FF_API_VDPAU_ALLOC_GET_SET
409 {
410  return av_mallocz(sizeof(VDPAUHWContext));
411 }
412 #endif
413 
414 int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device,
415  VdpGetProcAddress *get_proc, unsigned flags)
416 {
417  VDPAUHWContext *hwctx;
418 
420  return AVERROR(EINVAL);
421 
422  if (av_reallocp(&avctx->hwaccel_context, sizeof(*hwctx)))
423  return AVERROR(ENOMEM);
424 
425  hwctx = avctx->hwaccel_context;
426 
427  memset(hwctx, 0, sizeof(*hwctx));
428  hwctx->context.decoder = VDP_INVALID_HANDLE;
429  hwctx->device = device;
430  hwctx->get_proc_address = get_proc;
431  hwctx->flags = flags;
432  hwctx->reset = 1;
433  return 0;
434 }
435 
436 /* @}*/
func
int(* func)(AVBPrint *dst, const char *in, const char *arg)
Definition: jacosubdec.c:68
AVHWDeviceContext::hwctx
void * hwctx
The format-specific data, allocated and freed by libavutil along with this context.
Definition: hwcontext.h:85
FF_ENABLE_DEPRECATION_WARNINGS
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition: internal.h:73
AVCodecContext::hwaccel_context
void * hwaccel_context
Legacy hardware accelerator context.
Definition: avcodec.h:1451
level
uint8_t level
Definition: svq3.c:204
ff_vdpau_common_frame_params
int ff_vdpau_common_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
Definition: vdpau.c:125
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
destroy
static void destroy(struct ResampleContext **c)
Definition: soxr_resample.c:64
AVBufferRef::data
uint8_t * data
The data buffer.
Definition: buffer.h:90
vc1.h
ff_vdpau_common_reinit
static int ff_vdpau_common_reinit(AVCodecContext *avctx)
Definition: vdpau.c:318
AVHWFramesContext::format
enum AVPixelFormat format
The pixel format identifying the underlying HW surface type.
Definition: hwcontext.h:197
av_unused
#define av_unused
Definition: attributes.h:131
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:344
VDPAUHWContext::get_proc_address
VdpGetProcAddress * get_proc_address
Definition: vdpau_internal.h:68
vdpau_picture_context::bitstream_buffers_used
int bitstream_buffers_used
Useful bitstream buffers in the bitstream buffers table.
Definition: vdpau_internal.h:112
w
uint8_t w
Definition: llviddspenc.c:38
internal.h
AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:478
AVVDPAUDeviceContext::get_proc_address
VdpGetProcAddress * get_proc_address
Definition: hwcontext_vdpau.h:37
AVVDPAUDeviceContext
This struct is allocated as AVHWDeviceContext.hwctx.
Definition: hwcontext_vdpau.h:35
AV_LOG_VERBOSE
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:196
FF_HW_SIMPLE_CALL
#define FF_HW_SIMPLE_CALL(avctx, function)
Definition: hwaccel_internal.h:174
Picture
Picture.
Definition: mpegpicture.h:46
AVVDPAUContext::render2
AVVDPAU_Render2 render2
Definition: vdpau.h:93
AVHWFramesContext::width
int width
The allocated dimensions of the frames in this pool.
Definition: hwcontext.h:217
VDPAUContext::width
uint32_t width
Definition: vdpau_internal.h:94
VDPAUContext::render
VdpDecoderRender * render
VDPAU decoder render callback.
Definition: vdpau_internal.h:92
vdpau_internal.h
AV_HWACCEL_FLAG_IGNORE_LEVEL
#define AV_HWACCEL_FLAG_IGNORE_LEVEL
Hardware acceleration should be used for decoding even if the codec level used is unknown or higher t...
Definition: avcodec.h:2138
VDPAUHWContext::device
VdpDevice device
Definition: vdpau_internal.h:67
vdpau_picture_context
Definition: vdpau_internal.h:98
AVVDPAUContext
This structure is used to share data between the libavcodec library and the client video application.
Definition: vdpau.h:78
AVCodecContext::refs
int refs
number of reference frames
Definition: avcodec.h:715
val
static double val(void *priv, double ch)
Definition: aeval.c:78
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
AVCodecContext::coded_height
int coded_height
Definition: avcodec.h:633
ff_vdpau_add_buffer
int ff_vdpau_add_buffer(struct vdpau_picture_context *pic_ctx, const uint8_t *buf, uint32_t size)
Definition: vdpau.c:388
AV_PIX_FMT_YUV444P10
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:481
mpegvideodec.h
ff_vdpau_common_init
int ff_vdpau_common_init(AVCodecContext *avctx, VdpDecoderProfile profile, int level)
Definition: vdpau.c:144
vdpau.h
AVHWFramesContext::height
int height
Definition: hwcontext.h:217
AV_PIX_FMT_YUVJ422P
@ AV_PIX_FMT_YUVJ422P
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
Definition: pixfmt.h:86
av_fast_realloc
void * av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
Reallocate the given buffer if it is not large enough, otherwise do nothing.
Definition: mem.c:495
width
#define width
s
#define s(width, name)
Definition: cbs_vp9.c:198
info
MIPS optimizations info
Definition: mips.txt:2
decode.h
limits.h
av_vdpau_bind_context
int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device, VdpGetProcAddress *get_proc, unsigned flags)
Associate a VDPAU device with a codec context for hardware acceleration.
Definition: vdpau.c:414
AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH
#define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH
Hardware acceleration can output YUV pixel formats with a different chroma sampling than 4:2:0 and/or...
Definition: avcodec.h:2144
ff_vdpau_common_start_frame
int ff_vdpau_common_start_frame(struct vdpau_picture_context *pic_ctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
Definition: vdpau.c:333
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:73
ff_vdpau_get_surface_id
static uintptr_t ff_vdpau_get_surface_id(AVFrame *pic)
Extract VdpVideoSurface from an AVFrame.
Definition: vdpau_internal.h:38
Picture::hwaccel_picture_private
void * hwaccel_picture_private
RefStruct reference for hardware accelerator private data.
Definition: mpegpicture.h:70
AV_PIX_FMT_YUVJ444P
@ AV_PIX_FMT_YUVJ444P
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
Definition: pixfmt.h:87
frame
static AVFrame * frame
Definition: demux_decode.c:54
ff_decode_get_hw_frames_ctx
int ff_decode_get_hw_frames_ctx(AVCodecContext *avctx, enum AVHWDeviceType dev_type)
Make sure avctx.hw_frames_ctx is set.
Definition: decode.c:1064
AVCodecContext::codec_id
enum AVCodecID codec_id
Definition: avcodec.h:455
if
if(ret)
Definition: filter_design.txt:179
NULL
#define NULL
Definition: coverity.c:32
AVHWFramesContext::sw_format
enum AVPixelFormat sw_format
The pixel format identifying the actual data layout of the hardware frames.
Definition: hwcontext.h:210
hwaccel_internal.h
create
static struct ResampleContext * create(struct ResampleContext *c, int out_rate, int in_rate, int filter_size, int phase_shift, int linear, double cutoff, enum AVSampleFormat format, enum SwrFilterType filter_type, double kaiser_beta, double precision, int cheby, int exact_rational)
Definition: soxr_resample.c:32
VDPAUContext::height
uint32_t height
Definition: vdpau_internal.h:95
AVCodecContext::internal
struct AVCodecInternal * internal
Private context used for internal data.
Definition: avcodec.h:480
AV_PIX_FMT_YUVJ420P
@ AV_PIX_FMT_YUVJ420P
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
Definition: pixfmt.h:85
ff_vdpau_common_end_frame
int ff_vdpau_common_end_frame(AVCodecContext *avctx, AVFrame *frame, struct vdpau_picture_context *pic_ctx)
Definition: vdpau.c:343
AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH
#define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH
Hardware acceleration should still be attempted for decoding when the codec profile does not match th...
Definition: avcodec.h:2158
MAKE_ACCESSORS
#define MAKE_ACCESSORS(str, name, type, field)
Definition: vdpau.c:75
VDPAUHWContext
Definition: vdpau_internal.h:65
av_vdpau_get_surface_parameters
int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type, uint32_t *width, uint32_t *height)
Gets the parameters to create an adequate VDPAU video surface for the codec context using VDPAU hardw...
Definition: vdpau.c:81
VDPAUContext::device
VdpDevice device
VDPAU device handle.
Definition: vdpau_internal.h:77
ff_vdpau_common_uninit
int ff_vdpau_common_uninit(AVCodecContext *avctx)
Definition: vdpau.c:295
VDPAUContext
Definition: vdpau_internal.h:73
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:365
AVCodecInternal::hwaccel_priv_data
void * hwaccel_priv_data
hwaccel-specific private data
Definition: internal.h:121
size
int size
Definition: twinvq_data.h:10344
av_reallocp
int av_reallocp(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory through a pointer to a pointer.
Definition: mem.c:186
VDPAUContext::decoder
VdpDecoder decoder
VDPAU decoder handle.
Definition: vdpau_internal.h:82
AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P12
Definition: pixfmt.h:485
ff_mpeg_draw_horiz_band
void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h)
Definition: mpegvideo_dec.c:535
ff_vdpau_mpeg_end_frame
int ff_vdpau_mpeg_end_frame(AVCodecContext *avctx)
height
#define height
AV_PIX_FMT_VDPAU
@ AV_PIX_FMT_VDPAU
HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface.
Definition: pixfmt.h:194
uninit
static void uninit(AVBSFContext *ctx)
Definition: pcm_rechunk.c:68
VDPAUHWContext::reset
char reset
Definition: vdpau_internal.h:69
AVCodecContext::hwaccel_flags
int hwaccel_flags
Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated decoding (if active).
Definition: avcodec.h:1506
vdpau_picture_context::bitstream_buffers
VdpBitstreamBuffer * bitstream_buffers
Table of bitstream buffers.
Definition: vdpau_internal.h:117
AV_CODEC_ID_HEVC
@ AV_CODEC_ID_HEVC
Definition: codec_id.h:226
av_vdpau_alloc_context
AVVDPAUContext * av_vdpau_alloc_context(void)
Allocate an AVVDPAUContext.
Definition: vdpau.c:408
AVVDPAU_Render2
int(* AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *, const VdpPictureInfo *, uint32_t, const VdpBitstreamBuffer *)
Definition: vdpau.h:62
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:254
VDPAUHWContext::context
AVVDPAUContext context
Definition: vdpau_internal.h:66
AV_HWDEVICE_TYPE_VDPAU
@ AV_HWDEVICE_TYPE_VDPAU
Definition: hwcontext.h:29
profile
int profile
Definition: mxfenc.c:2226
AVCodecContext::hw_frames_ctx
AVBufferRef * hw_frames_ctx
A reference to the AVHWFramesContext describing the input (for encoding) or output (decoding) frames.
Definition: avcodec.h:1475
avcodec.h
AVHWFramesContext
This struct describes a set or pool of "hardware" frames (i.e.
Definition: hwcontext.h:115
ret
ret
Definition: filter_design.txt:187
AVHWFramesContext::device_ctx
AVHWDeviceContext * device_ctx
The parent AVHWDeviceContext.
Definition: hwcontext.h:134
VDPAUContext::get_proc_address
VdpGetProcAddress * get_proc_address
VDPAU device driver.
Definition: vdpau_internal.h:87
AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUV420P12
Definition: pixfmt.h:482
AVVDPAUContext::decoder
VdpDecoder decoder
VDPAU decoder handle.
Definition: vdpau.h:84
vdpau_picture_context::bitstream_buffers_allocated
int bitstream_buffers_allocated
Allocated size of the bitstream_buffers table.
Definition: vdpau_internal.h:107
AVCodecContext
main external API structure.
Definition: avcodec.h:445
status
ov_status_e status
Definition: dnn_backend_openvino.c:120
vdpau_picture_context::info
union VDPAUPictureInfo info
VDPAU picture information.
Definition: vdpau_internal.h:102
buffer
the frame and frame reference mechanism is intended to as much as expensive copies of that data while still allowing the filters to produce correct results The data is stored in buffers represented by AVFrame structures Several references can point to the same frame buffer
Definition: filter_design.txt:49
Picture::f
struct AVFrame * f
Definition: mpegpicture.h:47
AV_PIX_FMT_YUV444P
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:78
FF_DISABLE_DEPRECATION_WARNINGS
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:72
AVCodecContext::coded_width
int coded_width
Bitstream width / height, may be different from width/height e.g.
Definition: avcodec.h:633
vdpau_error
static int vdpau_error(VdpStatus status)
Definition: vdpau.c:43
AV_PIX_FMT_YUV422P
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:77
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
av_alloc_vdpaucontext
AVVDPAUContext * av_alloc_vdpaucontext(void)
allocation function for AVVDPAUContext
Definition: vdpau.c:68
VDPAUHWContext::flags
unsigned char flags
Definition: vdpau_internal.h:70
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:472
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:34
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:482
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVVDPAUContext::render
VdpDecoderRender * render
VDPAU decoder render callback.
Definition: vdpau.h:91
h
h
Definition: vp9dsp_template.c:2038
AVCodecContext::sw_pix_fmt
enum AVPixelFormat sw_pix_fmt
Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:664
AVVDPAUDeviceContext::device
VdpDevice device
Definition: hwcontext_vdpau.h:36
MpegEncContext
MpegEncContext.
Definition: mpegvideo.h:67