tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

vda.h (4928B)


      1 /*
      2 * VDA HW acceleration
      3 *
      4 * copyright (c) 2011 Sebastien Zwickert
      5 *
      6 * This file is part of Libav.
      7 *
      8 * Libav 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 * Libav 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 Libav; 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 "libavcodec/version.h"
     33 
     34 #if FF_API_VDA_ASYNC
     35 #include <pthread.h>
     36 #endif
     37 
     38 #include <stdint.h>
     39 
     40 // emmintrin.h is unable to compile with -std=c99 -Werror=missing-prototypes
     41 // http://openradar.appspot.com/8026390
     42 #undef __GNUC_STDC_INLINE__
     43 
     44 #define Picture QuickdrawPicture
     45 #include <VideoDecodeAcceleration/VDADecoder.h>
     46 #undef Picture
     47 
     48 /**
     49 * @defgroup lavc_codec_hwaccel_vda VDA
     50 * @ingroup lavc_codec_hwaccel
     51 *
     52 * @{
     53 */
     54 
     55 #if FF_API_VDA_ASYNC
     56 /**
     57 * This structure is used to store decoded frame information and data.
     58 *
     59 * @deprecated Use synchronous decoding mode.
     60 */
     61 typedef struct vda_frame {
     62    /**
     63     * The PTS of the frame.
     64     *
     65     * - encoding: unused
     66     * - decoding: Set/Unset by libavcodec.
     67     */
     68    int64_t             pts;
     69 
     70    /**
     71     * The CoreVideo buffer that contains the decoded data.
     72     *
     73     * - encoding: unused
     74     * - decoding: Set/Unset by libavcodec.
     75     */
     76    CVPixelBufferRef    cv_buffer;
     77 
     78    /**
     79     * A pointer to the next frame.
     80     *
     81     * - encoding: unused
     82     * - decoding: Set/Unset by libavcodec.
     83     */
     84    struct vda_frame    *next_frame;
     85 } vda_frame;
     86 #endif
     87 
     88 /**
     89 * This structure is used to provide the necessary configurations and data
     90 * to the VDA Libav HWAccel implementation.
     91 *
     92 * The application must make it available as AVCodecContext.hwaccel_context.
     93 */
     94 struct vda_context {
     95    /**
     96     * VDA decoder object.
     97     *
     98     * - encoding: unused
     99     * - decoding: Set/Unset by libavcodec.
    100     */
    101    VDADecoder          decoder;
    102 
    103    /**
    104     * The Core Video pixel buffer that contains the current image data.
    105     *
    106     * encoding: unused
    107     * decoding: Set by libavcodec. Unset by user.
    108     */
    109    CVPixelBufferRef    cv_buffer;
    110 
    111    /**
    112     * Use the hardware decoder in synchronous mode.
    113     *
    114     * encoding: unused
    115     * decoding: Set by user.
    116     */
    117    int                 use_sync_decoding;
    118 
    119 #if FF_API_VDA_ASYNC
    120    /**
    121     * VDA frames queue ordered by presentation timestamp.
    122     *
    123     * @deprecated Use synchronous decoding mode.
    124     *
    125     * - encoding: unused
    126     * - decoding: Set/Unset by libavcodec.
    127     */
    128    vda_frame           *queue;
    129 
    130    /**
    131     * Mutex for locking queue operations.
    132     *
    133     * @deprecated Use synchronous decoding mode.
    134     *
    135     * - encoding: unused
    136     * - decoding: Set/Unset by libavcodec.
    137     */
    138    pthread_mutex_t     queue_mutex;
    139 #endif
    140 
    141    /**
    142     * The frame width.
    143     *
    144     * - encoding: unused
    145     * - decoding: Set/Unset by user.
    146     */
    147    int                 width;
    148 
    149    /**
    150     * The frame height.
    151     *
    152     * - encoding: unused
    153     * - decoding: Set/Unset by user.
    154     */
    155    int                 height;
    156 
    157    /**
    158     * The frame format.
    159     *
    160     * - encoding: unused
    161     * - decoding: Set/Unset by user.
    162     */
    163    int                 format;
    164 
    165    /**
    166     * The pixel format for output image buffers.
    167     *
    168     * - encoding: unused
    169     * - decoding: Set/Unset by user.
    170     */
    171    OSType              cv_pix_fmt_type;
    172 
    173    /**
    174     * The current bitstream buffer.
    175     */
    176    uint8_t             *priv_bitstream;
    177 
    178    /**
    179     * The current size of the bitstream.
    180     */
    181    int                 priv_bitstream_size;
    182 
    183    /**
    184     * The reference size used for fast reallocation.
    185     */
    186    int                 priv_allocated_size;
    187 };
    188 
    189 /** Create the video decoder. */
    190 int ff_vda_create_decoder(struct vda_context *vda_ctx,
    191                          uint8_t *extradata,
    192                          int extradata_size);
    193 
    194 /** Destroy the video decoder. */
    195 int ff_vda_destroy_decoder(struct vda_context *vda_ctx);
    196 
    197 #if FF_API_VDA_ASYNC
    198 /**
    199 * Return the top frame of the queue.
    200 *
    201 * @deprecated Use synchronous decoding mode.
    202 */
    203 vda_frame *ff_vda_queue_pop(struct vda_context *vda_ctx);
    204 
    205 /**
    206 * Release the given frame.
    207 *
    208 * @deprecated Use synchronous decoding mode.
    209 */
    210 void ff_vda_release_vda_frame(vda_frame *frame);
    211 #endif
    212 
    213 /**
    214 * @}
    215 */
    216 
    217 #endif /* AVCODEC_VDA_H */