GCC Code Coverage Report
Directory: ../../../ffmpeg/ Exec Total Coverage
File: src/libavcodec/vdpau_internal.h Lines: 0 2 0.0 %
Date: 2020-10-23 17:01:47 Branches: 0 0 - %

Line Branch Exec Source
1
/*
2
 * Video Decode and Presentation API for UNIX (VDPAU) is used for
3
 * HW decode acceleration for MPEG-1/2, 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
#ifndef AVCODEC_VDPAU_INTERNAL_H
25
#define AVCODEC_VDPAU_INTERNAL_H
26
27
#include <stdint.h>
28
#include <vdpau/vdpau.h>
29
30
#include "libavutil/frame.h"
31
#include "libavutil/hwcontext.h"
32
#include "libavutil/hwcontext_vdpau.h"
33
34
#include "avcodec.h"
35
#include "vdpau.h"
36
37
/** Extract VdpVideoSurface from an AVFrame */
38
static inline uintptr_t ff_vdpau_get_surface_id(AVFrame *pic)
39
{
40
    return (uintptr_t)pic->data[3];
41
}
42
43
union VDPAUPictureInfo {
44
    VdpPictureInfoH264        h264;
45
    VdpPictureInfoMPEG1Or2    mpeg;
46
    VdpPictureInfoVC1          vc1;
47
    VdpPictureInfoMPEG4Part2 mpeg4;
48
#ifdef VDP_DECODER_PROFILE_H264_HIGH_444_PREDICTIVE
49
    VdpPictureInfoH264Predictive h264_predictive;
50
#endif
51
#ifdef VDP_DECODER_PROFILE_HEVC_MAIN
52
    VdpPictureInfoHEVC        hevc;
53
#endif
54
#ifdef VDP_YCBCR_FORMAT_Y_U_V_444
55
    VdpPictureInfoHEVC444     hevc_444;
56
#endif
57
#ifdef VDP_DECODER_PROFILE_VP9_PROFILE_0
58
    VdpPictureInfoVP9        vp9;
59
#endif
60
};
61
62
typedef struct VDPAUHWContext {
63
    AVVDPAUContext context;
64
    VdpDevice device;
65
    VdpGetProcAddress *get_proc_address;
66
    char reset;
67
    unsigned char flags;
68
} VDPAUHWContext;
69
70
typedef struct VDPAUContext {
71
    /**
72
     * VDPAU device handle
73
     */
74
    VdpDevice device;
75
76
    /**
77
     * VDPAU decoder handle
78
     */
79
    VdpDecoder decoder;
80
81
    /**
82
     * VDPAU device driver
83
     */
84
    VdpGetProcAddress *get_proc_address;
85
86
    /**
87
     * VDPAU decoder render callback
88
     */
89
    VdpDecoderRender *render;
90
91
    uint32_t width;
92
    uint32_t height;
93
} VDPAUContext;
94
95
struct vdpau_picture_context {
96
    /**
97
     * VDPAU picture information.
98
     */
99
    union VDPAUPictureInfo info;
100
101
    /**
102
     * Allocated size of the bitstream_buffers table.
103
     */
104
    int bitstream_buffers_allocated;
105
106
    /**
107
     * Useful bitstream buffers in the bitstream buffers table.
108
     */
109
    int bitstream_buffers_used;
110
111
   /**
112
     * Table of bitstream buffers.
113
     */
114
    VdpBitstreamBuffer *bitstream_buffers;
115
};
116
117
int ff_vdpau_common_init(AVCodecContext *avctx, VdpDecoderProfile profile,
118
                         int level);
119
int ff_vdpau_common_uninit(AVCodecContext *avctx);
120
121
int ff_vdpau_common_start_frame(struct vdpau_picture_context *pic,
122
                                const uint8_t *buffer, uint32_t size);
123
int ff_vdpau_common_end_frame(AVCodecContext *avctx, AVFrame *frame,
124
                              struct vdpau_picture_context *pic);
125
int ff_vdpau_mpeg_end_frame(AVCodecContext *avctx);
126
int ff_vdpau_add_buffer(struct vdpau_picture_context *pic, const uint8_t *buf,
127
                        uint32_t buf_size);
128
int ff_vdpau_common_frame_params(AVCodecContext *avctx,
129
                                 AVBufferRef *hw_frames_ctx);
130
131
#endif /* AVCODEC_VDPAU_INTERNAL_H */