annotate vdpau.h @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 190efe3dee2b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8808
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
1 /*
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
2 * The Video Decode and Presentation API for UNIX (VDPAU) is used for
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
3 * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1.
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
4 *
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
5 * Copyright (C) 2008 NVIDIA
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
6 *
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
7 * This file is part of FFmpeg.
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
8 *
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
9 * FFmpeg is free software; you can redistribute it and/or
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
10 * modify it under the terms of the GNU Lesser General Public
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
11 * License as published by the Free Software Foundation; either
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
12 * version 2.1 of the License, or (at your option) any later version.
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
13 *
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
14 * FFmpeg is distributed in the hope that it will be useful,
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
17 * Lesser General Public License for more details.
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
18 *
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
19 * You should have received a copy of the GNU Lesser General Public
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
20 * License along with FFmpeg; if not, write to the Free Software
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
22 */
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
23
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
24 #ifndef AVCODEC_VDPAU_H
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
25 #define AVCODEC_VDPAU_H
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
26
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
27 /**
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
28 * \defgroup Decoder VDPAU Decoder and Renderer
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
29 *
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
30 * VDPAU hardware acceleration has two modules
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
31 * - VDPAU decoding
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
32 * - VDPAU presentation
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
33 *
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
34 * The VDPAU decoding module parses all headers using FFmpeg
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
35 * parsing mechanisms and uses VDPAU for the actual decoding.
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
36 *
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
37 * As per the current implementation, the actual decoding
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
38 * and rendering (API calls) are done as part of the VDPAU
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
39 * presentation (vo_vdpau.c) module.
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
40 *
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
41 * \defgroup VDPAU_Decoding VDPAU Decoding
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
42 * \ingroup Decoder
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
43 * @{
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
44 */
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
45
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
46 #include <vdpau/vdpau.h>
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
47 #include <vdpau/vdpau_x11.h>
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
48
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
49 /** \brief The videoSurface is used for rendering. */
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
50 #define FF_VDPAU_STATE_USED_FOR_RENDER 1
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
51
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
52 /**
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
53 * \brief The videoSurface is needed for reference/prediction.
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
54 * The codec manipulates this.
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
55 */
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
56 #define FF_VDPAU_STATE_USED_FOR_REFERENCE 2
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
57
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
58 /**
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
59 * \brief This structure is used as a callback between the FFmpeg
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
60 * decoder (vd_) and presentation (vo_) module.
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
61 * This is used for defining a video frame containing surface,
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
62 * picture parameter, bitstream information etc which are passed
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
63 * between the FFmpeg decoder and its clients.
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
64 */
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
65 struct vdpau_render_state {
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
66 VdpVideoSurface surface; ///< Used as rendered surface, never changed.
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
67
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
68 int state; ///< Holds FF_VDPAU_STATE_* values.
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
69
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
70 /** picture parameter information for all supported codecs */
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
71 union VdpPictureInfo {
10534
4cd2ef16fb63 Cosmetics: Fix indentation.
cehoyos
parents: 10509
diff changeset
72 VdpPictureInfoH264 h264;
4cd2ef16fb63 Cosmetics: Fix indentation.
cehoyos
parents: 10509
diff changeset
73 VdpPictureInfoMPEG1Or2 mpeg;
4cd2ef16fb63 Cosmetics: Fix indentation.
cehoyos
parents: 10509
diff changeset
74 VdpPictureInfoVC1 vc1;
10509
cdf5b1ed3500 Add VDPAU hardware accelerated decoding for MPEG-4 ASP which can be used
cehoyos
parents: 10454
diff changeset
75 VdpPictureInfoMPEG4Part2 mpeg4;
8808
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
76 } info;
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
77
10454
7a0648324174 Clarify responsibility for freeing a buffer when using vdpau.
cehoyos
parents: 8829
diff changeset
78 /** Describe size/location of the compressed video data.
7a0648324174 Clarify responsibility for freeing a buffer when using vdpau.
cehoyos
parents: 8829
diff changeset
79 Set to 0 when freeing bitstream_buffers. */
8808
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
80 int bitstream_buffers_allocated;
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
81 int bitstream_buffers_used;
10454
7a0648324174 Clarify responsibility for freeing a buffer when using vdpau.
cehoyos
parents: 8829
diff changeset
82 /** The user is responsible for freeing this buffer using av_freep(). */
8808
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
83 VdpBitstreamBuffer *bitstream_buffers;
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
84 };
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
85
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
86 /* @}*/
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
87
36f2dabd58c9 Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff changeset
88 #endif /* AVCODEC_VDPAU_H */