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 "config.h" 28#include <stdint.h> 29#if CONFIG_VDPAU 30#include <vdpau/vdpau.h> 31#endif 32#include "h264.h" 33 34#include "avcodec.h" 35#include "mpeg4video.h" 36#include "mpegvideo.h" 37#include "version.h" 38 39/** Extract VdpVideoSurface from an AVFrame */ 40static inline uintptr_t ff_vdpau_get_surface_id(AVFrame *pic) 41{ 42 return (uintptr_t)pic->data[3]; 43} 44 45struct vdpau_picture_context; 46#if CONFIG_VDPAU 47#if !FF_API_BUFS_VDPAU 48union AVVDPAUPictureInfo { 49 VdpPictureInfoH264 h264; 50 VdpPictureInfoMPEG1Or2 mpeg; 51 VdpPictureInfoVC1 vc1; 52 VdpPictureInfoMPEG4Part2 mpeg4; 53}; 54#else 55#include "vdpau.h" 56#endif 57 58struct vdpau_picture_context { 59 /** 60 * VDPAU picture information. 61 */ 62 union AVVDPAUPictureInfo info; 63 64 /** 65 * Allocated size of the bitstream_buffers table. 66 */ 67 int bitstream_buffers_allocated; 68 69 /** 70 * Useful bitstream buffers in the bitstream buffers table. 71 */ 72 int bitstream_buffers_used; 73 74 /** 75 * Table of bitstream buffers. 76 */ 77 VdpBitstreamBuffer *bitstream_buffers; 78}; 79#endif 80 81int ff_vdpau_common_start_frame(struct vdpau_picture_context *pic, 82 const uint8_t *buffer, uint32_t size); 83int ff_vdpau_mpeg_end_frame(AVCodecContext *avctx); 84int ff_vdpau_add_buffer(struct vdpau_picture_context *pic, const uint8_t *buf, 85 uint32_t buf_size); 86 87 88void ff_vdpau_add_data_chunk(uint8_t *data, const uint8_t *buf, 89 int buf_size); 90 91void ff_vdpau_mpeg_picture_complete(MpegEncContext *s, const uint8_t *buf, 92 int buf_size, int slice_count); 93 94void ff_vdpau_h264_picture_start(H264Context *h); 95void ff_vdpau_h264_set_reference_frames(H264Context *h); 96void ff_vdpau_h264_picture_complete(H264Context *h); 97 98void ff_vdpau_vc1_decode_picture(MpegEncContext *s, const uint8_t *buf, 99 int buf_size); 100 101void ff_vdpau_mpeg4_decode_picture(Mpeg4DecContext *s, const uint8_t *buf, 102 int buf_size); 103 104#endif /* AVCODEC_VDPAU_INTERNAL_H */ 105