Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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.  
  33. #include "libavutil/frame.h"
  34.  
  35. #include "avcodec.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. struct vdpau_picture_context;
  44. #if CONFIG_VDPAU
  45. union VDPAUPictureInfo {
  46.     VdpPictureInfoH264        h264;
  47.     VdpPictureInfoMPEG1Or2    mpeg;
  48.     VdpPictureInfoVC1          vc1;
  49.     VdpPictureInfoMPEG4Part2 mpeg4;
  50. #ifdef VDP_DECODER_PROFILE_H264_HIGH_444_PREDICTIVE
  51.     VdpPictureInfoH264Predictive h264_predictive;
  52. #endif
  53. #ifdef VDP_DECODER_PROFILE_HEVC_MAIN
  54.     VdpPictureInfoHEVC        hevc;
  55. #endif
  56. };
  57.  
  58. #include "vdpau.h"
  59.  
  60. typedef struct VDPAUHWContext {
  61.     AVVDPAUContext context;
  62.     VdpDevice device;
  63.     VdpGetProcAddress *get_proc_address;
  64.     char reset;
  65.     unsigned char flags;
  66. } VDPAUHWContext;
  67.  
  68. typedef struct VDPAUContext {
  69.     /**
  70.      * VDPAU device handle
  71.      */
  72.     VdpDevice device;
  73.  
  74.     /**
  75.      * VDPAU decoder handle
  76.      */
  77.     VdpDecoder decoder;
  78.  
  79.     /**
  80.      * VDPAU device driver
  81.      */
  82.     VdpGetProcAddress *get_proc_address;
  83.  
  84.     /**
  85.      * VDPAU decoder render callback
  86.      */
  87.     VdpDecoderRender *render;
  88.  
  89.     uint32_t width;
  90.     uint32_t height;
  91. } VDPAUContext;
  92.  
  93. struct vdpau_picture_context {
  94.     /**
  95.      * VDPAU picture information.
  96.      */
  97.     union VDPAUPictureInfo info;
  98.  
  99.     /**
  100.      * Allocated size of the bitstream_buffers table.
  101.      */
  102.     int bitstream_buffers_allocated;
  103.  
  104.     /**
  105.      * Useful bitstream buffers in the bitstream buffers table.
  106.      */
  107.     int bitstream_buffers_used;
  108.  
  109.    /**
  110.      * Table of bitstream buffers.
  111.      */
  112.     VdpBitstreamBuffer *bitstream_buffers;
  113. };
  114.  
  115. int ff_vdpau_common_init(AVCodecContext *avctx, VdpDecoderProfile profile,
  116.                          int level);
  117. #endif //CONFIG_VDPAU
  118.  
  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.  
  129. #endif /* AVCODEC_VDPAU_INTERNAL_H */
  130.