Home | History | Annotate | Download | only in libavcodec
      1 /*
      2  * VDA HW acceleration
      3  *
      4  * copyright (c) 2011 Sebastien Zwickert
      5  *
      6  * This file is part of FFmpeg.
      7  *
      8  * FFmpeg is free software; you can redistribute it and/or
      9  * modify it under the terms of the GNU Lesser General Public
     10  * License as published by the Free Software Foundation; either
     11  * version 2.1 of the License, or (at your option) any later version.
     12  *
     13  * FFmpeg is distributed in the hope that it will be useful,
     14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     16  * Lesser General Public License for more details.
     17  *
     18  * You should have received a copy of the GNU Lesser General Public
     19  * License along with FFmpeg; if not, write to the Free Software
     20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     21  */
     22 
     23 #ifndef AVCODEC_VDA_H
     24 #define AVCODEC_VDA_H
     25 
     26 /**
     27  * @file
     28  * @ingroup lavc_codec_hwaccel_vda
     29  * Public libavcodec VDA header.
     30  */
     31 
     32 #include <stdint.h>
     33 
     34 // emmintrin.h is unable to compile with -std=c99 -Werror=missing-prototypes
     35 // http://openradar.appspot.com/8026390
     36 #undef __GNUC_STDC_INLINE__
     37 
     38 #define Picture QuickdrawPicture
     39 #include <VideoDecodeAcceleration/VDADecoder.h>
     40 #undef Picture
     41 
     42 #include "libavcodec/version.h"
     43 
     44 /**
     45  * @defgroup lavc_codec_hwaccel_vda VDA
     46  * @ingroup lavc_codec_hwaccel
     47  *
     48  * @{
     49  */
     50 
     51 /**
     52  * This structure is used to provide the necessary configurations and data
     53  * to the VDA FFmpeg HWAccel implementation.
     54  *
     55  * The application must make it available as AVCodecContext.hwaccel_context.
     56  */
     57 struct vda_context {
     58     /**
     59      * VDA decoder object.
     60      *
     61      * - encoding: unused
     62      * - decoding: Set/Unset by libavcodec.
     63      */
     64     VDADecoder          decoder;
     65 
     66     /**
     67      * The Core Video pixel buffer that contains the current image data.
     68      *
     69      * encoding: unused
     70      * decoding: Set by libavcodec. Unset by user.
     71      */
     72     CVPixelBufferRef    cv_buffer;
     73 
     74     /**
     75      * Use the hardware decoder in synchronous mode.
     76      *
     77      * encoding: unused
     78      * decoding: Set by user.
     79      */
     80     int                 use_sync_decoding;
     81 
     82     /**
     83      * The frame width.
     84      *
     85      * - encoding: unused
     86      * - decoding: Set/Unset by user.
     87      */
     88     int                 width;
     89 
     90     /**
     91      * The frame height.
     92      *
     93      * - encoding: unused
     94      * - decoding: Set/Unset by user.
     95      */
     96     int                 height;
     97 
     98     /**
     99      * The frame format.
    100      *
    101      * - encoding: unused
    102      * - decoding: Set/Unset by user.
    103      */
    104     int                 format;
    105 
    106     /**
    107      * The pixel format for output image buffers.
    108      *
    109      * - encoding: unused
    110      * - decoding: Set/Unset by user.
    111      */
    112     OSType              cv_pix_fmt_type;
    113 
    114     /**
    115      * The current bitstream buffer.
    116      *
    117      * - encoding: unused
    118      * - decoding: Set/Unset by libavcodec.
    119      */
    120     uint8_t             *priv_bitstream;
    121 
    122     /**
    123      * The current size of the bitstream.
    124      *
    125      * - encoding: unused
    126      * - decoding: Set/Unset by libavcodec.
    127      */
    128     int                 priv_bitstream_size;
    129 
    130     /**
    131      * The reference size used for fast reallocation.
    132      *
    133      * - encoding: unused
    134      * - decoding: Set/Unset by libavcodec.
    135      */
    136     int                 priv_allocated_size;
    137 
    138     /**
    139      * Use av_buffer to manage buffer.
    140      * When the flag is set, the CVPixelBuffers returned by the decoder will
    141      * be released automatically, so you have to retain them if necessary.
    142      * Not setting this flag may cause memory leak.
    143      *
    144      * encoding: unused
    145      * decoding: Set by user.
    146      */
    147     int                 use_ref_buffer;
    148 };
    149 
    150 /** Create the video decoder. */
    151 int ff_vda_create_decoder(struct vda_context *vda_ctx,
    152                           uint8_t *extradata,
    153                           int extradata_size);
    154 
    155 /** Destroy the video decoder. */
    156 int ff_vda_destroy_decoder(struct vda_context *vda_ctx);
    157 
    158 /**
    159  * @}
    160  */
    161 
    162 #endif /* AVCODEC_VDA_H */
    163