duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

buffersrc.h (6747B)


      1 /*
      2  * This file is part of FFmpeg.
      3  *
      4  * FFmpeg is free software; you can redistribute it and/or
      5  * modify it under the terms of the GNU Lesser General Public
      6  * License as published by the Free Software Foundation; either
      7  * version 2.1 of the License, or (at your option) any later version.
      8  *
      9  * FFmpeg is distributed in the hope that it will be useful,
     10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12  * Lesser General Public License for more details.
     13  *
     14  * You should have received a copy of the GNU Lesser General Public
     15  * License along with FFmpeg; if not, write to the Free Software
     16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     17  */
     18 
     19 #ifndef AVFILTER_BUFFERSRC_H
     20 #define AVFILTER_BUFFERSRC_H
     21 
     22 /**
     23  * @file
     24  * @ingroup lavfi_buffersrc
     25  * Memory buffer source API.
     26  */
     27 
     28 #include "avfilter.h"
     29 
     30 /**
     31  * @defgroup lavfi_buffersrc Buffer source API
     32  * @ingroup lavfi
     33  * @{
     34  */
     35 
     36 enum {
     37 
     38     /**
     39      * Do not check for format changes.
     40      */
     41     AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT = 1,
     42 
     43     /**
     44      * Immediately push the frame to the output.
     45      */
     46     AV_BUFFERSRC_FLAG_PUSH = 4,
     47 
     48     /**
     49      * Keep a reference to the frame.
     50      * If the frame if reference-counted, create a new reference; otherwise
     51      * copy the frame data.
     52      */
     53     AV_BUFFERSRC_FLAG_KEEP_REF = 8,
     54 
     55 };
     56 
     57 /**
     58  * Get the number of failed requests.
     59  *
     60  * A failed request is when the request_frame method is called while no
     61  * frame is present in the buffer.
     62  * The number is reset when a frame is added.
     63  */
     64 unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src);
     65 
     66 /**
     67  * This structure contains the parameters describing the frames that will be
     68  * passed to this filter.
     69  *
     70  * It should be allocated with av_buffersrc_parameters_alloc() and freed with
     71  * av_free(). All the allocated fields in it remain owned by the caller.
     72  */
     73 typedef struct AVBufferSrcParameters {
     74     /**
     75      * video: the pixel format, value corresponds to enum AVPixelFormat
     76      * audio: the sample format, value corresponds to enum AVSampleFormat
     77      */
     78     int format;
     79     /**
     80      * The timebase to be used for the timestamps on the input frames.
     81      */
     82     AVRational time_base;
     83 
     84     /**
     85      * Video only, the display dimensions of the input frames.
     86      */
     87     int width, height;
     88 
     89     /**
     90      * Video only, the sample (pixel) aspect ratio.
     91      */
     92     AVRational sample_aspect_ratio;
     93 
     94     /**
     95      * Video only, the frame rate of the input video. This field must only be
     96      * set to a non-zero value if input stream has a known constant framerate
     97      * and should be left at its initial value if the framerate is variable or
     98      * unknown.
     99      */
    100     AVRational frame_rate;
    101 
    102     /**
    103      * Video with a hwaccel pixel format only. This should be a reference to an
    104      * AVHWFramesContext instance describing the input frames.
    105      */
    106     AVBufferRef *hw_frames_ctx;
    107 
    108     /**
    109      * Audio only, the audio sampling rate in samples per second.
    110      */
    111     int sample_rate;
    112 
    113     /**
    114      * Audio only, the audio channel layout
    115      */
    116     AVChannelLayout ch_layout;
    117 
    118     /**
    119      * Video only, the YUV colorspace and range.
    120      */
    121     enum AVColorSpace color_space;
    122     enum AVColorRange color_range;
    123 } AVBufferSrcParameters;
    124 
    125 /**
    126  * Allocate a new AVBufferSrcParameters instance. It should be freed by the
    127  * caller with av_free().
    128  */
    129 AVBufferSrcParameters *av_buffersrc_parameters_alloc(void);
    130 
    131 /**
    132  * Initialize the buffersrc or abuffersrc filter with the provided parameters.
    133  * This function may be called multiple times, the later calls override the
    134  * previous ones. Some of the parameters may also be set through AVOptions, then
    135  * whatever method is used last takes precedence.
    136  *
    137  * @param ctx an instance of the buffersrc or abuffersrc filter
    138  * @param param the stream parameters. The frames later passed to this filter
    139  *              must conform to those parameters. All the allocated fields in
    140  *              param remain owned by the caller, libavfilter will make internal
    141  *              copies or references when necessary.
    142  * @return 0 on success, a negative AVERROR code on failure.
    143  */
    144 int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *param);
    145 
    146 /**
    147  * Add a frame to the buffer source.
    148  *
    149  * @param ctx   an instance of the buffersrc filter
    150  * @param frame frame to be added. If the frame is reference counted, this
    151  * function will make a new reference to it. Otherwise the frame data will be
    152  * copied.
    153  *
    154  * @return 0 on success, a negative AVERROR on error
    155  *
    156  * This function is equivalent to av_buffersrc_add_frame_flags() with the
    157  * AV_BUFFERSRC_FLAG_KEEP_REF flag.
    158  */
    159 av_warn_unused_result
    160 int av_buffersrc_write_frame(AVFilterContext *ctx, const AVFrame *frame);
    161 
    162 /**
    163  * Add a frame to the buffer source.
    164  *
    165  * @param ctx   an instance of the buffersrc filter
    166  * @param frame frame to be added. If the frame is reference counted, this
    167  * function will take ownership of the reference(s) and reset the frame.
    168  * Otherwise the frame data will be copied. If this function returns an error,
    169  * the input frame is not touched.
    170  *
    171  * @return 0 on success, a negative AVERROR on error.
    172  *
    173  * @note the difference between this function and av_buffersrc_write_frame() is
    174  * that av_buffersrc_write_frame() creates a new reference to the input frame,
    175  * while this function takes ownership of the reference passed to it.
    176  *
    177  * This function is equivalent to av_buffersrc_add_frame_flags() without the
    178  * AV_BUFFERSRC_FLAG_KEEP_REF flag.
    179  */
    180 av_warn_unused_result
    181 int av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame);
    182 
    183 /**
    184  * Add a frame to the buffer source.
    185  *
    186  * By default, if the frame is reference-counted, this function will take
    187  * ownership of the reference(s) and reset the frame. This can be controlled
    188  * using the flags.
    189  *
    190  * If this function returns an error, the input frame is not touched.
    191  *
    192  * @param buffer_src  pointer to a buffer source context
    193  * @param frame       a frame, or NULL to mark EOF
    194  * @param flags       a combination of AV_BUFFERSRC_FLAG_*
    195  * @return            >= 0 in case of success, a negative AVERROR code
    196  *                    in case of failure
    197  */
    198 av_warn_unused_result
    199 int av_buffersrc_add_frame_flags(AVFilterContext *buffer_src,
    200                                  AVFrame *frame, int flags);
    201 
    202 /**
    203  * Close the buffer source after EOF.
    204  *
    205  * This is similar to passing NULL to av_buffersrc_add_frame_flags()
    206  * except it takes the timestamp of the EOF, i.e. the timestamp of the end
    207  * of the last frame.
    208  */
    209 int av_buffersrc_close(AVFilterContext *ctx, int64_t pts, unsigned flags);
    210 
    211 /**
    212  * @}
    213  */
    214 
    215 #endif /* AVFILTER_BUFFERSRC_H */