Compare commits
2 Commits
master
...
ffmpeg_4.4
| Author | SHA1 | Date |
|---|---|---|
|
|
7b8a50019b | 3 years ago |
|
|
1d0c9af7d8 | 4 years ago |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,36 @@ |
||||
/*
|
||||
* AC-3 parser prototypes |
||||
* Copyright (c) 2003 Fabrice Bellard |
||||
* Copyright (c) 2003 Michael Niedermayer |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_AC3_PARSER_H |
||||
#define AVCODEC_AC3_PARSER_H |
||||
|
||||
#include <stddef.h> |
||||
#include <stdint.h> |
||||
|
||||
/**
|
||||
* Extract the bitstream ID and the frame size from AC-3 data. |
||||
*/ |
||||
int av_ac3_parse_header(const uint8_t *buf, size_t size, |
||||
uint8_t *bitstream_id, uint16_t *frame_size); |
||||
|
||||
|
||||
#endif /* AVCODEC_AC3_PARSER_H */ |
||||
@ -0,0 +1,37 @@ |
||||
/*
|
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_ADTS_PARSER_H |
||||
#define AVCODEC_ADTS_PARSER_H |
||||
|
||||
#include <stddef.h> |
||||
#include <stdint.h> |
||||
|
||||
#define AV_AAC_ADTS_HEADER_SIZE 7 |
||||
|
||||
/**
|
||||
* Extract the number of samples and frames from AAC data. |
||||
* @param[in] buf pointer to AAC data buffer |
||||
* @param[out] samples Pointer to where number of samples is written |
||||
* @param[out] frames Pointer to where number of frames is written |
||||
* @return Returns 0 on success, error code on failure. |
||||
*/ |
||||
int av_adts_header_parse(const uint8_t *buf, uint32_t *samples, |
||||
uint8_t *frames); |
||||
|
||||
#endif /* AVCODEC_ADTS_PARSER_H */ |
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,88 @@ |
||||
/*
|
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_AVDCT_H |
||||
#define AVCODEC_AVDCT_H |
||||
|
||||
#include "libavutil/opt.h" |
||||
|
||||
/**
|
||||
* AVDCT context. |
||||
* @note function pointers can be NULL if the specific features have been |
||||
* disabled at build time. |
||||
*/ |
||||
typedef struct AVDCT { |
||||
const AVClass *av_class; |
||||
|
||||
void (*idct)(int16_t *block /* align 16 */); |
||||
|
||||
/**
|
||||
* IDCT input permutation. |
||||
* Several optimized IDCTs need a permutated input (relative to the |
||||
* normal order of the reference IDCT). |
||||
* This permutation must be performed before the idct_put/add. |
||||
* Note, normally this can be merged with the zigzag/alternate scan<br> |
||||
* An example to avoid confusion: |
||||
* - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...) |
||||
* - (x -> reference DCT -> reference IDCT -> x) |
||||
* - (x -> reference DCT -> simple_mmx_perm = idct_permutation |
||||
* -> simple_idct_mmx -> x) |
||||
* - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant |
||||
* -> simple_idct_mmx -> ...) |
||||
*/ |
||||
uint8_t idct_permutation[64]; |
||||
|
||||
void (*fdct)(int16_t *block /* align 16 */); |
||||
|
||||
|
||||
/**
|
||||
* DCT algorithm. |
||||
* must use AVOptions to set this field. |
||||
*/ |
||||
int dct_algo; |
||||
|
||||
/**
|
||||
* IDCT algorithm. |
||||
* must use AVOptions to set this field. |
||||
*/ |
||||
int idct_algo; |
||||
|
||||
void (*get_pixels)(int16_t *block /* align 16 */, |
||||
const uint8_t *pixels /* align 8 */, |
||||
ptrdiff_t line_size); |
||||
|
||||
int bits_per_sample; |
||||
|
||||
void (*get_pixels_unaligned)(int16_t *block /* align 16 */, |
||||
const uint8_t *pixels, |
||||
ptrdiff_t line_size); |
||||
} AVDCT; |
||||
|
||||
/**
|
||||
* Allocates a AVDCT context. |
||||
* This needs to be initialized with avcodec_dct_init() after optionally |
||||
* configuring it with AVOptions. |
||||
* |
||||
* To free it use av_free() |
||||
*/ |
||||
AVDCT *avcodec_dct_alloc(void); |
||||
int avcodec_dct_init(AVDCT *); |
||||
|
||||
const AVClass *avcodec_dct_get_class(void); |
||||
|
||||
#endif /* AVCODEC_AVDCT_H */ |
||||
@ -0,0 +1,118 @@ |
||||
/*
|
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_AVFFT_H |
||||
#define AVCODEC_AVFFT_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup lavc_fft |
||||
* FFT functions |
||||
*/ |
||||
|
||||
/**
|
||||
* @defgroup lavc_fft FFT functions |
||||
* @ingroup lavc_misc |
||||
* |
||||
* @{ |
||||
*/ |
||||
|
||||
typedef float FFTSample; |
||||
|
||||
typedef struct FFTComplex { |
||||
FFTSample re, im; |
||||
} FFTComplex; |
||||
|
||||
typedef struct FFTContext FFTContext; |
||||
|
||||
/**
|
||||
* Set up a complex FFT. |
||||
* @param nbits log2 of the length of the input array |
||||
* @param inverse if 0 perform the forward transform, if 1 perform the inverse |
||||
*/ |
||||
FFTContext *av_fft_init(int nbits, int inverse); |
||||
|
||||
/**
|
||||
* Do the permutation needed BEFORE calling ff_fft_calc(). |
||||
*/ |
||||
void av_fft_permute(FFTContext *s, FFTComplex *z); |
||||
|
||||
/**
|
||||
* Do a complex FFT with the parameters defined in av_fft_init(). The |
||||
* input data must be permuted before. No 1.0/sqrt(n) normalization is done. |
||||
*/ |
||||
void av_fft_calc(FFTContext *s, FFTComplex *z); |
||||
|
||||
void av_fft_end(FFTContext *s); |
||||
|
||||
FFTContext *av_mdct_init(int nbits, int inverse, double scale); |
||||
void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); |
||||
void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input); |
||||
void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); |
||||
void av_mdct_end(FFTContext *s); |
||||
|
||||
/* Real Discrete Fourier Transform */ |
||||
|
||||
enum RDFTransformType { |
||||
DFT_R2C, |
||||
IDFT_C2R, |
||||
IDFT_R2C, |
||||
DFT_C2R, |
||||
}; |
||||
|
||||
typedef struct RDFTContext RDFTContext; |
||||
|
||||
/**
|
||||
* Set up a real FFT. |
||||
* @param nbits log2 of the length of the input array |
||||
* @param trans the type of transform |
||||
*/ |
||||
RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans); |
||||
void av_rdft_calc(RDFTContext *s, FFTSample *data); |
||||
void av_rdft_end(RDFTContext *s); |
||||
|
||||
/* Discrete Cosine Transform */ |
||||
|
||||
typedef struct DCTContext DCTContext; |
||||
|
||||
enum DCTTransformType { |
||||
DCT_II = 0, |
||||
DCT_III, |
||||
DCT_I, |
||||
DST_I, |
||||
}; |
||||
|
||||
/**
|
||||
* Set up DCT. |
||||
* |
||||
* @param nbits size of the input array: |
||||
* (1 << nbits) for DCT-II, DCT-III and DST-I |
||||
* (1 << nbits) + 1 for DCT-I |
||||
* @param type the type of transform |
||||
* |
||||
* @note the first element of the input of DST-I is ignored |
||||
*/ |
||||
DCTContext *av_dct_init(int nbits, enum DCTTransformType type); |
||||
void av_dct_calc(DCTContext *s, FFTSample *data); |
||||
void av_dct_end (DCTContext *s); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* AVCODEC_AVFFT_H */ |
||||
@ -0,0 +1,325 @@ |
||||
/*
|
||||
* Bitstream filters public API |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_BSF_H |
||||
#define AVCODEC_BSF_H |
||||
|
||||
#include "libavutil/dict.h" |
||||
#include "libavutil/log.h" |
||||
#include "libavutil/rational.h" |
||||
|
||||
#include "codec_id.h" |
||||
#include "codec_par.h" |
||||
#include "packet.h" |
||||
|
||||
/**
|
||||
* @addtogroup lavc_core |
||||
* @{ |
||||
*/ |
||||
|
||||
typedef struct AVBSFInternal AVBSFInternal; |
||||
|
||||
/**
|
||||
* The bitstream filter state. |
||||
* |
||||
* This struct must be allocated with av_bsf_alloc() and freed with |
||||
* av_bsf_free(). |
||||
* |
||||
* The fields in the struct will only be changed (by the caller or by the |
||||
* filter) as described in their documentation, and are to be considered |
||||
* immutable otherwise. |
||||
*/ |
||||
typedef struct AVBSFContext { |
||||
/**
|
||||
* A class for logging and AVOptions |
||||
*/ |
||||
const AVClass *av_class; |
||||
|
||||
/**
|
||||
* The bitstream filter this context is an instance of. |
||||
*/ |
||||
const struct AVBitStreamFilter *filter; |
||||
|
||||
/**
|
||||
* Opaque libavcodec internal data. Must not be touched by the caller in any |
||||
* way. |
||||
*/ |
||||
AVBSFInternal *internal; |
||||
|
||||
/**
|
||||
* Opaque filter-specific private data. If filter->priv_class is non-NULL, |
||||
* this is an AVOptions-enabled struct. |
||||
*/ |
||||
void *priv_data; |
||||
|
||||
/**
|
||||
* Parameters of the input stream. This field is allocated in |
||||
* av_bsf_alloc(), it needs to be filled by the caller before |
||||
* av_bsf_init(). |
||||
*/ |
||||
AVCodecParameters *par_in; |
||||
|
||||
/**
|
||||
* Parameters of the output stream. This field is allocated in |
||||
* av_bsf_alloc(), it is set by the filter in av_bsf_init(). |
||||
*/ |
||||
AVCodecParameters *par_out; |
||||
|
||||
/**
|
||||
* The timebase used for the timestamps of the input packets. Set by the |
||||
* caller before av_bsf_init(). |
||||
*/ |
||||
AVRational time_base_in; |
||||
|
||||
/**
|
||||
* The timebase used for the timestamps of the output packets. Set by the |
||||
* filter in av_bsf_init(). |
||||
*/ |
||||
AVRational time_base_out; |
||||
} AVBSFContext; |
||||
|
||||
typedef struct AVBitStreamFilter { |
||||
const char *name; |
||||
|
||||
/**
|
||||
* A list of codec ids supported by the filter, terminated by |
||||
* AV_CODEC_ID_NONE. |
||||
* May be NULL, in that case the bitstream filter works with any codec id. |
||||
*/ |
||||
const enum AVCodecID *codec_ids; |
||||
|
||||
/**
|
||||
* A class for the private data, used to declare bitstream filter private |
||||
* AVOptions. This field is NULL for bitstream filters that do not declare |
||||
* any options. |
||||
* |
||||
* If this field is non-NULL, the first member of the filter private data |
||||
* must be a pointer to AVClass, which will be set by libavcodec generic |
||||
* code to this class. |
||||
*/ |
||||
const AVClass *priv_class; |
||||
|
||||
/*****************************************************************
|
||||
* No fields below this line are part of the public API. They |
||||
* may not be used outside of libavcodec and can be changed and |
||||
* removed at will. |
||||
* New public fields should be added right above. |
||||
***************************************************************** |
||||
*/ |
||||
|
||||
int priv_data_size; |
||||
int (*init)(AVBSFContext *ctx); |
||||
int (*filter)(AVBSFContext *ctx, AVPacket *pkt); |
||||
void (*close)(AVBSFContext *ctx); |
||||
void (*flush)(AVBSFContext *ctx); |
||||
} AVBitStreamFilter; |
||||
|
||||
/**
|
||||
* @return a bitstream filter with the specified name or NULL if no such |
||||
* bitstream filter exists. |
||||
*/ |
||||
const AVBitStreamFilter *av_bsf_get_by_name(const char *name); |
||||
|
||||
/**
|
||||
* Iterate over all registered bitstream filters. |
||||
* |
||||
* @param opaque a pointer where libavcodec will store the iteration state. Must |
||||
* point to NULL to start the iteration. |
||||
* |
||||
* @return the next registered bitstream filter or NULL when the iteration is |
||||
* finished |
||||
*/ |
||||
const AVBitStreamFilter *av_bsf_iterate(void **opaque); |
||||
|
||||
/**
|
||||
* Allocate a context for a given bitstream filter. The caller must fill in the |
||||
* context parameters as described in the documentation and then call |
||||
* av_bsf_init() before sending any data to the filter. |
||||
* |
||||
* @param filter the filter for which to allocate an instance. |
||||
* @param ctx a pointer into which the pointer to the newly-allocated context |
||||
* will be written. It must be freed with av_bsf_free() after the |
||||
* filtering is done. |
||||
* |
||||
* @return 0 on success, a negative AVERROR code on failure |
||||
*/ |
||||
int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx); |
||||
|
||||
/**
|
||||
* Prepare the filter for use, after all the parameters and options have been |
||||
* set. |
||||
*/ |
||||
int av_bsf_init(AVBSFContext *ctx); |
||||
|
||||
/**
|
||||
* Submit a packet for filtering. |
||||
* |
||||
* After sending each packet, the filter must be completely drained by calling |
||||
* av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or |
||||
* AVERROR_EOF. |
||||
* |
||||
* @param pkt the packet to filter. The bitstream filter will take ownership of |
||||
* the packet and reset the contents of pkt. pkt is not touched if an error occurs. |
||||
* If pkt is empty (i.e. NULL, or pkt->data is NULL and pkt->side_data_elems zero), |
||||
* it signals the end of the stream (i.e. no more non-empty packets will be sent; |
||||
* sending more empty packets does nothing) and will cause the filter to output |
||||
* any packets it may have buffered internally. |
||||
* |
||||
* @return 0 on success. AVERROR(EAGAIN) if packets need to be retrieved from the |
||||
* filter (using av_bsf_receive_packet()) before new input can be consumed. Another |
||||
* negative AVERROR value if an error occurs. |
||||
*/ |
||||
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt); |
||||
|
||||
/**
|
||||
* Retrieve a filtered packet. |
||||
* |
||||
* @param[out] pkt this struct will be filled with the contents of the filtered |
||||
* packet. It is owned by the caller and must be freed using |
||||
* av_packet_unref() when it is no longer needed. |
||||
* This parameter should be "clean" (i.e. freshly allocated |
||||
* with av_packet_alloc() or unreffed with av_packet_unref()) |
||||
* when this function is called. If this function returns |
||||
* successfully, the contents of pkt will be completely |
||||
* overwritten by the returned data. On failure, pkt is not |
||||
* touched. |
||||
* |
||||
* @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the |
||||
* filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there |
||||
* will be no further output from the filter. Another negative AVERROR value if |
||||
* an error occurs. |
||||
* |
||||
* @note one input packet may result in several output packets, so after sending |
||||
* a packet with av_bsf_send_packet(), this function needs to be called |
||||
* repeatedly until it stops returning 0. It is also possible for a filter to |
||||
* output fewer packets than were sent to it, so this function may return |
||||
* AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call. |
||||
*/ |
||||
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt); |
||||
|
||||
/**
|
||||
* Reset the internal bitstream filter state. Should be called e.g. when seeking. |
||||
*/ |
||||
void av_bsf_flush(AVBSFContext *ctx); |
||||
|
||||
/**
|
||||
* Free a bitstream filter context and everything associated with it; write NULL |
||||
* into the supplied pointer. |
||||
*/ |
||||
void av_bsf_free(AVBSFContext **ctx); |
||||
|
||||
/**
|
||||
* Get the AVClass for AVBSFContext. It can be used in combination with |
||||
* AV_OPT_SEARCH_FAKE_OBJ for examining options. |
||||
* |
||||
* @see av_opt_find(). |
||||
*/ |
||||
const AVClass *av_bsf_get_class(void); |
||||
|
||||
/**
|
||||
* Structure for chain/list of bitstream filters. |
||||
* Empty list can be allocated by av_bsf_list_alloc(). |
||||
*/ |
||||
typedef struct AVBSFList AVBSFList; |
||||
|
||||
/**
|
||||
* Allocate empty list of bitstream filters. |
||||
* The list must be later freed by av_bsf_list_free() |
||||
* or finalized by av_bsf_list_finalize(). |
||||
* |
||||
* @return Pointer to @ref AVBSFList on success, NULL in case of failure |
||||
*/ |
||||
AVBSFList *av_bsf_list_alloc(void); |
||||
|
||||
/**
|
||||
* Free list of bitstream filters. |
||||
* |
||||
* @param lst Pointer to pointer returned by av_bsf_list_alloc() |
||||
*/ |
||||
void av_bsf_list_free(AVBSFList **lst); |
||||
|
||||
/**
|
||||
* Append bitstream filter to the list of bitstream filters. |
||||
* |
||||
* @param lst List to append to |
||||
* @param bsf Filter context to be appended |
||||
* |
||||
* @return >=0 on success, negative AVERROR in case of failure |
||||
*/ |
||||
int av_bsf_list_append(AVBSFList *lst, AVBSFContext *bsf); |
||||
|
||||
/**
|
||||
* Construct new bitstream filter context given it's name and options |
||||
* and append it to the list of bitstream filters. |
||||
* |
||||
* @param lst List to append to |
||||
* @param bsf_name Name of the bitstream filter |
||||
* @param options Options for the bitstream filter, can be set to NULL |
||||
* |
||||
* @return >=0 on success, negative AVERROR in case of failure |
||||
*/ |
||||
int av_bsf_list_append2(AVBSFList *lst, const char * bsf_name, AVDictionary **options); |
||||
/**
|
||||
* Finalize list of bitstream filters. |
||||
* |
||||
* This function will transform @ref AVBSFList to single @ref AVBSFContext, |
||||
* so the whole chain of bitstream filters can be treated as single filter |
||||
* freshly allocated by av_bsf_alloc(). |
||||
* If the call is successful, @ref AVBSFList structure is freed and lst |
||||
* will be set to NULL. In case of failure, caller is responsible for |
||||
* freeing the structure by av_bsf_list_free() |
||||
* |
||||
* @param lst Filter list structure to be transformed |
||||
* @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure |
||||
* representing the chain of bitstream filters |
||||
* |
||||
* @return >=0 on success, negative AVERROR in case of failure |
||||
*/ |
||||
int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf); |
||||
|
||||
/**
|
||||
* Parse string describing list of bitstream filters and create single |
||||
* @ref AVBSFContext describing the whole chain of bitstream filters. |
||||
* Resulting @ref AVBSFContext can be treated as any other @ref AVBSFContext freshly |
||||
* allocated by av_bsf_alloc(). |
||||
* |
||||
* @param str String describing chain of bitstream filters in format |
||||
* `bsf1[=opt1=val1:opt2=val2][,bsf2]` |
||||
* @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure |
||||
* representing the chain of bitstream filters |
||||
* |
||||
* @return >=0 on success, negative AVERROR in case of failure |
||||
*/ |
||||
int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf); |
||||
|
||||
/**
|
||||
* Get null/pass-through bitstream filter. |
||||
* |
||||
* @param[out] bsf Pointer to be set to new instance of pass-through bitstream filter |
||||
* |
||||
* @return |
||||
*/ |
||||
int av_bsf_get_null_filter(AVBSFContext **bsf); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif // AVCODEC_BSF_H
|
||||
@ -0,0 +1,480 @@ |
||||
/*
|
||||
* AVCodec public API |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_CODEC_H |
||||
#define AVCODEC_CODEC_H |
||||
|
||||
#include <stdint.h> |
||||
|
||||
#include "libavutil/avutil.h" |
||||
#include "libavutil/hwcontext.h" |
||||
#include "libavutil/log.h" |
||||
#include "libavutil/pixfmt.h" |
||||
#include "libavutil/rational.h" |
||||
#include "libavutil/samplefmt.h" |
||||
|
||||
#include "libavcodec/codec_id.h" |
||||
#include "libavcodec/version.h" |
||||
|
||||
/**
|
||||
* @addtogroup lavc_core |
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* Decoder can use draw_horiz_band callback. |
||||
*/ |
||||
#define AV_CODEC_CAP_DRAW_HORIZ_BAND (1 << 0) |
||||
/**
|
||||
* Codec uses get_buffer() or get_encode_buffer() for allocating buffers and |
||||
* supports custom allocators. |
||||
* If not set, it might not use get_buffer() or get_encode_buffer() at all, or |
||||
* use operations that assume the buffer was allocated by |
||||
* avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer. |
||||
*/ |
||||
#define AV_CODEC_CAP_DR1 (1 << 1) |
||||
#define AV_CODEC_CAP_TRUNCATED (1 << 3) |
||||
/**
|
||||
* Encoder or decoder requires flushing with NULL input at the end in order to |
||||
* give the complete and correct output. |
||||
* |
||||
* NOTE: If this flag is not set, the codec is guaranteed to never be fed with |
||||
* with NULL data. The user can still send NULL data to the public encode |
||||
* or decode function, but libavcodec will not pass it along to the codec |
||||
* unless this flag is set. |
||||
* |
||||
* Decoders: |
||||
* The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, |
||||
* avpkt->size=0 at the end to get the delayed data until the decoder no longer |
||||
* returns frames. |
||||
* |
||||
* Encoders: |
||||
* The encoder needs to be fed with NULL data at the end of encoding until the |
||||
* encoder no longer returns data. |
||||
* |
||||
* NOTE: For encoders implementing the AVCodec.encode2() function, setting this |
||||
* flag also means that the encoder must set the pts and duration for |
||||
* each output packet. If this flag is not set, the pts and duration will |
||||
* be determined by libavcodec from the input frame. |
||||
*/ |
||||
#define AV_CODEC_CAP_DELAY (1 << 5) |
||||
/**
|
||||
* Codec can be fed a final frame with a smaller size. |
||||
* This can be used to prevent truncation of the last audio samples. |
||||
*/ |
||||
#define AV_CODEC_CAP_SMALL_LAST_FRAME (1 << 6) |
||||
|
||||
/**
|
||||
* Codec can output multiple frames per AVPacket |
||||
* Normally demuxers return one frame at a time, demuxers which do not do |
||||
* are connected to a parser to split what they return into proper frames. |
||||
* This flag is reserved to the very rare category of codecs which have a |
||||
* bitstream that cannot be split into frames without timeconsuming |
||||
* operations like full decoding. Demuxers carrying such bitstreams thus |
||||
* may return multiple frames in a packet. This has many disadvantages like |
||||
* prohibiting stream copy in many cases thus it should only be considered |
||||
* as a last resort. |
||||
*/ |
||||
#define AV_CODEC_CAP_SUBFRAMES (1 << 8) |
||||
/**
|
||||
* Codec is experimental and is thus avoided in favor of non experimental |
||||
* encoders |
||||
*/ |
||||
#define AV_CODEC_CAP_EXPERIMENTAL (1 << 9) |
||||
/**
|
||||
* Codec should fill in channel configuration and samplerate instead of container |
||||
*/ |
||||
#define AV_CODEC_CAP_CHANNEL_CONF (1 << 10) |
||||
/**
|
||||
* Codec supports frame-level multithreading. |
||||
*/ |
||||
#define AV_CODEC_CAP_FRAME_THREADS (1 << 12) |
||||
/**
|
||||
* Codec supports slice-based (or partition-based) multithreading. |
||||
*/ |
||||
#define AV_CODEC_CAP_SLICE_THREADS (1 << 13) |
||||
/**
|
||||
* Codec supports changed parameters at any point. |
||||
*/ |
||||
#define AV_CODEC_CAP_PARAM_CHANGE (1 << 14) |
||||
/**
|
||||
* Codec supports multithreading through a method other than slice- or |
||||
* frame-level multithreading. Typically this marks wrappers around |
||||
* multithreading-capable external libraries. |
||||
*/ |
||||
#define AV_CODEC_CAP_OTHER_THREADS (1 << 15) |
||||
#if FF_API_AUTO_THREADS |
||||
#define AV_CODEC_CAP_AUTO_THREADS AV_CODEC_CAP_OTHER_THREADS |
||||
#endif |
||||
/**
|
||||
* Audio encoder supports receiving a different number of samples in each call. |
||||
*/ |
||||
#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16) |
||||
/**
|
||||
* Decoder is not a preferred choice for probing. |
||||
* This indicates that the decoder is not a good choice for probing. |
||||
* It could for example be an expensive to spin up hardware decoder, |
||||
* or it could simply not provide a lot of useful information about |
||||
* the stream. |
||||
* A decoder marked with this flag should only be used as last resort |
||||
* choice for probing. |
||||
*/ |
||||
#define AV_CODEC_CAP_AVOID_PROBING (1 << 17) |
||||
|
||||
#if FF_API_UNUSED_CODEC_CAPS |
||||
/**
|
||||
* Deprecated and unused. Use AVCodecDescriptor.props instead |
||||
*/ |
||||
#define AV_CODEC_CAP_INTRA_ONLY 0x40000000 |
||||
/**
|
||||
* Deprecated and unused. Use AVCodecDescriptor.props instead |
||||
*/ |
||||
#define AV_CODEC_CAP_LOSSLESS 0x80000000 |
||||
#endif |
||||
|
||||
/**
|
||||
* Codec is backed by a hardware implementation. Typically used to |
||||
* identify a non-hwaccel hardware decoder. For information about hwaccels, use |
||||
* avcodec_get_hw_config() instead. |
||||
*/ |
||||
#define AV_CODEC_CAP_HARDWARE (1 << 18) |
||||
|
||||
/**
|
||||
* Codec is potentially backed by a hardware implementation, but not |
||||
* necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the |
||||
* implementation provides some sort of internal fallback. |
||||
*/ |
||||
#define AV_CODEC_CAP_HYBRID (1 << 19) |
||||
|
||||
/**
|
||||
* This codec takes the reordered_opaque field from input AVFrames |
||||
* and returns it in the corresponding field in AVCodecContext after |
||||
* encoding. |
||||
*/ |
||||
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20) |
||||
|
||||
/**
|
||||
* This encoder can be flushed using avcodec_flush_buffers(). If this flag is |
||||
* not set, the encoder must be closed and reopened to ensure that no frames |
||||
* remain pending. |
||||
*/ |
||||
#define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21) |
||||
|
||||
/**
|
||||
* AVProfile. |
||||
*/ |
||||
typedef struct AVProfile { |
||||
int profile; |
||||
const char *name; ///< short name for the profile
|
||||
} AVProfile; |
||||
|
||||
typedef struct AVCodecDefault AVCodecDefault; |
||||
|
||||
struct AVCodecContext; |
||||
struct AVSubtitle; |
||||
struct AVPacket; |
||||
|
||||
/**
|
||||
* AVCodec. |
||||
*/ |
||||
typedef struct AVCodec { |
||||
/**
|
||||
* Name of the codec implementation. |
||||
* The name is globally unique among encoders and among decoders (but an |
||||
* encoder and a decoder can share the same name). |
||||
* This is the primary way to find a codec from the user perspective. |
||||
*/ |
||||
const char *name; |
||||
/**
|
||||
* Descriptive name for the codec, meant to be more human readable than name. |
||||
* You should use the NULL_IF_CONFIG_SMALL() macro to define it. |
||||
*/ |
||||
const char *long_name; |
||||
enum AVMediaType type; |
||||
enum AVCodecID id; |
||||
/**
|
||||
* Codec capabilities. |
||||
* see AV_CODEC_CAP_* |
||||
*/ |
||||
int capabilities; |
||||
const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
|
||||
const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
|
||||
const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
|
||||
const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
|
||||
const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
|
||||
uint8_t max_lowres; ///< maximum value for lowres supported by the decoder
|
||||
const AVClass *priv_class; ///< AVClass for the private context
|
||||
const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
|
||||
|
||||
/**
|
||||
* Group name of the codec implementation. |
||||
* This is a short symbolic name of the wrapper backing this codec. A |
||||
* wrapper uses some kind of external implementation for the codec, such |
||||
* as an external library, or a codec implementation provided by the OS or |
||||
* the hardware. |
||||
* If this field is NULL, this is a builtin, libavcodec native codec. |
||||
* If non-NULL, this will be the suffix in AVCodec.name in most cases |
||||
* (usually AVCodec.name will be of the form "<codec_name>_<wrapper_name>"). |
||||
*/ |
||||
const char *wrapper_name; |
||||
|
||||
/*****************************************************************
|
||||
* No fields below this line are part of the public API. They |
||||
* may not be used outside of libavcodec and can be changed and |
||||
* removed at will. |
||||
* New public fields should be added right above. |
||||
***************************************************************** |
||||
*/ |
||||
int priv_data_size; |
||||
#if FF_API_NEXT |
||||
struct AVCodec *next; |
||||
#endif |
||||
/**
|
||||
* @name Frame-level threading support functions |
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* Copy necessary context variables from a previous thread context to the current one. |
||||
* If not defined, the next thread will start automatically; otherwise, the codec |
||||
* must call ff_thread_finish_setup(). |
||||
* |
||||
* dst and src will (rarely) point to the same context, in which case memcpy should be skipped. |
||||
*/ |
||||
int (*update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src); |
||||
/** @} */ |
||||
|
||||
/**
|
||||
* Private codec-specific defaults. |
||||
*/ |
||||
const AVCodecDefault *defaults; |
||||
|
||||
/**
|
||||
* Initialize codec static data, called from av_codec_iterate(). |
||||
* |
||||
* This is not intended for time consuming operations as it is |
||||
* run for every codec regardless of that codec being used. |
||||
*/ |
||||
void (*init_static_data)(struct AVCodec *codec); |
||||
|
||||
int (*init)(struct AVCodecContext *); |
||||
int (*encode_sub)(struct AVCodecContext *, uint8_t *buf, int buf_size, |
||||
const struct AVSubtitle *sub); |
||||
/**
|
||||
* Encode data to an AVPacket. |
||||
* |
||||
* @param avctx codec context |
||||
* @param avpkt output AVPacket |
||||
* @param[in] frame AVFrame containing the raw data to be encoded |
||||
* @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a |
||||
* non-empty packet was returned in avpkt. |
||||
* @return 0 on success, negative error code on failure |
||||
*/ |
||||
int (*encode2)(struct AVCodecContext *avctx, struct AVPacket *avpkt, |
||||
const struct AVFrame *frame, int *got_packet_ptr); |
||||
/**
|
||||
* Decode picture or subtitle data. |
||||
* |
||||
* @param avctx codec context |
||||
* @param outdata codec type dependent output struct |
||||
* @param[out] got_frame_ptr decoder sets to 0 or 1 to indicate that a |
||||
* non-empty frame or subtitle was returned in |
||||
* outdata. |
||||
* @param[in] avpkt AVPacket containing the data to be decoded |
||||
* @return amount of bytes read from the packet on success, negative error |
||||
* code on failure |
||||
*/ |
||||
int (*decode)(struct AVCodecContext *avctx, void *outdata, |
||||
int *got_frame_ptr, struct AVPacket *avpkt); |
||||
int (*close)(struct AVCodecContext *); |
||||
/**
|
||||
* Encode API with decoupled frame/packet dataflow. This function is called |
||||
* to get one output packet. It should call ff_encode_get_frame() to obtain |
||||
* input data. |
||||
*/ |
||||
int (*receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt); |
||||
|
||||
/**
|
||||
* Decode API with decoupled packet/frame dataflow. This function is called |
||||
* to get one output frame. It should call ff_decode_get_packet() to obtain |
||||
* input data. |
||||
*/ |
||||
int (*receive_frame)(struct AVCodecContext *avctx, struct AVFrame *frame); |
||||
/**
|
||||
* Flush buffers. |
||||
* Will be called when seeking |
||||
*/ |
||||
void (*flush)(struct AVCodecContext *); |
||||
/**
|
||||
* Internal codec capabilities. |
||||
* See FF_CODEC_CAP_* in internal.h |
||||
*/ |
||||
int caps_internal; |
||||
|
||||
/**
|
||||
* Decoding only, a comma-separated list of bitstream filters to apply to |
||||
* packets before decoding. |
||||
*/ |
||||
const char *bsfs; |
||||
|
||||
/**
|
||||
* Array of pointers to hardware configurations supported by the codec, |
||||
* or NULL if no hardware supported. The array is terminated by a NULL |
||||
* pointer. |
||||
* |
||||
* The user can only access this field via avcodec_get_hw_config(). |
||||
*/ |
||||
const struct AVCodecHWConfigInternal *const *hw_configs; |
||||
|
||||
/**
|
||||
* List of supported codec_tags, terminated by FF_CODEC_TAGS_END. |
||||
*/ |
||||
const uint32_t *codec_tags; |
||||
} AVCodec; |
||||
|
||||
/**
|
||||
* Iterate over all registered codecs. |
||||
* |
||||
* @param opaque a pointer where libavcodec will store the iteration state. Must |
||||
* point to NULL to start the iteration. |
||||
* |
||||
* @return the next registered codec or NULL when the iteration is |
||||
* finished |
||||
*/ |
||||
const AVCodec *av_codec_iterate(void **opaque); |
||||
|
||||
/**
|
||||
* Find a registered decoder with a matching codec ID. |
||||
* |
||||
* @param id AVCodecID of the requested decoder |
||||
* @return A decoder if one was found, NULL otherwise. |
||||
*/ |
||||
AVCodec *avcodec_find_decoder(enum AVCodecID id); |
||||
|
||||
/**
|
||||
* Find a registered decoder with the specified name. |
||||
* |
||||
* @param name name of the requested decoder |
||||
* @return A decoder if one was found, NULL otherwise. |
||||
*/ |
||||
AVCodec *avcodec_find_decoder_by_name(const char *name); |
||||
|
||||
/**
|
||||
* Find a registered encoder with a matching codec ID. |
||||
* |
||||
* @param id AVCodecID of the requested encoder |
||||
* @return An encoder if one was found, NULL otherwise. |
||||
*/ |
||||
AVCodec *avcodec_find_encoder(enum AVCodecID id); |
||||
|
||||
/**
|
||||
* Find a registered encoder with the specified name. |
||||
* |
||||
* @param name name of the requested encoder |
||||
* @return An encoder if one was found, NULL otherwise. |
||||
*/ |
||||
AVCodec *avcodec_find_encoder_by_name(const char *name); |
||||
/**
|
||||
* @return a non-zero number if codec is an encoder, zero otherwise |
||||
*/ |
||||
int av_codec_is_encoder(const AVCodec *codec); |
||||
|
||||
/**
|
||||
* @return a non-zero number if codec is a decoder, zero otherwise |
||||
*/ |
||||
int av_codec_is_decoder(const AVCodec *codec); |
||||
|
||||
enum { |
||||
/**
|
||||
* The codec supports this format via the hw_device_ctx interface. |
||||
* |
||||
* When selecting this format, AVCodecContext.hw_device_ctx should |
||||
* have been set to a device of the specified type before calling |
||||
* avcodec_open2(). |
||||
*/ |
||||
AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX = 0x01, |
||||
/**
|
||||
* The codec supports this format via the hw_frames_ctx interface. |
||||
* |
||||
* When selecting this format for a decoder, |
||||
* AVCodecContext.hw_frames_ctx should be set to a suitable frames |
||||
* context inside the get_format() callback. The frames context |
||||
* must have been created on a device of the specified type. |
||||
* |
||||
* When selecting this format for an encoder, |
||||
* AVCodecContext.hw_frames_ctx should be set to the context which |
||||
* will be used for the input frames before calling avcodec_open2(). |
||||
*/ |
||||
AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = 0x02, |
||||
/**
|
||||
* The codec supports this format by some internal method. |
||||
* |
||||
* This format can be selected without any additional configuration - |
||||
* no device or frames context is required. |
||||
*/ |
||||
AV_CODEC_HW_CONFIG_METHOD_INTERNAL = 0x04, |
||||
/**
|
||||
* The codec supports this format by some ad-hoc method. |
||||
* |
||||
* Additional settings and/or function calls are required. See the |
||||
* codec-specific documentation for details. (Methods requiring |
||||
* this sort of configuration are deprecated and others should be |
||||
* used in preference.) |
||||
*/ |
||||
AV_CODEC_HW_CONFIG_METHOD_AD_HOC = 0x08, |
||||
}; |
||||
|
||||
typedef struct AVCodecHWConfig { |
||||
/**
|
||||
* For decoders, a hardware pixel format which that decoder may be |
||||
* able to decode to if suitable hardware is available. |
||||
* |
||||
* For encoders, a pixel format which the encoder may be able to |
||||
* accept. If set to AV_PIX_FMT_NONE, this applies to all pixel |
||||
* formats supported by the codec. |
||||
*/ |
||||
enum AVPixelFormat pix_fmt; |
||||
/**
|
||||
* Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible |
||||
* setup methods which can be used with this configuration. |
||||
*/ |
||||
int methods; |
||||
/**
|
||||
* The device type associated with the configuration. |
||||
* |
||||
* Must be set for AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX and |
||||
* AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, otherwise unused. |
||||
*/ |
||||
enum AVHWDeviceType device_type; |
||||
} AVCodecHWConfig; |
||||
|
||||
/**
|
||||
* Retrieve supported hardware configurations for a codec. |
||||
* |
||||
* Values of index from zero to some maximum return the indexed configuration |
||||
* descriptor; all other values return NULL. If the codec does not support |
||||
* any hardware configurations then it will always return NULL. |
||||
*/ |
||||
const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *codec, int index); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* AVCODEC_CODEC_H */ |
||||
@ -0,0 +1,128 @@ |
||||
/*
|
||||
* Codec descriptors public API |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_CODEC_DESC_H |
||||
#define AVCODEC_CODEC_DESC_H |
||||
|
||||
#include "libavutil/avutil.h" |
||||
|
||||
#include "codec_id.h" |
||||
|
||||
/**
|
||||
* @addtogroup lavc_core |
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* This struct describes the properties of a single codec described by an |
||||
* AVCodecID. |
||||
* @see avcodec_descriptor_get() |
||||
*/ |
||||
typedef struct AVCodecDescriptor { |
||||
enum AVCodecID id; |
||||
enum AVMediaType type; |
||||
/**
|
||||
* Name of the codec described by this descriptor. It is non-empty and |
||||
* unique for each codec descriptor. It should contain alphanumeric |
||||
* characters and '_' only. |
||||
*/ |
||||
const char *name; |
||||
/**
|
||||
* A more descriptive name for this codec. May be NULL. |
||||
*/ |
||||
const char *long_name; |
||||
/**
|
||||
* Codec properties, a combination of AV_CODEC_PROP_* flags. |
||||
*/ |
||||
int props; |
||||
/**
|
||||
* MIME type(s) associated with the codec. |
||||
* May be NULL; if not, a NULL-terminated array of MIME types. |
||||
* The first item is always non-NULL and is the preferred MIME type. |
||||
*/ |
||||
const char *const *mime_types; |
||||
/**
|
||||
* If non-NULL, an array of profiles recognized for this codec. |
||||
* Terminated with FF_PROFILE_UNKNOWN. |
||||
*/ |
||||
const struct AVProfile *profiles; |
||||
} AVCodecDescriptor; |
||||
|
||||
/**
|
||||
* Codec uses only intra compression. |
||||
* Video and audio codecs only. |
||||
*/ |
||||
#define AV_CODEC_PROP_INTRA_ONLY (1 << 0) |
||||
/**
|
||||
* Codec supports lossy compression. Audio and video codecs only. |
||||
* @note a codec may support both lossy and lossless |
||||
* compression modes |
||||
*/ |
||||
#define AV_CODEC_PROP_LOSSY (1 << 1) |
||||
/**
|
||||
* Codec supports lossless compression. Audio and video codecs only. |
||||
*/ |
||||
#define AV_CODEC_PROP_LOSSLESS (1 << 2) |
||||
/**
|
||||
* Codec supports frame reordering. That is, the coded order (the order in which |
||||
* the encoded packets are output by the encoders / stored / input to the |
||||
* decoders) may be different from the presentation order of the corresponding |
||||
* frames. |
||||
* |
||||
* For codecs that do not have this property set, PTS and DTS should always be |
||||
* equal. |
||||
*/ |
||||
#define AV_CODEC_PROP_REORDER (1 << 3) |
||||
/**
|
||||
* Subtitle codec is bitmap based |
||||
* Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. |
||||
*/ |
||||
#define AV_CODEC_PROP_BITMAP_SUB (1 << 16) |
||||
/**
|
||||
* Subtitle codec is text based. |
||||
* Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. |
||||
*/ |
||||
#define AV_CODEC_PROP_TEXT_SUB (1 << 17) |
||||
|
||||
/**
|
||||
* @return descriptor for given codec ID or NULL if no descriptor exists. |
||||
*/ |
||||
const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id); |
||||
|
||||
/**
|
||||
* Iterate over all codec descriptors known to libavcodec. |
||||
* |
||||
* @param prev previous descriptor. NULL to get the first descriptor. |
||||
* |
||||
* @return next descriptor or NULL after the last descriptor |
||||
*/ |
||||
const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev); |
||||
|
||||
/**
|
||||
* @return codec descriptor with the given name or NULL if no such descriptor |
||||
* exists. |
||||
*/ |
||||
const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif // AVCODEC_CODEC_DESC_H
|
||||
@ -0,0 +1,592 @@ |
||||
/*
|
||||
* Codec IDs |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_CODEC_ID_H |
||||
#define AVCODEC_CODEC_ID_H |
||||
|
||||
#include "libavutil/avutil.h" |
||||
|
||||
/**
|
||||
* @addtogroup lavc_core |
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* Identify the syntax and semantics of the bitstream. |
||||
* The principle is roughly: |
||||
* Two decoders with the same ID can decode the same streams. |
||||
* Two encoders with the same ID can encode compatible streams. |
||||
* There may be slight deviations from the principle due to implementation |
||||
* details. |
||||
* |
||||
* If you add a codec ID to this list, add it so that |
||||
* 1. no value of an existing codec ID changes (that would break ABI), |
||||
* 2. it is as close as possible to similar codecs |
||||
* |
||||
* After adding new codec IDs, do not forget to add an entry to the codec |
||||
* descriptor list and bump libavcodec minor version. |
||||
*/ |
||||
enum AVCodecID { |
||||
AV_CODEC_ID_NONE, |
||||
|
||||
/* video codecs */ |
||||
AV_CODEC_ID_MPEG1VIDEO, |
||||
AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
|
||||
AV_CODEC_ID_H261, |
||||
AV_CODEC_ID_H263, |
||||
AV_CODEC_ID_RV10, |
||||
AV_CODEC_ID_RV20, |
||||
AV_CODEC_ID_MJPEG, |
||||
AV_CODEC_ID_MJPEGB, |
||||
AV_CODEC_ID_LJPEG, |
||||
AV_CODEC_ID_SP5X, |
||||
AV_CODEC_ID_JPEGLS, |
||||
AV_CODEC_ID_MPEG4, |
||||
AV_CODEC_ID_RAWVIDEO, |
||||
AV_CODEC_ID_MSMPEG4V1, |
||||
AV_CODEC_ID_MSMPEG4V2, |
||||
AV_CODEC_ID_MSMPEG4V3, |
||||
AV_CODEC_ID_WMV1, |
||||
AV_CODEC_ID_WMV2, |
||||
AV_CODEC_ID_H263P, |
||||
AV_CODEC_ID_H263I, |
||||
AV_CODEC_ID_FLV1, |
||||
AV_CODEC_ID_SVQ1, |
||||
AV_CODEC_ID_SVQ3, |
||||
AV_CODEC_ID_DVVIDEO, |
||||
AV_CODEC_ID_HUFFYUV, |
||||
AV_CODEC_ID_CYUV, |
||||
AV_CODEC_ID_H264, |
||||
AV_CODEC_ID_INDEO3, |
||||
AV_CODEC_ID_VP3, |
||||
AV_CODEC_ID_THEORA, |
||||
AV_CODEC_ID_ASV1, |
||||
AV_CODEC_ID_ASV2, |
||||
AV_CODEC_ID_FFV1, |
||||
AV_CODEC_ID_4XM, |
||||
AV_CODEC_ID_VCR1, |
||||
AV_CODEC_ID_CLJR, |
||||
AV_CODEC_ID_MDEC, |
||||
AV_CODEC_ID_ROQ, |
||||
AV_CODEC_ID_INTERPLAY_VIDEO, |
||||
AV_CODEC_ID_XAN_WC3, |
||||
AV_CODEC_ID_XAN_WC4, |
||||
AV_CODEC_ID_RPZA, |
||||
AV_CODEC_ID_CINEPAK, |
||||
AV_CODEC_ID_WS_VQA, |
||||
AV_CODEC_ID_MSRLE, |
||||
AV_CODEC_ID_MSVIDEO1, |
||||
AV_CODEC_ID_IDCIN, |
||||
AV_CODEC_ID_8BPS, |
||||
AV_CODEC_ID_SMC, |
||||
AV_CODEC_ID_FLIC, |
||||
AV_CODEC_ID_TRUEMOTION1, |
||||
AV_CODEC_ID_VMDVIDEO, |
||||
AV_CODEC_ID_MSZH, |
||||
AV_CODEC_ID_ZLIB, |
||||
AV_CODEC_ID_QTRLE, |
||||
AV_CODEC_ID_TSCC, |
||||
AV_CODEC_ID_ULTI, |
||||
AV_CODEC_ID_QDRAW, |
||||
AV_CODEC_ID_VIXL, |
||||
AV_CODEC_ID_QPEG, |
||||
AV_CODEC_ID_PNG, |
||||
AV_CODEC_ID_PPM, |
||||
AV_CODEC_ID_PBM, |
||||
AV_CODEC_ID_PGM, |
||||
AV_CODEC_ID_PGMYUV, |
||||
AV_CODEC_ID_PAM, |
||||
AV_CODEC_ID_FFVHUFF, |
||||
AV_CODEC_ID_RV30, |
||||
AV_CODEC_ID_RV40, |
||||
AV_CODEC_ID_VC1, |
||||
AV_CODEC_ID_WMV3, |
||||
AV_CODEC_ID_LOCO, |
||||
AV_CODEC_ID_WNV1, |
||||
AV_CODEC_ID_AASC, |
||||
AV_CODEC_ID_INDEO2, |
||||
AV_CODEC_ID_FRAPS, |
||||
AV_CODEC_ID_TRUEMOTION2, |
||||
AV_CODEC_ID_BMP, |
||||
AV_CODEC_ID_CSCD, |
||||
AV_CODEC_ID_MMVIDEO, |
||||
AV_CODEC_ID_ZMBV, |
||||
AV_CODEC_ID_AVS, |
||||
AV_CODEC_ID_SMACKVIDEO, |
||||
AV_CODEC_ID_NUV, |
||||
AV_CODEC_ID_KMVC, |
||||
AV_CODEC_ID_FLASHSV, |
||||
AV_CODEC_ID_CAVS, |
||||
AV_CODEC_ID_JPEG2000, |
||||
AV_CODEC_ID_VMNC, |
||||
AV_CODEC_ID_VP5, |
||||
AV_CODEC_ID_VP6, |
||||
AV_CODEC_ID_VP6F, |
||||
AV_CODEC_ID_TARGA, |
||||
AV_CODEC_ID_DSICINVIDEO, |
||||
AV_CODEC_ID_TIERTEXSEQVIDEO, |
||||
AV_CODEC_ID_TIFF, |
||||
AV_CODEC_ID_GIF, |
||||
AV_CODEC_ID_DXA, |
||||
AV_CODEC_ID_DNXHD, |
||||
AV_CODEC_ID_THP, |
||||
AV_CODEC_ID_SGI, |
||||
AV_CODEC_ID_C93, |
||||
AV_CODEC_ID_BETHSOFTVID, |
||||
AV_CODEC_ID_PTX, |
||||
AV_CODEC_ID_TXD, |
||||
AV_CODEC_ID_VP6A, |
||||
AV_CODEC_ID_AMV, |
||||
AV_CODEC_ID_VB, |
||||
AV_CODEC_ID_PCX, |
||||
AV_CODEC_ID_SUNRAST, |
||||
AV_CODEC_ID_INDEO4, |
||||
AV_CODEC_ID_INDEO5, |
||||
AV_CODEC_ID_MIMIC, |
||||
AV_CODEC_ID_RL2, |
||||
AV_CODEC_ID_ESCAPE124, |
||||
AV_CODEC_ID_DIRAC, |
||||
AV_CODEC_ID_BFI, |
||||
AV_CODEC_ID_CMV, |
||||
AV_CODEC_ID_MOTIONPIXELS, |
||||
AV_CODEC_ID_TGV, |
||||
AV_CODEC_ID_TGQ, |
||||
AV_CODEC_ID_TQI, |
||||
AV_CODEC_ID_AURA, |
||||
AV_CODEC_ID_AURA2, |
||||
AV_CODEC_ID_V210X, |
||||
AV_CODEC_ID_TMV, |
||||
AV_CODEC_ID_V210, |
||||
AV_CODEC_ID_DPX, |
||||
AV_CODEC_ID_MAD, |
||||
AV_CODEC_ID_FRWU, |
||||
AV_CODEC_ID_FLASHSV2, |
||||
AV_CODEC_ID_CDGRAPHICS, |
||||
AV_CODEC_ID_R210, |
||||
AV_CODEC_ID_ANM, |
||||
AV_CODEC_ID_BINKVIDEO, |
||||
AV_CODEC_ID_IFF_ILBM, |
||||
#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM |
||||
AV_CODEC_ID_KGV1, |
||||
AV_CODEC_ID_YOP, |
||||
AV_CODEC_ID_VP8, |
||||
AV_CODEC_ID_PICTOR, |
||||
AV_CODEC_ID_ANSI, |
||||
AV_CODEC_ID_A64_MULTI, |
||||
AV_CODEC_ID_A64_MULTI5, |
||||
AV_CODEC_ID_R10K, |
||||
AV_CODEC_ID_MXPEG, |
||||
AV_CODEC_ID_LAGARITH, |
||||
AV_CODEC_ID_PRORES, |
||||
AV_CODEC_ID_JV, |
||||
AV_CODEC_ID_DFA, |
||||
AV_CODEC_ID_WMV3IMAGE, |
||||
AV_CODEC_ID_VC1IMAGE, |
||||
AV_CODEC_ID_UTVIDEO, |
||||
AV_CODEC_ID_BMV_VIDEO, |
||||
AV_CODEC_ID_VBLE, |
||||
AV_CODEC_ID_DXTORY, |
||||
AV_CODEC_ID_V410, |
||||
AV_CODEC_ID_XWD, |
||||
AV_CODEC_ID_CDXL, |
||||
AV_CODEC_ID_XBM, |
||||
AV_CODEC_ID_ZEROCODEC, |
||||
AV_CODEC_ID_MSS1, |
||||
AV_CODEC_ID_MSA1, |
||||
AV_CODEC_ID_TSCC2, |
||||
AV_CODEC_ID_MTS2, |
||||
AV_CODEC_ID_CLLC, |
||||
AV_CODEC_ID_MSS2, |
||||
AV_CODEC_ID_VP9, |
||||
AV_CODEC_ID_AIC, |
||||
AV_CODEC_ID_ESCAPE130, |
||||
AV_CODEC_ID_G2M, |
||||
AV_CODEC_ID_WEBP, |
||||
AV_CODEC_ID_HNM4_VIDEO, |
||||
AV_CODEC_ID_HEVC, |
||||
#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC |
||||
AV_CODEC_ID_FIC, |
||||
AV_CODEC_ID_ALIAS_PIX, |
||||
AV_CODEC_ID_BRENDER_PIX, |
||||
AV_CODEC_ID_PAF_VIDEO, |
||||
AV_CODEC_ID_EXR, |
||||
AV_CODEC_ID_VP7, |
||||
AV_CODEC_ID_SANM, |
||||
AV_CODEC_ID_SGIRLE, |
||||
AV_CODEC_ID_MVC1, |
||||
AV_CODEC_ID_MVC2, |
||||
AV_CODEC_ID_HQX, |
||||
AV_CODEC_ID_TDSC, |
||||
AV_CODEC_ID_HQ_HQA, |
||||
AV_CODEC_ID_HAP, |
||||
AV_CODEC_ID_DDS, |
||||
AV_CODEC_ID_DXV, |
||||
AV_CODEC_ID_SCREENPRESSO, |
||||
AV_CODEC_ID_RSCC, |
||||
AV_CODEC_ID_AVS2, |
||||
AV_CODEC_ID_PGX, |
||||
AV_CODEC_ID_AVS3, |
||||
AV_CODEC_ID_MSP2, |
||||
AV_CODEC_ID_VVC, |
||||
#define AV_CODEC_ID_H266 AV_CODEC_ID_VVC |
||||
|
||||
AV_CODEC_ID_Y41P = 0x8000, |
||||
AV_CODEC_ID_AVRP, |
||||
AV_CODEC_ID_012V, |
||||
AV_CODEC_ID_AVUI, |
||||
AV_CODEC_ID_AYUV, |
||||
AV_CODEC_ID_TARGA_Y216, |
||||
AV_CODEC_ID_V308, |
||||
AV_CODEC_ID_V408, |
||||
AV_CODEC_ID_YUV4, |
||||
AV_CODEC_ID_AVRN, |
||||
AV_CODEC_ID_CPIA, |
||||
AV_CODEC_ID_XFACE, |
||||
AV_CODEC_ID_SNOW, |
||||
AV_CODEC_ID_SMVJPEG, |
||||
AV_CODEC_ID_APNG, |
||||
AV_CODEC_ID_DAALA, |
||||
AV_CODEC_ID_CFHD, |
||||
AV_CODEC_ID_TRUEMOTION2RT, |
||||
AV_CODEC_ID_M101, |
||||
AV_CODEC_ID_MAGICYUV, |
||||
AV_CODEC_ID_SHEERVIDEO, |
||||
AV_CODEC_ID_YLC, |
||||
AV_CODEC_ID_PSD, |
||||
AV_CODEC_ID_PIXLET, |
||||
AV_CODEC_ID_SPEEDHQ, |
||||
AV_CODEC_ID_FMVC, |
||||
AV_CODEC_ID_SCPR, |
||||
AV_CODEC_ID_CLEARVIDEO, |
||||
AV_CODEC_ID_XPM, |
||||
AV_CODEC_ID_AV1, |
||||
AV_CODEC_ID_BITPACKED, |
||||
AV_CODEC_ID_MSCC, |
||||
AV_CODEC_ID_SRGC, |
||||
AV_CODEC_ID_SVG, |
||||
AV_CODEC_ID_GDV, |
||||
AV_CODEC_ID_FITS, |
||||
AV_CODEC_ID_IMM4, |
||||
AV_CODEC_ID_PROSUMER, |
||||
AV_CODEC_ID_MWSC, |
||||
AV_CODEC_ID_WCMV, |
||||
AV_CODEC_ID_RASC, |
||||
AV_CODEC_ID_HYMT, |
||||
AV_CODEC_ID_ARBC, |
||||
AV_CODEC_ID_AGM, |
||||
AV_CODEC_ID_LSCR, |
||||
AV_CODEC_ID_VP4, |
||||
AV_CODEC_ID_IMM5, |
||||
AV_CODEC_ID_MVDV, |
||||
AV_CODEC_ID_MVHA, |
||||
AV_CODEC_ID_CDTOONS, |
||||
AV_CODEC_ID_MV30, |
||||
AV_CODEC_ID_NOTCHLC, |
||||
AV_CODEC_ID_PFM, |
||||
AV_CODEC_ID_MOBICLIP, |
||||
AV_CODEC_ID_PHOTOCD, |
||||
AV_CODEC_ID_IPU, |
||||
AV_CODEC_ID_ARGO, |
||||
AV_CODEC_ID_CRI, |
||||
AV_CODEC_ID_SIMBIOSIS_IMX, |
||||
AV_CODEC_ID_SGA_VIDEO, |
||||
|
||||
/* various PCM "codecs" */ |
||||
AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
|
||||
AV_CODEC_ID_PCM_S16LE = 0x10000, |
||||
AV_CODEC_ID_PCM_S16BE, |
||||
AV_CODEC_ID_PCM_U16LE, |
||||
AV_CODEC_ID_PCM_U16BE, |
||||
AV_CODEC_ID_PCM_S8, |
||||
AV_CODEC_ID_PCM_U8, |
||||
AV_CODEC_ID_PCM_MULAW, |
||||
AV_CODEC_ID_PCM_ALAW, |
||||
AV_CODEC_ID_PCM_S32LE, |
||||
AV_CODEC_ID_PCM_S32BE, |
||||
AV_CODEC_ID_PCM_U32LE, |
||||
AV_CODEC_ID_PCM_U32BE, |
||||
AV_CODEC_ID_PCM_S24LE, |
||||
AV_CODEC_ID_PCM_S24BE, |
||||
AV_CODEC_ID_PCM_U24LE, |
||||
AV_CODEC_ID_PCM_U24BE, |
||||
AV_CODEC_ID_PCM_S24DAUD, |
||||
AV_CODEC_ID_PCM_ZORK, |
||||
AV_CODEC_ID_PCM_S16LE_PLANAR, |
||||
AV_CODEC_ID_PCM_DVD, |
||||
AV_CODEC_ID_PCM_F32BE, |
||||
AV_CODEC_ID_PCM_F32LE, |
||||
AV_CODEC_ID_PCM_F64BE, |
||||
AV_CODEC_ID_PCM_F64LE, |
||||
AV_CODEC_ID_PCM_BLURAY, |
||||
AV_CODEC_ID_PCM_LXF, |
||||
AV_CODEC_ID_S302M, |
||||
AV_CODEC_ID_PCM_S8_PLANAR, |
||||
AV_CODEC_ID_PCM_S24LE_PLANAR, |
||||
AV_CODEC_ID_PCM_S32LE_PLANAR, |
||||
AV_CODEC_ID_PCM_S16BE_PLANAR, |
||||
|
||||
AV_CODEC_ID_PCM_S64LE = 0x10800, |
||||
AV_CODEC_ID_PCM_S64BE, |
||||
AV_CODEC_ID_PCM_F16LE, |
||||
AV_CODEC_ID_PCM_F24LE, |
||||
AV_CODEC_ID_PCM_VIDC, |
||||
AV_CODEC_ID_PCM_SGA, |
||||
|
||||
/* various ADPCM codecs */ |
||||
AV_CODEC_ID_ADPCM_IMA_QT = 0x11000, |
||||
AV_CODEC_ID_ADPCM_IMA_WAV, |
||||
AV_CODEC_ID_ADPCM_IMA_DK3, |
||||
AV_CODEC_ID_ADPCM_IMA_DK4, |
||||
AV_CODEC_ID_ADPCM_IMA_WS, |
||||
AV_CODEC_ID_ADPCM_IMA_SMJPEG, |
||||
AV_CODEC_ID_ADPCM_MS, |
||||
AV_CODEC_ID_ADPCM_4XM, |
||||
AV_CODEC_ID_ADPCM_XA, |
||||
AV_CODEC_ID_ADPCM_ADX, |
||||
AV_CODEC_ID_ADPCM_EA, |
||||
AV_CODEC_ID_ADPCM_G726, |
||||
AV_CODEC_ID_ADPCM_CT, |
||||
AV_CODEC_ID_ADPCM_SWF, |
||||
AV_CODEC_ID_ADPCM_YAMAHA, |
||||
AV_CODEC_ID_ADPCM_SBPRO_4, |
||||
AV_CODEC_ID_ADPCM_SBPRO_3, |
||||
AV_CODEC_ID_ADPCM_SBPRO_2, |
||||
AV_CODEC_ID_ADPCM_THP, |
||||
AV_CODEC_ID_ADPCM_IMA_AMV, |
||||
AV_CODEC_ID_ADPCM_EA_R1, |
||||
AV_CODEC_ID_ADPCM_EA_R3, |
||||
AV_CODEC_ID_ADPCM_EA_R2, |
||||
AV_CODEC_ID_ADPCM_IMA_EA_SEAD, |
||||
AV_CODEC_ID_ADPCM_IMA_EA_EACS, |
||||
AV_CODEC_ID_ADPCM_EA_XAS, |
||||
AV_CODEC_ID_ADPCM_EA_MAXIS_XA, |
||||
AV_CODEC_ID_ADPCM_IMA_ISS, |
||||
AV_CODEC_ID_ADPCM_G722, |
||||
AV_CODEC_ID_ADPCM_IMA_APC, |
||||
AV_CODEC_ID_ADPCM_VIMA, |
||||
|
||||
AV_CODEC_ID_ADPCM_AFC = 0x11800, |
||||
AV_CODEC_ID_ADPCM_IMA_OKI, |
||||
AV_CODEC_ID_ADPCM_DTK, |
||||
AV_CODEC_ID_ADPCM_IMA_RAD, |
||||
AV_CODEC_ID_ADPCM_G726LE, |
||||
AV_CODEC_ID_ADPCM_THP_LE, |
||||
AV_CODEC_ID_ADPCM_PSX, |
||||
AV_CODEC_ID_ADPCM_AICA, |
||||
AV_CODEC_ID_ADPCM_IMA_DAT4, |
||||
AV_CODEC_ID_ADPCM_MTAF, |
||||
AV_CODEC_ID_ADPCM_AGM, |
||||
AV_CODEC_ID_ADPCM_ARGO, |
||||
AV_CODEC_ID_ADPCM_IMA_SSI, |
||||
AV_CODEC_ID_ADPCM_ZORK, |
||||
AV_CODEC_ID_ADPCM_IMA_APM, |
||||
AV_CODEC_ID_ADPCM_IMA_ALP, |
||||
AV_CODEC_ID_ADPCM_IMA_MTF, |
||||
AV_CODEC_ID_ADPCM_IMA_CUNNING, |
||||
AV_CODEC_ID_ADPCM_IMA_MOFLEX, |
||||
|
||||
/* AMR */ |
||||
AV_CODEC_ID_AMR_NB = 0x12000, |
||||
AV_CODEC_ID_AMR_WB, |
||||
|
||||
/* RealAudio codecs*/ |
||||
AV_CODEC_ID_RA_144 = 0x13000, |
||||
AV_CODEC_ID_RA_288, |
||||
|
||||
/* various DPCM codecs */ |
||||
AV_CODEC_ID_ROQ_DPCM = 0x14000, |
||||
AV_CODEC_ID_INTERPLAY_DPCM, |
||||
AV_CODEC_ID_XAN_DPCM, |
||||
AV_CODEC_ID_SOL_DPCM, |
||||
|
||||
AV_CODEC_ID_SDX2_DPCM = 0x14800, |
||||
AV_CODEC_ID_GREMLIN_DPCM, |
||||
AV_CODEC_ID_DERF_DPCM, |
||||
|
||||
/* audio codecs */ |
||||
AV_CODEC_ID_MP2 = 0x15000, |
||||
AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
|
||||
AV_CODEC_ID_AAC, |
||||
AV_CODEC_ID_AC3, |
||||
AV_CODEC_ID_DTS, |
||||
AV_CODEC_ID_VORBIS, |
||||
AV_CODEC_ID_DVAUDIO, |
||||
AV_CODEC_ID_WMAV1, |
||||
AV_CODEC_ID_WMAV2, |
||||
AV_CODEC_ID_MACE3, |
||||
AV_CODEC_ID_MACE6, |
||||
AV_CODEC_ID_VMDAUDIO, |
||||
AV_CODEC_ID_FLAC, |
||||
AV_CODEC_ID_MP3ADU, |
||||
AV_CODEC_ID_MP3ON4, |
||||
AV_CODEC_ID_SHORTEN, |
||||
AV_CODEC_ID_ALAC, |
||||
AV_CODEC_ID_WESTWOOD_SND1, |
||||
AV_CODEC_ID_GSM, ///< as in Berlin toast format
|
||||
AV_CODEC_ID_QDM2, |
||||
AV_CODEC_ID_COOK, |
||||
AV_CODEC_ID_TRUESPEECH, |
||||
AV_CODEC_ID_TTA, |
||||
AV_CODEC_ID_SMACKAUDIO, |
||||
AV_CODEC_ID_QCELP, |
||||
AV_CODEC_ID_WAVPACK, |
||||
AV_CODEC_ID_DSICINAUDIO, |
||||
AV_CODEC_ID_IMC, |
||||
AV_CODEC_ID_MUSEPACK7, |
||||
AV_CODEC_ID_MLP, |
||||
AV_CODEC_ID_GSM_MS, /* as found in WAV */ |
||||
AV_CODEC_ID_ATRAC3, |
||||
AV_CODEC_ID_APE, |
||||
AV_CODEC_ID_NELLYMOSER, |
||||
AV_CODEC_ID_MUSEPACK8, |
||||
AV_CODEC_ID_SPEEX, |
||||
AV_CODEC_ID_WMAVOICE, |
||||
AV_CODEC_ID_WMAPRO, |
||||
AV_CODEC_ID_WMALOSSLESS, |
||||
AV_CODEC_ID_ATRAC3P, |
||||
AV_CODEC_ID_EAC3, |
||||
AV_CODEC_ID_SIPR, |
||||
AV_CODEC_ID_MP1, |
||||
AV_CODEC_ID_TWINVQ, |
||||
AV_CODEC_ID_TRUEHD, |
||||
AV_CODEC_ID_MP4ALS, |
||||
AV_CODEC_ID_ATRAC1, |
||||
AV_CODEC_ID_BINKAUDIO_RDFT, |
||||
AV_CODEC_ID_BINKAUDIO_DCT, |
||||
AV_CODEC_ID_AAC_LATM, |
||||
AV_CODEC_ID_QDMC, |
||||
AV_CODEC_ID_CELT, |
||||
AV_CODEC_ID_G723_1, |
||||
AV_CODEC_ID_G729, |
||||
AV_CODEC_ID_8SVX_EXP, |
||||
AV_CODEC_ID_8SVX_FIB, |
||||
AV_CODEC_ID_BMV_AUDIO, |
||||
AV_CODEC_ID_RALF, |
||||
AV_CODEC_ID_IAC, |
||||
AV_CODEC_ID_ILBC, |
||||
AV_CODEC_ID_OPUS, |
||||
AV_CODEC_ID_COMFORT_NOISE, |
||||
AV_CODEC_ID_TAK, |
||||
AV_CODEC_ID_METASOUND, |
||||
AV_CODEC_ID_PAF_AUDIO, |
||||
AV_CODEC_ID_ON2AVC, |
||||
AV_CODEC_ID_DSS_SP, |
||||
AV_CODEC_ID_CODEC2, |
||||
|
||||
AV_CODEC_ID_FFWAVESYNTH = 0x15800, |
||||
AV_CODEC_ID_SONIC, |
||||
AV_CODEC_ID_SONIC_LS, |
||||
AV_CODEC_ID_EVRC, |
||||
AV_CODEC_ID_SMV, |
||||
AV_CODEC_ID_DSD_LSBF, |
||||
AV_CODEC_ID_DSD_MSBF, |
||||
AV_CODEC_ID_DSD_LSBF_PLANAR, |
||||
AV_CODEC_ID_DSD_MSBF_PLANAR, |
||||
AV_CODEC_ID_4GV, |
||||
AV_CODEC_ID_INTERPLAY_ACM, |
||||
AV_CODEC_ID_XMA1, |
||||
AV_CODEC_ID_XMA2, |
||||
AV_CODEC_ID_DST, |
||||
AV_CODEC_ID_ATRAC3AL, |
||||
AV_CODEC_ID_ATRAC3PAL, |
||||
AV_CODEC_ID_DOLBY_E, |
||||
AV_CODEC_ID_APTX, |
||||
AV_CODEC_ID_APTX_HD, |
||||
AV_CODEC_ID_SBC, |
||||
AV_CODEC_ID_ATRAC9, |
||||
AV_CODEC_ID_HCOM, |
||||
AV_CODEC_ID_ACELP_KELVIN, |
||||
AV_CODEC_ID_MPEGH_3D_AUDIO, |
||||
AV_CODEC_ID_SIREN, |
||||
AV_CODEC_ID_HCA, |
||||
AV_CODEC_ID_FASTAUDIO, |
||||
|
||||
/* subtitle codecs */ |
||||
AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
|
||||
AV_CODEC_ID_DVD_SUBTITLE = 0x17000, |
||||
AV_CODEC_ID_DVB_SUBTITLE, |
||||
AV_CODEC_ID_TEXT, ///< raw UTF-8 text
|
||||
AV_CODEC_ID_XSUB, |
||||
AV_CODEC_ID_SSA, |
||||
AV_CODEC_ID_MOV_TEXT, |
||||
AV_CODEC_ID_HDMV_PGS_SUBTITLE, |
||||
AV_CODEC_ID_DVB_TELETEXT, |
||||
AV_CODEC_ID_SRT, |
||||
|
||||
AV_CODEC_ID_MICRODVD = 0x17800, |
||||
AV_CODEC_ID_EIA_608, |
||||
AV_CODEC_ID_JACOSUB, |
||||
AV_CODEC_ID_SAMI, |
||||
AV_CODEC_ID_REALTEXT, |
||||
AV_CODEC_ID_STL, |
||||
AV_CODEC_ID_SUBVIEWER1, |
||||
AV_CODEC_ID_SUBVIEWER, |
||||
AV_CODEC_ID_SUBRIP, |
||||
AV_CODEC_ID_WEBVTT, |
||||
AV_CODEC_ID_MPL2, |
||||
AV_CODEC_ID_VPLAYER, |
||||
AV_CODEC_ID_PJS, |
||||
AV_CODEC_ID_ASS, |
||||
AV_CODEC_ID_HDMV_TEXT_SUBTITLE, |
||||
AV_CODEC_ID_TTML, |
||||
AV_CODEC_ID_ARIB_CAPTION, |
||||
|
||||
/* other specific kind of codecs (generally used for attachments) */ |
||||
AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs.
|
||||
AV_CODEC_ID_TTF = 0x18000, |
||||
|
||||
AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program stream.
|
||||
AV_CODEC_ID_EPG, |
||||
AV_CODEC_ID_BINTEXT = 0x18800, |
||||
AV_CODEC_ID_XBIN, |
||||
AV_CODEC_ID_IDF, |
||||
AV_CODEC_ID_OTF, |
||||
AV_CODEC_ID_SMPTE_KLV, |
||||
AV_CODEC_ID_DVD_NAV, |
||||
AV_CODEC_ID_TIMED_ID3, |
||||
AV_CODEC_ID_BIN_DATA, |
||||
|
||||
|
||||
AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it
|
||||
|
||||
AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
|
||||
* stream (only used by libavformat) */ |
||||
AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems
|
||||
* stream (only used by libavformat) */ |
||||
AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information.
|
||||
AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket
|
||||
}; |
||||
|
||||
/**
|
||||
* Get the type of the given codec. |
||||
*/ |
||||
enum AVMediaType avcodec_get_type(enum AVCodecID codec_id); |
||||
|
||||
/**
|
||||
* Get the name of a codec. |
||||
* @return a static string identifying the codec; never NULL |
||||
*/ |
||||
const char *avcodec_get_name(enum AVCodecID id); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif // AVCODEC_CODEC_ID_H
|
||||
@ -0,0 +1,229 @@ |
||||
/*
|
||||
* Codec parameters public API |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_CODEC_PAR_H |
||||
#define AVCODEC_CODEC_PAR_H |
||||
|
||||
#include <stdint.h> |
||||
|
||||
#include "libavutil/avutil.h" |
||||
#include "libavutil/rational.h" |
||||
#include "libavutil/pixfmt.h" |
||||
|
||||
#include "codec_id.h" |
||||
|
||||
/**
|
||||
* @addtogroup lavc_core |
||||
*/ |
||||
|
||||
enum AVFieldOrder { |
||||
AV_FIELD_UNKNOWN, |
||||
AV_FIELD_PROGRESSIVE, |
||||
AV_FIELD_TT, //< Top coded_first, top displayed first
|
||||
AV_FIELD_BB, //< Bottom coded first, bottom displayed first
|
||||
AV_FIELD_TB, //< Top coded first, bottom displayed first
|
||||
AV_FIELD_BT, //< Bottom coded first, top displayed first
|
||||
}; |
||||
|
||||
/**
|
||||
* This struct describes the properties of an encoded stream. |
||||
* |
||||
* sizeof(AVCodecParameters) is not a part of the public ABI, this struct must |
||||
* be allocated with avcodec_parameters_alloc() and freed with |
||||
* avcodec_parameters_free(). |
||||
*/ |
||||
typedef struct AVCodecParameters { |
||||
/**
|
||||
* General type of the encoded data. |
||||
*/ |
||||
enum AVMediaType codec_type; |
||||
/**
|
||||
* Specific type of the encoded data (the codec used). |
||||
*/ |
||||
enum AVCodecID codec_id; |
||||
/**
|
||||
* Additional information about the codec (corresponds to the AVI FOURCC). |
||||
*/ |
||||
uint32_t codec_tag; |
||||
|
||||
/**
|
||||
* Extra binary data needed for initializing the decoder, codec-dependent. |
||||
* |
||||
* Must be allocated with av_malloc() and will be freed by |
||||
* avcodec_parameters_free(). The allocated size of extradata must be at |
||||
* least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding |
||||
* bytes zeroed. |
||||
*/ |
||||
uint8_t *extradata; |
||||
/**
|
||||
* Size of the extradata content in bytes. |
||||
*/ |
||||
int extradata_size; |
||||
|
||||
/**
|
||||
* - video: the pixel format, the value corresponds to enum AVPixelFormat. |
||||
* - audio: the sample format, the value corresponds to enum AVSampleFormat. |
||||
*/ |
||||
int format; |
||||
|
||||
/**
|
||||
* The average bitrate of the encoded data (in bits per second). |
||||
*/ |
||||
int64_t bit_rate; |
||||
|
||||
/**
|
||||
* The number of bits per sample in the codedwords. |
||||
* |
||||
* This is basically the bitrate per sample. It is mandatory for a bunch of |
||||
* formats to actually decode them. It's the number of bits for one sample in |
||||
* the actual coded bitstream. |
||||
* |
||||
* This could be for example 4 for ADPCM |
||||
* For PCM formats this matches bits_per_raw_sample |
||||
* Can be 0 |
||||
*/ |
||||
int bits_per_coded_sample; |
||||
|
||||
/**
|
||||
* This is the number of valid bits in each output sample. If the |
||||
* sample format has more bits, the least significant bits are additional |
||||
* padding bits, which are always 0. Use right shifts to reduce the sample |
||||
* to its actual size. For example, audio formats with 24 bit samples will |
||||
* have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32. |
||||
* To get the original sample use "(int32_t)sample >> 8"." |
||||
* |
||||
* For ADPCM this might be 12 or 16 or similar |
||||
* Can be 0 |
||||
*/ |
||||
int bits_per_raw_sample; |
||||
|
||||
/**
|
||||
* Codec-specific bitstream restrictions that the stream conforms to. |
||||
*/ |
||||
int profile; |
||||
int level; |
||||
|
||||
/**
|
||||
* Video only. The dimensions of the video frame in pixels. |
||||
*/ |
||||
int width; |
||||
int height; |
||||
|
||||
/**
|
||||
* Video only. The aspect ratio (width / height) which a single pixel |
||||
* should have when displayed. |
||||
* |
||||
* When the aspect ratio is unknown / undefined, the numerator should be |
||||
* set to 0 (the denominator may have any value). |
||||
*/ |
||||
AVRational sample_aspect_ratio; |
||||
|
||||
/**
|
||||
* Video only. The order of the fields in interlaced video. |
||||
*/ |
||||
enum AVFieldOrder field_order; |
||||
|
||||
/**
|
||||
* Video only. Additional colorspace characteristics. |
||||
*/ |
||||
enum AVColorRange color_range; |
||||
enum AVColorPrimaries color_primaries; |
||||
enum AVColorTransferCharacteristic color_trc; |
||||
enum AVColorSpace color_space; |
||||
enum AVChromaLocation chroma_location; |
||||
|
||||
/**
|
||||
* Video only. Number of delayed frames. |
||||
*/ |
||||
int video_delay; |
||||
|
||||
/**
|
||||
* Audio only. The channel layout bitmask. May be 0 if the channel layout is |
||||
* unknown or unspecified, otherwise the number of bits set must be equal to |
||||
* the channels field. |
||||
*/ |
||||
uint64_t channel_layout; |
||||
/**
|
||||
* Audio only. The number of audio channels. |
||||
*/ |
||||
int channels; |
||||
/**
|
||||
* Audio only. The number of audio samples per second. |
||||
*/ |
||||
int sample_rate; |
||||
/**
|
||||
* Audio only. The number of bytes per coded audio frame, required by some |
||||
* formats. |
||||
* |
||||
* Corresponds to nBlockAlign in WAVEFORMATEX. |
||||
*/ |
||||
int block_align; |
||||
/**
|
||||
* Audio only. Audio frame size, if known. Required by some formats to be static. |
||||
*/ |
||||
int frame_size; |
||||
|
||||
/**
|
||||
* Audio only. The amount of padding (in samples) inserted by the encoder at |
||||
* the beginning of the audio. I.e. this number of leading decoded samples |
||||
* must be discarded by the caller to get the original audio without leading |
||||
* padding. |
||||
*/ |
||||
int initial_padding; |
||||
/**
|
||||
* Audio only. The amount of padding (in samples) appended by the encoder to |
||||
* the end of the audio. I.e. this number of decoded samples must be |
||||
* discarded by the caller from the end of the stream to get the original |
||||
* audio without any trailing padding. |
||||
*/ |
||||
int trailing_padding; |
||||
/**
|
||||
* Audio only. Number of samples to skip after a discontinuity. |
||||
*/ |
||||
int seek_preroll; |
||||
} AVCodecParameters; |
||||
|
||||
/**
|
||||
* Allocate a new AVCodecParameters and set its fields to default values |
||||
* (unknown/invalid/0). The returned struct must be freed with |
||||
* avcodec_parameters_free(). |
||||
*/ |
||||
AVCodecParameters *avcodec_parameters_alloc(void); |
||||
|
||||
/**
|
||||
* Free an AVCodecParameters instance and everything associated with it and |
||||
* write NULL to the supplied pointer. |
||||
*/ |
||||
void avcodec_parameters_free(AVCodecParameters **par); |
||||
|
||||
/**
|
||||
* Copy the contents of src to dst. Any allocated fields in dst are freed and |
||||
* replaced with newly allocated duplicates of the corresponding fields in src. |
||||
* |
||||
* @return >= 0 on success, a negative AVERROR code on failure. |
||||
*/ |
||||
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src); |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif // AVCODEC_CODEC_PAR_H
|
||||
@ -0,0 +1,112 @@ |
||||
/*
|
||||
* Direct3D11 HW acceleration |
||||
* |
||||
* copyright (c) 2009 Laurent Aimar |
||||
* copyright (c) 2015 Steve Lhomme |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_D3D11VA_H |
||||
#define AVCODEC_D3D11VA_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup lavc_codec_hwaccel_d3d11va |
||||
* Public libavcodec D3D11VA header. |
||||
*/ |
||||
|
||||
#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 |
||||
#undef _WIN32_WINNT |
||||
#define _WIN32_WINNT 0x0602 |
||||
#endif |
||||
|
||||
#include <stdint.h> |
||||
#include <d3d11.h> |
||||
|
||||
/**
|
||||
* @defgroup lavc_codec_hwaccel_d3d11va Direct3D11 |
||||
* @ingroup lavc_codec_hwaccel |
||||
* |
||||
* @{ |
||||
*/ |
||||
|
||||
#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for Direct3D11 and old UVD/UVD+ ATI video cards
|
||||
#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for Direct3D11 and old Intel GPUs with ClearVideo interface
|
||||
|
||||
/**
|
||||
* This structure is used to provides the necessary configurations and data |
||||
* to the Direct3D11 FFmpeg HWAccel implementation. |
||||
* |
||||
* The application must make it available as AVCodecContext.hwaccel_context. |
||||
* |
||||
* Use av_d3d11va_alloc_context() exclusively to allocate an AVD3D11VAContext. |
||||
*/ |
||||
typedef struct AVD3D11VAContext { |
||||
/**
|
||||
* D3D11 decoder object |
||||
*/ |
||||
ID3D11VideoDecoder *decoder; |
||||
|
||||
/**
|
||||
* D3D11 VideoContext |
||||
*/ |
||||
ID3D11VideoContext *video_context; |
||||
|
||||
/**
|
||||
* D3D11 configuration used to create the decoder |
||||
*/ |
||||
D3D11_VIDEO_DECODER_CONFIG *cfg; |
||||
|
||||
/**
|
||||
* The number of surface in the surface array |
||||
*/ |
||||
unsigned surface_count; |
||||
|
||||
/**
|
||||
* The array of Direct3D surfaces used to create the decoder |
||||
*/ |
||||
ID3D11VideoDecoderOutputView **surface; |
||||
|
||||
/**
|
||||
* A bit field configuring the workarounds needed for using the decoder |
||||
*/ |
||||
uint64_t workaround; |
||||
|
||||
/**
|
||||
* Private to the FFmpeg AVHWAccel implementation |
||||
*/ |
||||
unsigned report_id; |
||||
|
||||
/**
|
||||
* Mutex to access video_context |
||||
*/ |
||||
HANDLE context_mutex; |
||||
} AVD3D11VAContext; |
||||
|
||||
/**
|
||||
* Allocate an AVD3D11VAContext. |
||||
* |
||||
* @return Newly-allocated AVD3D11VAContext or NULL on failure. |
||||
*/ |
||||
AVD3D11VAContext *av_d3d11va_alloc_context(void); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* AVCODEC_D3D11VA_H */ |
||||
@ -0,0 +1,131 @@ |
||||
/*
|
||||
* Copyright (C) 2007 Marco Gerards <marco@gnu.org> |
||||
* Copyright (C) 2009 David Conrad |
||||
* Copyright (C) 2011 Jordi Ortiz |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_DIRAC_H |
||||
#define AVCODEC_DIRAC_H |
||||
|
||||
/**
|
||||
* @file |
||||
* Interface to Dirac Decoder/Encoder |
||||
* @author Marco Gerards <marco@gnu.org> |
||||
* @author David Conrad |
||||
* @author Jordi Ortiz |
||||
*/ |
||||
|
||||
#include "avcodec.h" |
||||
|
||||
/**
|
||||
* The spec limits the number of wavelet decompositions to 4 for both |
||||
* level 1 (VC-2) and 128 (long-gop default). |
||||
* 5 decompositions is the maximum before >16-bit buffers are needed. |
||||
* Schroedinger allows this for DD 9,7 and 13,7 wavelets only, limiting |
||||
* the others to 4 decompositions (or 3 for the fidelity filter). |
||||
* |
||||
* We use this instead of MAX_DECOMPOSITIONS to save some memory. |
||||
*/ |
||||
#define MAX_DWT_LEVELS 5 |
||||
|
||||
/**
|
||||
* Parse code values: |
||||
* |
||||
* Dirac Specification -> |
||||
* 9.6.1 Table 9.1 |
||||
* |
||||
* VC-2 Specification -> |
||||
* 10.4.1 Table 10.1 |
||||
*/ |
||||
|
||||
enum DiracParseCodes { |
||||
DIRAC_PCODE_SEQ_HEADER = 0x00, |
||||
DIRAC_PCODE_END_SEQ = 0x10, |
||||
DIRAC_PCODE_AUX = 0x20, |
||||
DIRAC_PCODE_PAD = 0x30, |
||||
DIRAC_PCODE_PICTURE_CODED = 0x08, |
||||
DIRAC_PCODE_PICTURE_RAW = 0x48, |
||||
DIRAC_PCODE_PICTURE_LOW_DEL = 0xC8, |
||||
DIRAC_PCODE_PICTURE_HQ = 0xE8, |
||||
DIRAC_PCODE_INTER_NOREF_CO1 = 0x0A, |
||||
DIRAC_PCODE_INTER_NOREF_CO2 = 0x09, |
||||
DIRAC_PCODE_INTER_REF_CO1 = 0x0D, |
||||
DIRAC_PCODE_INTER_REF_CO2 = 0x0E, |
||||
DIRAC_PCODE_INTRA_REF_CO = 0x0C, |
||||
DIRAC_PCODE_INTRA_REF_RAW = 0x4C, |
||||
DIRAC_PCODE_INTRA_REF_PICT = 0xCC, |
||||
DIRAC_PCODE_MAGIC = 0x42424344, |
||||
}; |
||||
|
||||
typedef struct DiracVersionInfo { |
||||
int major; |
||||
int minor; |
||||
} DiracVersionInfo; |
||||
|
||||
typedef struct AVDiracSeqHeader { |
||||
unsigned width; |
||||
unsigned height; |
||||
uint8_t chroma_format; ///< 0: 444 1: 422 2: 420
|
||||
|
||||
uint8_t interlaced; |
||||
uint8_t top_field_first; |
||||
|
||||
uint8_t frame_rate_index; ///< index into dirac_frame_rate[]
|
||||
uint8_t aspect_ratio_index; ///< index into dirac_aspect_ratio[]
|
||||
|
||||
uint16_t clean_width; |
||||
uint16_t clean_height; |
||||
uint16_t clean_left_offset; |
||||
uint16_t clean_right_offset; |
||||
|
||||
uint8_t pixel_range_index; ///< index into dirac_pixel_range_presets[]
|
||||
uint8_t color_spec_index; ///< index into dirac_color_spec_presets[]
|
||||
|
||||
int profile; |
||||
int level; |
||||
|
||||
AVRational framerate; |
||||
AVRational sample_aspect_ratio; |
||||
|
||||
enum AVPixelFormat pix_fmt; |
||||
enum AVColorRange color_range; |
||||
enum AVColorPrimaries color_primaries; |
||||
enum AVColorTransferCharacteristic color_trc; |
||||
enum AVColorSpace colorspace; |
||||
|
||||
DiracVersionInfo version; |
||||
int bit_depth; |
||||
} AVDiracSeqHeader; |
||||
|
||||
/**
|
||||
* Parse a Dirac sequence header. |
||||
* |
||||
* @param dsh this function will allocate and fill an AVDiracSeqHeader struct |
||||
* and write it into this pointer. The caller must free it with |
||||
* av_free(). |
||||
* @param buf the data buffer |
||||
* @param buf_size the size of the data buffer in bytes |
||||
* @param log_ctx if non-NULL, this function will log errors here |
||||
* @return 0 on success, a negative AVERROR code on failure |
||||
*/ |
||||
int av_dirac_parse_sequence_header(AVDiracSeqHeader **dsh, |
||||
const uint8_t *buf, size_t buf_size, |
||||
void *log_ctx); |
||||
|
||||
#endif /* AVCODEC_DIRAC_H */ |
||||
@ -0,0 +1,83 @@ |
||||
/*
|
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_DV_PROFILE_H |
||||
#define AVCODEC_DV_PROFILE_H |
||||
|
||||
#include <stdint.h> |
||||
|
||||
#include "libavutil/pixfmt.h" |
||||
#include "libavutil/rational.h" |
||||
#include "avcodec.h" |
||||
|
||||
/* minimum number of bytes to read from a DV stream in order to
|
||||
* determine the profile */ |
||||
#define DV_PROFILE_BYTES (6 * 80) /* 6 DIF blocks */ |
||||
|
||||
|
||||
/*
|
||||
* AVDVProfile is used to express the differences between various |
||||
* DV flavors. For now it's primarily used for differentiating |
||||
* 525/60 and 625/50, but the plans are to use it for various |
||||
* DV specs as well (e.g. SMPTE314M vs. IEC 61834). |
||||
*/ |
||||
typedef struct AVDVProfile { |
||||
int dsf; /* value of the dsf in the DV header */ |
||||
int video_stype; /* stype for VAUX source pack */ |
||||
int frame_size; /* total size of one frame in bytes */ |
||||
int difseg_size; /* number of DIF segments per DIF channel */ |
||||
int n_difchan; /* number of DIF channels per frame */ |
||||
AVRational time_base; /* 1/framerate */ |
||||
int ltc_divisor; /* FPS from the LTS standpoint */ |
||||
int height; /* picture height in pixels */ |
||||
int width; /* picture width in pixels */ |
||||
AVRational sar[2]; /* sample aspect ratios for 4:3 and 16:9 */ |
||||
enum AVPixelFormat pix_fmt; /* picture pixel format */ |
||||
int bpm; /* blocks per macroblock */ |
||||
const uint8_t *block_sizes; /* AC block sizes, in bits */ |
||||
int audio_stride; /* size of audio_shuffle table */ |
||||
int audio_min_samples[3]; /* min amount of audio samples */ |
||||
/* for 48kHz, 44.1kHz and 32kHz */ |
||||
int audio_samples_dist[5]; /* how many samples are supposed to be */ |
||||
/* in each frame in a 5 frames window */ |
||||
const uint8_t (*audio_shuffle)[9]; /* PCM shuffling table */ |
||||
} AVDVProfile; |
||||
|
||||
/**
|
||||
* Get a DV profile for the provided compressed frame. |
||||
* |
||||
* @param sys the profile used for the previous frame, may be NULL |
||||
* @param frame the compressed data buffer |
||||
* @param buf_size size of the buffer in bytes |
||||
* @return the DV profile for the supplied data or NULL on failure |
||||
*/ |
||||
const AVDVProfile *av_dv_frame_profile(const AVDVProfile *sys, |
||||
const uint8_t *frame, unsigned buf_size); |
||||
|
||||
/**
|
||||
* Get a DV profile for the provided stream parameters. |
||||
*/ |
||||
const AVDVProfile *av_dv_codec_profile(int width, int height, enum AVPixelFormat pix_fmt); |
||||
|
||||
/**
|
||||
* Get a DV profile for the provided stream parameters. |
||||
* The frame rate is used as a best-effort parameter. |
||||
*/ |
||||
const AVDVProfile *av_dv_codec_profile2(int width, int height, enum AVPixelFormat pix_fmt, AVRational frame_rate); |
||||
|
||||
#endif /* AVCODEC_DV_PROFILE_H */ |
||||
@ -0,0 +1,93 @@ |
||||
/*
|
||||
* DXVA2 HW acceleration |
||||
* |
||||
* copyright (c) 2009 Laurent Aimar |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_DXVA2_H |
||||
#define AVCODEC_DXVA2_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup lavc_codec_hwaccel_dxva2 |
||||
* Public libavcodec DXVA2 header. |
||||
*/ |
||||
|
||||
#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 |
||||
#undef _WIN32_WINNT |
||||
#define _WIN32_WINNT 0x0602 |
||||
#endif |
||||
|
||||
#include <stdint.h> |
||||
#include <d3d9.h> |
||||
#include <dxva2api.h> |
||||
|
||||
/**
|
||||
* @defgroup lavc_codec_hwaccel_dxva2 DXVA2 |
||||
* @ingroup lavc_codec_hwaccel |
||||
* |
||||
* @{ |
||||
*/ |
||||
|
||||
#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards
|
||||
#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for DXVA2 and old Intel GPUs with ClearVideo interface
|
||||
|
||||
/**
|
||||
* This structure is used to provides the necessary configurations and data |
||||
* to the DXVA2 FFmpeg HWAccel implementation. |
||||
* |
||||
* The application must make it available as AVCodecContext.hwaccel_context. |
||||
*/ |
||||
struct dxva_context { |
||||
/**
|
||||
* DXVA2 decoder object |
||||
*/ |
||||
IDirectXVideoDecoder *decoder; |
||||
|
||||
/**
|
||||
* DXVA2 configuration used to create the decoder |
||||
*/ |
||||
const DXVA2_ConfigPictureDecode *cfg; |
||||
|
||||
/**
|
||||
* The number of surface in the surface array |
||||
*/ |
||||
unsigned surface_count; |
||||
|
||||
/**
|
||||
* The array of Direct3D surfaces used to create the decoder |
||||
*/ |
||||
LPDIRECT3DSURFACE9 *surface; |
||||
|
||||
/**
|
||||
* A bit field configuring the workarounds needed for using the decoder |
||||
*/ |
||||
uint64_t workaround; |
||||
|
||||
/**
|
||||
* Private to the FFmpeg AVHWAccel implementation |
||||
*/ |
||||
unsigned report_id; |
||||
}; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* AVCODEC_DXVA2_H */ |
||||
@ -0,0 +1,46 @@ |
||||
/*
|
||||
* JNI public API functions |
||||
* |
||||
* Copyright (c) 2015-2016 Matthieu Bouron <matthieu.bouron stupeflix.com> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_JNI_H |
||||
#define AVCODEC_JNI_H |
||||
|
||||
/*
|
||||
* Manually set a Java virtual machine which will be used to retrieve the JNI |
||||
* environment. Once a Java VM is set it cannot be changed afterwards, meaning |
||||
* you can call multiple times av_jni_set_java_vm with the same Java VM pointer |
||||
* however it will error out if you try to set a different Java VM. |
||||
* |
||||
* @param vm Java virtual machine |
||||
* @param log_ctx context used for logging, can be NULL |
||||
* @return 0 on success, < 0 otherwise |
||||
*/ |
||||
int av_jni_set_java_vm(void *vm, void *log_ctx); |
||||
|
||||
/*
|
||||
* Get the Java virtual machine which has been set with av_jni_set_java_vm. |
||||
* |
||||
* @param vm Java virtual machine |
||||
* @return a pointer to the Java virtual machine |
||||
*/ |
||||
void *av_jni_get_java_vm(void *log_ctx); |
||||
|
||||
#endif /* AVCODEC_JNI_H */ |
||||
@ -0,0 +1,101 @@ |
||||
/*
|
||||
* Android MediaCodec public API |
||||
* |
||||
* Copyright (c) 2016 Matthieu Bouron <matthieu.bouron stupeflix.com> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_MEDIACODEC_H |
||||
#define AVCODEC_MEDIACODEC_H |
||||
|
||||
#include "libavcodec/avcodec.h" |
||||
|
||||
/**
|
||||
* This structure holds a reference to a android/view/Surface object that will |
||||
* be used as output by the decoder. |
||||
* |
||||
*/ |
||||
typedef struct AVMediaCodecContext { |
||||
|
||||
/**
|
||||
* android/view/Surface object reference. |
||||
*/ |
||||
void *surface; |
||||
|
||||
} AVMediaCodecContext; |
||||
|
||||
/**
|
||||
* Allocate and initialize a MediaCodec context. |
||||
* |
||||
* When decoding with MediaCodec is finished, the caller must free the |
||||
* MediaCodec context with av_mediacodec_default_free. |
||||
* |
||||
* @return a pointer to a newly allocated AVMediaCodecContext on success, NULL otherwise |
||||
*/ |
||||
AVMediaCodecContext *av_mediacodec_alloc_context(void); |
||||
|
||||
/**
|
||||
* Convenience function that sets up the MediaCodec context. |
||||
* |
||||
* @param avctx codec context |
||||
* @param ctx MediaCodec context to initialize |
||||
* @param surface reference to an android/view/Surface |
||||
* @return 0 on success, < 0 otherwise |
||||
*/ |
||||
int av_mediacodec_default_init(AVCodecContext *avctx, AVMediaCodecContext *ctx, void *surface); |
||||
|
||||
/**
|
||||
* This function must be called to free the MediaCodec context initialized with |
||||
* av_mediacodec_default_init(). |
||||
* |
||||
* @param avctx codec context |
||||
*/ |
||||
void av_mediacodec_default_free(AVCodecContext *avctx); |
||||
|
||||
/**
|
||||
* Opaque structure representing a MediaCodec buffer to render. |
||||
*/ |
||||
typedef struct MediaCodecBuffer AVMediaCodecBuffer; |
||||
|
||||
/**
|
||||
* Release a MediaCodec buffer and render it to the surface that is associated |
||||
* with the decoder. This function should only be called once on a given |
||||
* buffer, once released the underlying buffer returns to the codec, thus |
||||
* subsequent calls to this function will have no effect. |
||||
* |
||||
* @param buffer the buffer to render |
||||
* @param render 1 to release and render the buffer to the surface or 0 to |
||||
* discard the buffer |
||||
* @return 0 on success, < 0 otherwise |
||||
*/ |
||||
int av_mediacodec_release_buffer(AVMediaCodecBuffer *buffer, int render); |
||||
|
||||
/**
|
||||
* Release a MediaCodec buffer and render it at the given time to the surface |
||||
* that is associated with the decoder. The timestamp must be within one second |
||||
* of the current java/lang/System#nanoTime() (which is implemented using |
||||
* CLOCK_MONOTONIC on Android). See the Android MediaCodec documentation |
||||
* of android/media/MediaCodec#releaseOutputBuffer(int,long) for more details. |
||||
* |
||||
* @param buffer the buffer to render |
||||
* @param time timestamp in nanoseconds of when to render the buffer |
||||
* @return 0 on success, < 0 otherwise |
||||
*/ |
||||
int av_mediacodec_render_buffer_at_time(AVMediaCodecBuffer *buffer, int64_t time); |
||||
|
||||
#endif /* AVCODEC_MEDIACODEC_H */ |
||||
@ -0,0 +1,774 @@ |
||||
/*
|
||||
* AVPacket public API |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_PACKET_H |
||||
#define AVCODEC_PACKET_H |
||||
|
||||
#include <stddef.h> |
||||
#include <stdint.h> |
||||
|
||||
#include "libavutil/attributes.h" |
||||
#include "libavutil/buffer.h" |
||||
#include "libavutil/dict.h" |
||||
#include "libavutil/rational.h" |
||||
|
||||
#include "libavcodec/version.h" |
||||
|
||||
/**
|
||||
* @defgroup lavc_packet AVPacket |
||||
* |
||||
* Types and functions for working with AVPacket. |
||||
* @{ |
||||
*/ |
||||
enum AVPacketSideDataType { |
||||
/**
|
||||
* An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE |
||||
* bytes worth of palette. This side data signals that a new palette is |
||||
* present. |
||||
*/ |
||||
AV_PKT_DATA_PALETTE, |
||||
|
||||
/**
|
||||
* The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format |
||||
* that the extradata buffer was changed and the receiving side should |
||||
* act upon it appropriately. The new extradata is embedded in the side |
||||
* data buffer and should be immediately used for processing the current |
||||
* frame or packet. |
||||
*/ |
||||
AV_PKT_DATA_NEW_EXTRADATA, |
||||
|
||||
/**
|
||||
* An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: |
||||
* @code |
||||
* u32le param_flags |
||||
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) |
||||
* s32le channel_count |
||||
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) |
||||
* u64le channel_layout |
||||
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) |
||||
* s32le sample_rate |
||||
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) |
||||
* s32le width |
||||
* s32le height |
||||
* @endcode |
||||
*/ |
||||
AV_PKT_DATA_PARAM_CHANGE, |
||||
|
||||
/**
|
||||
* An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of |
||||
* structures with info about macroblocks relevant to splitting the |
||||
* packet into smaller packets on macroblock edges (e.g. as for RFC 2190). |
||||
* That is, it does not necessarily contain info about all macroblocks, |
||||
* as long as the distance between macroblocks in the info is smaller |
||||
* than the target payload size. |
||||
* Each MB info structure is 12 bytes, and is laid out as follows: |
||||
* @code |
||||
* u32le bit offset from the start of the packet |
||||
* u8 current quantizer at the start of the macroblock |
||||
* u8 GOB number |
||||
* u16le macroblock address within the GOB |
||||
* u8 horizontal MV predictor |
||||
* u8 vertical MV predictor |
||||
* u8 horizontal MV predictor for block number 3 |
||||
* u8 vertical MV predictor for block number 3 |
||||
* @endcode |
||||
*/ |
||||
AV_PKT_DATA_H263_MB_INFO, |
||||
|
||||
/**
|
||||
* This side data should be associated with an audio stream and contains |
||||
* ReplayGain information in form of the AVReplayGain struct. |
||||
*/ |
||||
AV_PKT_DATA_REPLAYGAIN, |
||||
|
||||
/**
|
||||
* This side data contains a 3x3 transformation matrix describing an affine |
||||
* transformation that needs to be applied to the decoded video frames for |
||||
* correct presentation. |
||||
* |
||||
* See libavutil/display.h for a detailed description of the data. |
||||
*/ |
||||
AV_PKT_DATA_DISPLAYMATRIX, |
||||
|
||||
/**
|
||||
* This side data should be associated with a video stream and contains |
||||
* Stereoscopic 3D information in form of the AVStereo3D struct. |
||||
*/ |
||||
AV_PKT_DATA_STEREO3D, |
||||
|
||||
/**
|
||||
* This side data should be associated with an audio stream and corresponds |
||||
* to enum AVAudioServiceType. |
||||
*/ |
||||
AV_PKT_DATA_AUDIO_SERVICE_TYPE, |
||||
|
||||
/**
|
||||
* This side data contains quality related information from the encoder. |
||||
* @code |
||||
* u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad). |
||||
* u8 picture type |
||||
* u8 error count |
||||
* u16 reserved |
||||
* u64le[error count] sum of squared differences between encoder in and output |
||||
* @endcode |
||||
*/ |
||||
AV_PKT_DATA_QUALITY_STATS, |
||||
|
||||
/**
|
||||
* This side data contains an integer value representing the stream index |
||||
* of a "fallback" track. A fallback track indicates an alternate |
||||
* track to use when the current track can not be decoded for some reason. |
||||
* e.g. no decoder available for codec. |
||||
*/ |
||||
AV_PKT_DATA_FALLBACK_TRACK, |
||||
|
||||
/**
|
||||
* This side data corresponds to the AVCPBProperties struct. |
||||
*/ |
||||
AV_PKT_DATA_CPB_PROPERTIES, |
||||
|
||||
/**
|
||||
* Recommmends skipping the specified number of samples |
||||
* @code |
||||
* u32le number of samples to skip from start of this packet |
||||
* u32le number of samples to skip from end of this packet |
||||
* u8 reason for start skip |
||||
* u8 reason for end skip (0=padding silence, 1=convergence) |
||||
* @endcode |
||||
*/ |
||||
AV_PKT_DATA_SKIP_SAMPLES, |
||||
|
||||
/**
|
||||
* An AV_PKT_DATA_JP_DUALMONO side data packet indicates that |
||||
* the packet may contain "dual mono" audio specific to Japanese DTV |
||||
* and if it is true, recommends only the selected channel to be used. |
||||
* @code |
||||
* u8 selected channels (0=mail/left, 1=sub/right, 2=both) |
||||
* @endcode |
||||
*/ |
||||
AV_PKT_DATA_JP_DUALMONO, |
||||
|
||||
/**
|
||||
* A list of zero terminated key/value strings. There is no end marker for |
||||
* the list, so it is required to rely on the side data size to stop. |
||||
*/ |
||||
AV_PKT_DATA_STRINGS_METADATA, |
||||
|
||||
/**
|
||||
* Subtitle event position |
||||
* @code |
||||
* u32le x1 |
||||
* u32le y1 |
||||
* u32le x2 |
||||
* u32le y2 |
||||
* @endcode |
||||
*/ |
||||
AV_PKT_DATA_SUBTITLE_POSITION, |
||||
|
||||
/**
|
||||
* Data found in BlockAdditional element of matroska container. There is |
||||
* no end marker for the data, so it is required to rely on the side data |
||||
* size to recognize the end. 8 byte id (as found in BlockAddId) followed |
||||
* by data. |
||||
*/ |
||||
AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, |
||||
|
||||
/**
|
||||
* The optional first identifier line of a WebVTT cue. |
||||
*/ |
||||
AV_PKT_DATA_WEBVTT_IDENTIFIER, |
||||
|
||||
/**
|
||||
* The optional settings (rendering instructions) that immediately |
||||
* follow the timestamp specifier of a WebVTT cue. |
||||
*/ |
||||
AV_PKT_DATA_WEBVTT_SETTINGS, |
||||
|
||||
/**
|
||||
* A list of zero terminated key/value strings. There is no end marker for |
||||
* the list, so it is required to rely on the side data size to stop. This |
||||
* side data includes updated metadata which appeared in the stream. |
||||
*/ |
||||
AV_PKT_DATA_METADATA_UPDATE, |
||||
|
||||
/**
|
||||
* MPEGTS stream ID as uint8_t, this is required to pass the stream ID |
||||
* information from the demuxer to the corresponding muxer. |
||||
*/ |
||||
AV_PKT_DATA_MPEGTS_STREAM_ID, |
||||
|
||||
/**
|
||||
* Mastering display metadata (based on SMPTE-2086:2014). This metadata |
||||
* should be associated with a video stream and contains data in the form |
||||
* of the AVMasteringDisplayMetadata struct. |
||||
*/ |
||||
AV_PKT_DATA_MASTERING_DISPLAY_METADATA, |
||||
|
||||
/**
|
||||
* This side data should be associated with a video stream and corresponds |
||||
* to the AVSphericalMapping structure. |
||||
*/ |
||||
AV_PKT_DATA_SPHERICAL, |
||||
|
||||
/**
|
||||
* Content light level (based on CTA-861.3). This metadata should be |
||||
* associated with a video stream and contains data in the form of the |
||||
* AVContentLightMetadata struct. |
||||
*/ |
||||
AV_PKT_DATA_CONTENT_LIGHT_LEVEL, |
||||
|
||||
/**
|
||||
* ATSC A53 Part 4 Closed Captions. This metadata should be associated with |
||||
* a video stream. A53 CC bitstream is stored as uint8_t in AVPacketSideData.data. |
||||
* The number of bytes of CC data is AVPacketSideData.size. |
||||
*/ |
||||
AV_PKT_DATA_A53_CC, |
||||
|
||||
/**
|
||||
* This side data is encryption initialization data. |
||||
* The format is not part of ABI, use av_encryption_init_info_* methods to |
||||
* access. |
||||
*/ |
||||
AV_PKT_DATA_ENCRYPTION_INIT_INFO, |
||||
|
||||
/**
|
||||
* This side data contains encryption info for how to decrypt the packet. |
||||
* The format is not part of ABI, use av_encryption_info_* methods to access. |
||||
*/ |
||||
AV_PKT_DATA_ENCRYPTION_INFO, |
||||
|
||||
/**
|
||||
* Active Format Description data consisting of a single byte as specified |
||||
* in ETSI TS 101 154 using AVActiveFormatDescription enum. |
||||
*/ |
||||
AV_PKT_DATA_AFD, |
||||
|
||||
/**
|
||||
* Producer Reference Time data corresponding to the AVProducerReferenceTime struct, |
||||
* usually exported by some encoders (on demand through the prft flag set in the |
||||
* AVCodecContext export_side_data field). |
||||
*/ |
||||
AV_PKT_DATA_PRFT, |
||||
|
||||
/**
|
||||
* ICC profile data consisting of an opaque octet buffer following the |
||||
* format described by ISO 15076-1. |
||||
*/ |
||||
AV_PKT_DATA_ICC_PROFILE, |
||||
|
||||
/**
|
||||
* DOVI configuration |
||||
* ref: |
||||
* dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2, section 2.2 |
||||
* dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2, section 3.3 |
||||
* Tags are stored in struct AVDOVIDecoderConfigurationRecord. |
||||
*/ |
||||
AV_PKT_DATA_DOVI_CONF, |
||||
|
||||
/**
|
||||
* Timecode which conforms to SMPTE ST 12-1:2014. The data is an array of 4 uint32_t |
||||
* where the first uint32_t describes how many (1-3) of the other timecodes are used. |
||||
* The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() |
||||
* function in libavutil/timecode.h. |
||||
*/ |
||||
AV_PKT_DATA_S12M_TIMECODE, |
||||
|
||||
/**
|
||||
* The number of side data types. |
||||
* This is not part of the public API/ABI in the sense that it may |
||||
* change when new side data types are added. |
||||
* This must stay the last enum value. |
||||
* If its value becomes huge, some code using it |
||||
* needs to be updated as it assumes it to be smaller than other limits. |
||||
*/ |
||||
AV_PKT_DATA_NB |
||||
}; |
||||
|
||||
#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED
|
||||
|
||||
typedef struct AVPacketSideData { |
||||
uint8_t *data; |
||||
#if FF_API_BUFFER_SIZE_T |
||||
int size; |
||||
#else |
||||
size_t size; |
||||
#endif |
||||
enum AVPacketSideDataType type; |
||||
} AVPacketSideData; |
||||
|
||||
/**
|
||||
* This structure stores compressed data. It is typically exported by demuxers |
||||
* and then passed as input to decoders, or received as output from encoders and |
||||
* then passed to muxers. |
||||
* |
||||
* For video, it should typically contain one compressed frame. For audio it may |
||||
* contain several compressed frames. Encoders are allowed to output empty |
||||
* packets, with no compressed data, containing only side data |
||||
* (e.g. to update some stream parameters at the end of encoding). |
||||
* |
||||
* The semantics of data ownership depends on the buf field. |
||||
* If it is set, the packet data is dynamically allocated and is |
||||
* valid indefinitely until a call to av_packet_unref() reduces the |
||||
* reference count to 0. |
||||
* |
||||
* If the buf field is not set av_packet_ref() would make a copy instead |
||||
* of increasing the reference count. |
||||
* |
||||
* The side data is always allocated with av_malloc(), copied by |
||||
* av_packet_ref() and freed by av_packet_unref(). |
||||
* |
||||
* sizeof(AVPacket) being a part of the public ABI is deprecated. once |
||||
* av_init_packet() is removed, new packets will only be able to be allocated |
||||
* with av_packet_alloc(), and new fields may be added to the end of the struct |
||||
* with a minor bump. |
||||
* |
||||
* @see av_packet_alloc |
||||
* @see av_packet_ref |
||||
* @see av_packet_unref |
||||
*/ |
||||
typedef struct AVPacket { |
||||
/**
|
||||
* A reference to the reference-counted buffer where the packet data is |
||||
* stored. |
||||
* May be NULL, then the packet data is not reference-counted. |
||||
*/ |
||||
AVBufferRef *buf; |
||||
/**
|
||||
* Presentation timestamp in AVStream->time_base units; the time at which |
||||
* the decompressed packet will be presented to the user. |
||||
* Can be AV_NOPTS_VALUE if it is not stored in the file. |
||||
* pts MUST be larger or equal to dts as presentation cannot happen before |
||||
* decompression, unless one wants to view hex dumps. Some formats misuse |
||||
* the terms dts and pts/cts to mean something different. Such timestamps |
||||
* must be converted to true pts/dts before they are stored in AVPacket. |
||||
*/ |
||||
int64_t pts; |
||||
/**
|
||||
* Decompression timestamp in AVStream->time_base units; the time at which |
||||
* the packet is decompressed. |
||||
* Can be AV_NOPTS_VALUE if it is not stored in the file. |
||||
*/ |
||||
int64_t dts; |
||||
uint8_t *data; |
||||
int size; |
||||
int stream_index; |
||||
/**
|
||||
* A combination of AV_PKT_FLAG values |
||||
*/ |
||||
int flags; |
||||
/**
|
||||
* Additional packet data that can be provided by the container. |
||||
* Packet can contain several types of side information. |
||||
*/ |
||||
AVPacketSideData *side_data; |
||||
int side_data_elems; |
||||
|
||||
/**
|
||||
* Duration of this packet in AVStream->time_base units, 0 if unknown. |
||||
* Equals next_pts - this_pts in presentation order. |
||||
*/ |
||||
int64_t duration; |
||||
|
||||
int64_t pos; ///< byte position in stream, -1 if unknown
|
||||
|
||||
#if FF_API_CONVERGENCE_DURATION |
||||
/**
|
||||
* @deprecated Same as the duration field, but as int64_t. This was required |
||||
* for Matroska subtitles, whose duration values could overflow when the |
||||
* duration field was still an int. |
||||
*/ |
||||
attribute_deprecated |
||||
int64_t convergence_duration; |
||||
#endif |
||||
} AVPacket; |
||||
|
||||
#if FF_API_INIT_PACKET |
||||
attribute_deprecated |
||||
typedef struct AVPacketList { |
||||
AVPacket pkt; |
||||
struct AVPacketList *next; |
||||
} AVPacketList; |
||||
#endif |
||||
|
||||
#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe
|
||||
#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
|
||||
/**
|
||||
* Flag is used to discard packets which are required to maintain valid |
||||
* decoder state but are not required for output and should be dropped |
||||
* after decoding. |
||||
**/ |
||||
#define AV_PKT_FLAG_DISCARD 0x0004 |
||||
/**
|
||||
* The packet comes from a trusted source. |
||||
* |
||||
* Otherwise-unsafe constructs such as arbitrary pointers to data |
||||
* outside the packet may be followed. |
||||
*/ |
||||
#define AV_PKT_FLAG_TRUSTED 0x0008 |
||||
/**
|
||||
* Flag is used to indicate packets that contain frames that can |
||||
* be discarded by the decoder. I.e. Non-reference frames. |
||||
*/ |
||||
#define AV_PKT_FLAG_DISPOSABLE 0x0010 |
||||
|
||||
enum AVSideDataParamChangeFlags { |
||||
AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001, |
||||
AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002, |
||||
AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004, |
||||
AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008, |
||||
}; |
||||
|
||||
/**
|
||||
* Allocate an AVPacket and set its fields to default values. The resulting |
||||
* struct must be freed using av_packet_free(). |
||||
* |
||||
* @return An AVPacket filled with default values or NULL on failure. |
||||
* |
||||
* @note this only allocates the AVPacket itself, not the data buffers. Those |
||||
* must be allocated through other means such as av_new_packet. |
||||
* |
||||
* @see av_new_packet |
||||
*/ |
||||
AVPacket *av_packet_alloc(void); |
||||
|
||||
/**
|
||||
* Create a new packet that references the same data as src. |
||||
* |
||||
* This is a shortcut for av_packet_alloc()+av_packet_ref(). |
||||
* |
||||
* @return newly created AVPacket on success, NULL on error. |
||||
* |
||||
* @see av_packet_alloc |
||||
* @see av_packet_ref |
||||
*/ |
||||
AVPacket *av_packet_clone(const AVPacket *src); |
||||
|
||||
/**
|
||||
* Free the packet, if the packet is reference counted, it will be |
||||
* unreferenced first. |
||||
* |
||||
* @param pkt packet to be freed. The pointer will be set to NULL. |
||||
* @note passing NULL is a no-op. |
||||
*/ |
||||
void av_packet_free(AVPacket **pkt); |
||||
|
||||
#if FF_API_INIT_PACKET |
||||
/**
|
||||
* Initialize optional fields of a packet with default values. |
||||
* |
||||
* Note, this does not touch the data and size members, which have to be |
||||
* initialized separately. |
||||
* |
||||
* @param pkt packet |
||||
* |
||||
* @see av_packet_alloc |
||||
* @see av_packet_unref |
||||
* |
||||
* @deprecated This function is deprecated. Once it's removed, |
||||
sizeof(AVPacket) will not be a part of the ABI anymore. |
||||
*/ |
||||
attribute_deprecated |
||||
void av_init_packet(AVPacket *pkt); |
||||
#endif |
||||
|
||||
/**
|
||||
* Allocate the payload of a packet and initialize its fields with |
||||
* default values. |
||||
* |
||||
* @param pkt packet |
||||
* @param size wanted payload size |
||||
* @return 0 if OK, AVERROR_xxx otherwise |
||||
*/ |
||||
int av_new_packet(AVPacket *pkt, int size); |
||||
|
||||
/**
|
||||
* Reduce packet size, correctly zeroing padding |
||||
* |
||||
* @param pkt packet |
||||
* @param size new size |
||||
*/ |
||||
void av_shrink_packet(AVPacket *pkt, int size); |
||||
|
||||
/**
|
||||
* Increase packet size, correctly zeroing padding |
||||
* |
||||
* @param pkt packet |
||||
* @param grow_by number of bytes by which to increase the size of the packet |
||||
*/ |
||||
int av_grow_packet(AVPacket *pkt, int grow_by); |
||||
|
||||
/**
|
||||
* Initialize a reference-counted packet from av_malloc()ed data. |
||||
* |
||||
* @param pkt packet to be initialized. This function will set the data, size, |
||||
* and buf fields, all others are left untouched. |
||||
* @param data Data allocated by av_malloc() to be used as packet data. If this |
||||
* function returns successfully, the data is owned by the underlying AVBuffer. |
||||
* The caller may not access the data through other means. |
||||
* @param size size of data in bytes, without the padding. I.e. the full buffer |
||||
* size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE. |
||||
* |
||||
* @return 0 on success, a negative AVERROR on error |
||||
*/ |
||||
int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size); |
||||
|
||||
#if FF_API_AVPACKET_OLD_API |
||||
/**
|
||||
* @warning This is a hack - the packet memory allocation stuff is broken. The |
||||
* packet is allocated if it was not really allocated. |
||||
* |
||||
* @deprecated Use av_packet_ref or av_packet_make_refcounted |
||||
*/ |
||||
attribute_deprecated |
||||
int av_dup_packet(AVPacket *pkt); |
||||
/**
|
||||
* Copy packet, including contents |
||||
* |
||||
* @return 0 on success, negative AVERROR on fail |
||||
* |
||||
* @deprecated Use av_packet_ref |
||||
*/ |
||||
attribute_deprecated |
||||
int av_copy_packet(AVPacket *dst, const AVPacket *src); |
||||
|
||||
/**
|
||||
* Copy packet side data |
||||
* |
||||
* @return 0 on success, negative AVERROR on fail |
||||
* |
||||
* @deprecated Use av_packet_copy_props |
||||
*/ |
||||
attribute_deprecated |
||||
int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src); |
||||
|
||||
/**
|
||||
* Free a packet. |
||||
* |
||||
* @deprecated Use av_packet_unref |
||||
* |
||||
* @param pkt packet to free |
||||
*/ |
||||
attribute_deprecated |
||||
void av_free_packet(AVPacket *pkt); |
||||
#endif |
||||
/**
|
||||
* Allocate new information of a packet. |
||||
* |
||||
* @param pkt packet |
||||
* @param type side information type |
||||
* @param size side information size |
||||
* @return pointer to fresh allocated data or NULL otherwise |
||||
*/ |
||||
uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, |
||||
#if FF_API_BUFFER_SIZE_T |
||||
int size); |
||||
#else |
||||
size_t size); |
||||
#endif |
||||
|
||||
/**
|
||||
* Wrap an existing array as a packet side data. |
||||
* |
||||
* @param pkt packet |
||||
* @param type side information type |
||||
* @param data the side data array. It must be allocated with the av_malloc() |
||||
* family of functions. The ownership of the data is transferred to |
||||
* pkt. |
||||
* @param size side information size |
||||
* @return a non-negative number on success, a negative AVERROR code on |
||||
* failure. On failure, the packet is unchanged and the data remains |
||||
* owned by the caller. |
||||
*/ |
||||
int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, |
||||
uint8_t *data, size_t size); |
||||
|
||||
/**
|
||||
* Shrink the already allocated side data buffer |
||||
* |
||||
* @param pkt packet |
||||
* @param type side information type |
||||
* @param size new side information size |
||||
* @return 0 on success, < 0 on failure |
||||
*/ |
||||
int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, |
||||
#if FF_API_BUFFER_SIZE_T |
||||
int size); |
||||
#else |
||||
size_t size); |
||||
#endif |
||||
|
||||
/**
|
||||
* Get side information from packet. |
||||
* |
||||
* @param pkt packet |
||||
* @param type desired side information type |
||||
* @param size If supplied, *size will be set to the size of the side data |
||||
* or to zero if the desired side data is not present. |
||||
* @return pointer to data if present or NULL otherwise |
||||
*/ |
||||
uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, |
||||
#if FF_API_BUFFER_SIZE_T |
||||
int *size); |
||||
#else |
||||
size_t *size); |
||||
#endif |
||||
|
||||
#if FF_API_MERGE_SD_API |
||||
attribute_deprecated |
||||
int av_packet_merge_side_data(AVPacket *pkt); |
||||
|
||||
attribute_deprecated |
||||
int av_packet_split_side_data(AVPacket *pkt); |
||||
#endif |
||||
|
||||
const char *av_packet_side_data_name(enum AVPacketSideDataType type); |
||||
|
||||
/**
|
||||
* Pack a dictionary for use in side_data. |
||||
* |
||||
* @param dict The dictionary to pack. |
||||
* @param size pointer to store the size of the returned data |
||||
* @return pointer to data if successful, NULL otherwise |
||||
*/ |
||||
#if FF_API_BUFFER_SIZE_T |
||||
uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size); |
||||
#else |
||||
uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size); |
||||
#endif |
||||
/**
|
||||
* Unpack a dictionary from side_data. |
||||
* |
||||
* @param data data from side_data |
||||
* @param size size of the data |
||||
* @param dict the metadata storage dictionary |
||||
* @return 0 on success, < 0 on failure |
||||
*/ |
||||
#if FF_API_BUFFER_SIZE_T |
||||
int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict); |
||||
#else |
||||
int av_packet_unpack_dictionary(const uint8_t *data, size_t size, |
||||
AVDictionary **dict); |
||||
#endif |
||||
|
||||
/**
|
||||
* Convenience function to free all the side data stored. |
||||
* All the other fields stay untouched. |
||||
* |
||||
* @param pkt packet |
||||
*/ |
||||
void av_packet_free_side_data(AVPacket *pkt); |
||||
|
||||
/**
|
||||
* Setup a new reference to the data described by a given packet |
||||
* |
||||
* If src is reference-counted, setup dst as a new reference to the |
||||
* buffer in src. Otherwise allocate a new buffer in dst and copy the |
||||
* data from src into it. |
||||
* |
||||
* All the other fields are copied from src. |
||||
* |
||||
* @see av_packet_unref |
||||
* |
||||
* @param dst Destination packet. Will be completely overwritten. |
||||
* @param src Source packet |
||||
* |
||||
* @return 0 on success, a negative AVERROR on error. On error, dst |
||||
* will be blank (as if returned by av_packet_alloc()). |
||||
*/ |
||||
int av_packet_ref(AVPacket *dst, const AVPacket *src); |
||||
|
||||
/**
|
||||
* Wipe the packet. |
||||
* |
||||
* Unreference the buffer referenced by the packet and reset the |
||||
* remaining packet fields to their default values. |
||||
* |
||||
* @param pkt The packet to be unreferenced. |
||||
*/ |
||||
void av_packet_unref(AVPacket *pkt); |
||||
|
||||
/**
|
||||
* Move every field in src to dst and reset src. |
||||
* |
||||
* @see av_packet_unref |
||||
* |
||||
* @param src Source packet, will be reset |
||||
* @param dst Destination packet |
||||
*/ |
||||
void av_packet_move_ref(AVPacket *dst, AVPacket *src); |
||||
|
||||
/**
|
||||
* Copy only "properties" fields from src to dst. |
||||
* |
||||
* Properties for the purpose of this function are all the fields |
||||
* beside those related to the packet data (buf, data, size) |
||||
* |
||||
* @param dst Destination packet |
||||
* @param src Source packet |
||||
* |
||||
* @return 0 on success AVERROR on failure. |
||||
*/ |
||||
int av_packet_copy_props(AVPacket *dst, const AVPacket *src); |
||||
|
||||
/**
|
||||
* Ensure the data described by a given packet is reference counted. |
||||
* |
||||
* @note This function does not ensure that the reference will be writable. |
||||
* Use av_packet_make_writable instead for that purpose. |
||||
* |
||||
* @see av_packet_ref |
||||
* @see av_packet_make_writable |
||||
* |
||||
* @param pkt packet whose data should be made reference counted. |
||||
* |
||||
* @return 0 on success, a negative AVERROR on error. On failure, the |
||||
* packet is unchanged. |
||||
*/ |
||||
int av_packet_make_refcounted(AVPacket *pkt); |
||||
|
||||
/**
|
||||
* Create a writable reference for the data described by a given packet, |
||||
* avoiding data copy if possible. |
||||
* |
||||
* @param pkt Packet whose data should be made writable. |
||||
* |
||||
* @return 0 on success, a negative AVERROR on failure. On failure, the |
||||
* packet is unchanged. |
||||
*/ |
||||
int av_packet_make_writable(AVPacket *pkt); |
||||
|
||||
/**
|
||||
* Convert valid timing fields (timestamps / durations) in a packet from one |
||||
* timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be |
||||
* ignored. |
||||
* |
||||
* @param pkt packet on which the conversion will be performed |
||||
* @param tb_src source timebase, in which the timing fields in pkt are |
||||
* expressed |
||||
* @param tb_dst destination timebase, to which the timing fields will be |
||||
* converted |
||||
*/ |
||||
void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif // AVCODEC_PACKET_H
|
||||
@ -0,0 +1,107 @@ |
||||
/*
|
||||
* Intel MediaSDK QSV public API |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_QSV_H |
||||
#define AVCODEC_QSV_H |
||||
|
||||
#include <mfx/mfxvideo.h> |
||||
|
||||
#include "libavutil/buffer.h" |
||||
|
||||
/**
|
||||
* This struct is used for communicating QSV parameters between libavcodec and |
||||
* the caller. It is managed by the caller and must be assigned to |
||||
* AVCodecContext.hwaccel_context. |
||||
* - decoding: hwaccel_context must be set on return from the get_format() |
||||
* callback |
||||
* - encoding: hwaccel_context must be set before avcodec_open2() |
||||
*/ |
||||
typedef struct AVQSVContext { |
||||
/**
|
||||
* If non-NULL, the session to use for encoding or decoding. |
||||
* Otherwise, libavcodec will try to create an internal session. |
||||
*/ |
||||
mfxSession session; |
||||
|
||||
/**
|
||||
* The IO pattern to use. |
||||
*/ |
||||
int iopattern; |
||||
|
||||
/**
|
||||
* Extra buffers to pass to encoder or decoder initialization. |
||||
*/ |
||||
mfxExtBuffer **ext_buffers; |
||||
int nb_ext_buffers; |
||||
|
||||
/**
|
||||
* Encoding only. If this field is set to non-zero by the caller, libavcodec |
||||
* will create an mfxExtOpaqueSurfaceAlloc extended buffer and pass it to |
||||
* the encoder initialization. This only makes sense if iopattern is also |
||||
* set to MFX_IOPATTERN_IN_OPAQUE_MEMORY. |
||||
* |
||||
* The number of allocated opaque surfaces will be the sum of the number |
||||
* required by the encoder and the user-provided value nb_opaque_surfaces. |
||||
* The array of the opaque surfaces will be exported to the caller through |
||||
* the opaque_surfaces field. |
||||
*/ |
||||
int opaque_alloc; |
||||
|
||||
/**
|
||||
* Encoding only, and only if opaque_alloc is set to non-zero. Before |
||||
* calling avcodec_open2(), the caller should set this field to the number |
||||
* of extra opaque surfaces to allocate beyond what is required by the |
||||
* encoder. |
||||
* |
||||
* On return from avcodec_open2(), this field will be set by libavcodec to |
||||
* the total number of allocated opaque surfaces. |
||||
*/ |
||||
int nb_opaque_surfaces; |
||||
|
||||
/**
|
||||
* Encoding only, and only if opaque_alloc is set to non-zero. On return |
||||
* from avcodec_open2(), this field will be used by libavcodec to export the |
||||
* array of the allocated opaque surfaces to the caller, so they can be |
||||
* passed to other parts of the pipeline. |
||||
* |
||||
* The buffer reference exported here is owned and managed by libavcodec, |
||||
* the callers should make their own reference with av_buffer_ref() and free |
||||
* it with av_buffer_unref() when it is no longer needed. |
||||
* |
||||
* The buffer data is an nb_opaque_surfaces-sized array of mfxFrameSurface1. |
||||
*/ |
||||
AVBufferRef *opaque_surfaces; |
||||
|
||||
/**
|
||||
* Encoding only, and only if opaque_alloc is set to non-zero. On return |
||||
* from avcodec_open2(), this field will be set to the surface type used in |
||||
* the opaque allocation request. |
||||
*/ |
||||
int opaque_alloc_type; |
||||
} AVQSVContext; |
||||
|
||||
/**
|
||||
* Allocate a new context. |
||||
* |
||||
* It must be freed by the caller with av_free(). |
||||
*/ |
||||
AVQSVContext *av_qsv_alloc_context(void); |
||||
|
||||
#endif /* AVCODEC_QSV_H */ |
||||
@ -0,0 +1,86 @@ |
||||
/*
|
||||
* Video Acceleration API (shared data between FFmpeg and the video player) |
||||
* HW decode acceleration for MPEG-2, MPEG-4, H.264 and VC-1 |
||||
* |
||||
* Copyright (C) 2008-2009 Splitted-Desktop Systems |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_VAAPI_H |
||||
#define AVCODEC_VAAPI_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup lavc_codec_hwaccel_vaapi |
||||
* Public libavcodec VA API header. |
||||
*/ |
||||
|
||||
#include <stdint.h> |
||||
#include "libavutil/attributes.h" |
||||
#include "version.h" |
||||
|
||||
#if FF_API_STRUCT_VAAPI_CONTEXT |
||||
|
||||
/**
|
||||
* @defgroup lavc_codec_hwaccel_vaapi VA API Decoding |
||||
* @ingroup lavc_codec_hwaccel |
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* This structure is used to share data between the FFmpeg library and |
||||
* the client video application. |
||||
* This shall be zero-allocated and available as |
||||
* AVCodecContext.hwaccel_context. All user members can be set once |
||||
* during initialization or through each AVCodecContext.get_buffer() |
||||
* function call. In any case, they must be valid prior to calling |
||||
* decoding functions. |
||||
* |
||||
* Deprecated: use AVCodecContext.hw_frames_ctx instead. |
||||
*/ |
||||
struct attribute_deprecated vaapi_context { |
||||
/**
|
||||
* Window system dependent data |
||||
* |
||||
* - encoding: unused |
||||
* - decoding: Set by user |
||||
*/ |
||||
void *display; |
||||
|
||||
/**
|
||||
* Configuration ID |
||||
* |
||||
* - encoding: unused |
||||
* - decoding: Set by user |
||||
*/ |
||||
uint32_t config_id; |
||||
|
||||
/**
|
||||
* Context ID (video decode pipeline) |
||||
* |
||||
* - encoding: unused |
||||
* - decoding: Set by user |
||||
*/ |
||||
uint32_t context_id; |
||||
}; |
||||
|
||||
/* @} */ |
||||
|
||||
#endif /* FF_API_STRUCT_VAAPI_CONTEXT */ |
||||
|
||||
#endif /* AVCODEC_VAAPI_H */ |
||||
@ -0,0 +1,176 @@ |
||||
/*
|
||||
* The Video Decode and Presentation API for UNIX (VDPAU) is used for |
||||
* hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1. |
||||
* |
||||
* Copyright (C) 2008 NVIDIA |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_VDPAU_H |
||||
#define AVCODEC_VDPAU_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup lavc_codec_hwaccel_vdpau |
||||
* Public libavcodec VDPAU header. |
||||
*/ |
||||
|
||||
|
||||
/**
|
||||
* @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer |
||||
* @ingroup lavc_codec_hwaccel |
||||
* |
||||
* VDPAU hardware acceleration has two modules |
||||
* - VDPAU decoding |
||||
* - VDPAU presentation |
||||
* |
||||
* The VDPAU decoding module parses all headers using FFmpeg |
||||
* parsing mechanisms and uses VDPAU for the actual decoding. |
||||
* |
||||
* As per the current implementation, the actual decoding |
||||
* and rendering (API calls) are done as part of the VDPAU |
||||
* presentation (vo_vdpau.c) module. |
||||
* |
||||
* @{ |
||||
*/ |
||||
|
||||
#include <vdpau/vdpau.h> |
||||
|
||||
#include "libavutil/avconfig.h" |
||||
#include "libavutil/attributes.h" |
||||
|
||||
#include "avcodec.h" |
||||
#include "version.h" |
||||
|
||||
struct AVCodecContext; |
||||
struct AVFrame; |
||||
|
||||
typedef int (*AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *, |
||||
const VdpPictureInfo *, uint32_t, |
||||
const VdpBitstreamBuffer *); |
||||
|
||||
/**
|
||||
* This structure is used to share data between the libavcodec library and |
||||
* the client video application. |
||||
* The user shall allocate the structure via the av_alloc_vdpau_hwaccel |
||||
* function and make it available as |
||||
* AVCodecContext.hwaccel_context. Members can be set by the user once |
||||
* during initialization or through each AVCodecContext.get_buffer() |
||||
* function call. In any case, they must be valid prior to calling |
||||
* decoding functions. |
||||
* |
||||
* The size of this structure is not a part of the public ABI and must not |
||||
* be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an |
||||
* AVVDPAUContext. |
||||
*/ |
||||
typedef struct AVVDPAUContext { |
||||
/**
|
||||
* VDPAU decoder handle |
||||
* |
||||
* Set by user. |
||||
*/ |
||||
VdpDecoder decoder; |
||||
|
||||
/**
|
||||
* VDPAU decoder render callback |
||||
* |
||||
* Set by the user. |
||||
*/ |
||||
VdpDecoderRender *render; |
||||
|
||||
AVVDPAU_Render2 render2; |
||||
} AVVDPAUContext; |
||||
|
||||
/**
|
||||
* @brief allocation function for AVVDPAUContext |
||||
* |
||||
* Allows extending the struct without breaking API/ABI |
||||
*/ |
||||
AVVDPAUContext *av_alloc_vdpaucontext(void); |
||||
|
||||
AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *); |
||||
void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2); |
||||
|
||||
/**
|
||||
* Associate a VDPAU device with a codec context for hardware acceleration. |
||||
* This function is meant to be called from the get_format() codec callback, |
||||
* or earlier. It can also be called after avcodec_flush_buffers() to change |
||||
* the underlying VDPAU device mid-stream (e.g. to recover from non-transparent |
||||
* display preemption). |
||||
* |
||||
* @note get_format() must return AV_PIX_FMT_VDPAU if this function completes |
||||
* successfully. |
||||
* |
||||
* @param avctx decoding context whose get_format() callback is invoked |
||||
* @param device VDPAU device handle to use for hardware acceleration |
||||
* @param get_proc_address VDPAU device driver |
||||
* @param flags zero of more OR'd AV_HWACCEL_FLAG_* flags |
||||
* |
||||
* @return 0 on success, an AVERROR code on failure. |
||||
*/ |
||||
int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device, |
||||
VdpGetProcAddress *get_proc_address, unsigned flags); |
||||
|
||||
/**
|
||||
* Gets the parameters to create an adequate VDPAU video surface for the codec |
||||
* context using VDPAU hardware decoding acceleration. |
||||
* |
||||
* @note Behavior is undefined if the context was not successfully bound to a |
||||
* VDPAU device using av_vdpau_bind_context(). |
||||
* |
||||
* @param avctx the codec context being used for decoding the stream |
||||
* @param type storage space for the VDPAU video surface chroma type |
||||
* (or NULL to ignore) |
||||
* @param width storage space for the VDPAU video surface pixel width |
||||
* (or NULL to ignore) |
||||
* @param height storage space for the VDPAU video surface pixel height |
||||
* (or NULL to ignore) |
||||
* |
||||
* @return 0 on success, a negative AVERROR code on failure. |
||||
*/ |
||||
int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type, |
||||
uint32_t *width, uint32_t *height); |
||||
|
||||
/**
|
||||
* Allocate an AVVDPAUContext. |
||||
* |
||||
* @return Newly-allocated AVVDPAUContext or NULL on failure. |
||||
*/ |
||||
AVVDPAUContext *av_vdpau_alloc_context(void); |
||||
|
||||
#if FF_API_VDPAU_PROFILE |
||||
/**
|
||||
* Get a decoder profile that should be used for initializing a VDPAU decoder. |
||||
* Should be called from the AVCodecContext.get_format() callback. |
||||
* |
||||
* @deprecated Use av_vdpau_bind_context() instead. |
||||
* |
||||
* @param avctx the codec context being used for decoding the stream |
||||
* @param profile a pointer into which the result will be written on success. |
||||
* The contents of profile are undefined if this function returns |
||||
* an error. |
||||
* |
||||
* @return 0 on success (non-negative), a negative AVERROR on failure. |
||||
*/ |
||||
attribute_deprecated |
||||
int av_vdpau_get_profile(AVCodecContext *avctx, VdpDecoderProfile *profile); |
||||
#endif |
||||
|
||||
/* @}*/ |
||||
|
||||
#endif /* AVCODEC_VDPAU_H */ |
||||
@ -0,0 +1,172 @@ |
||||
/*
|
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_VERSION_H |
||||
#define AVCODEC_VERSION_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup libavc |
||||
* Libavcodec version macros. |
||||
*/ |
||||
|
||||
#include "libavutil/version.h" |
||||
|
||||
#define LIBAVCODEC_VERSION_MAJOR 58 |
||||
#define LIBAVCODEC_VERSION_MINOR 134 |
||||
#define LIBAVCODEC_VERSION_MICRO 100 |
||||
|
||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ |
||||
LIBAVCODEC_VERSION_MINOR, \
|
||||
LIBAVCODEC_VERSION_MICRO) |
||||
#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \ |
||||
LIBAVCODEC_VERSION_MINOR, \
|
||||
LIBAVCODEC_VERSION_MICRO) |
||||
#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT |
||||
|
||||
#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) |
||||
|
||||
/**
|
||||
* FF_API_* defines may be placed below to indicate public API that will be |
||||
* dropped at a future version bump. The defines themselves are not part of |
||||
* the public API and may change, break or disappear at any time. |
||||
* |
||||
* @note, when bumping the major version it is recommended to manually |
||||
* disable each FF_API_* in its own commit instead of disabling them all |
||||
* at once through the bump. This improves the git bisect-ability of the change. |
||||
*/ |
||||
|
||||
#ifndef FF_API_AVCTX_TIMEBASE |
||||
#define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_CODED_FRAME |
||||
#define FF_API_CODED_FRAME (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_SIDEDATA_ONLY_PKT |
||||
#define FF_API_SIDEDATA_ONLY_PKT (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_VDPAU_PROFILE |
||||
#define FF_API_VDPAU_PROFILE (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_CONVERGENCE_DURATION |
||||
#define FF_API_CONVERGENCE_DURATION (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_AVPICTURE |
||||
#define FF_API_AVPICTURE (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_AVPACKET_OLD_API |
||||
#define FF_API_AVPACKET_OLD_API (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_RTP_CALLBACK |
||||
#define FF_API_RTP_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_VBV_DELAY |
||||
#define FF_API_VBV_DELAY (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_CODER_TYPE |
||||
#define FF_API_CODER_TYPE (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_STAT_BITS |
||||
#define FF_API_STAT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_PRIVATE_OPT |
||||
#define FF_API_PRIVATE_OPT (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_ASS_TIMING |
||||
#define FF_API_ASS_TIMING (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_OLD_BSF |
||||
#define FF_API_OLD_BSF (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_COPY_CONTEXT |
||||
#define FF_API_COPY_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_GET_CONTEXT_DEFAULTS |
||||
#define FF_API_GET_CONTEXT_DEFAULTS (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_NVENC_OLD_NAME |
||||
#define FF_API_NVENC_OLD_NAME (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_STRUCT_VAAPI_CONTEXT |
||||
#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_MERGE_SD_API |
||||
#define FF_API_MERGE_SD_API (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_TAG_STRING |
||||
#define FF_API_TAG_STRING (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_GETCHROMA |
||||
#define FF_API_GETCHROMA (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_CODEC_GET_SET |
||||
#define FF_API_CODEC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_USER_VISIBLE_AVHWACCEL |
||||
#define FF_API_USER_VISIBLE_AVHWACCEL (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_LOCKMGR |
||||
#define FF_API_LOCKMGR (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_NEXT |
||||
#define FF_API_NEXT (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_UNSANITIZED_BITRATES |
||||
#define FF_API_UNSANITIZED_BITRATES (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_OPENH264_SLICE_MODE |
||||
#define FF_API_OPENH264_SLICE_MODE (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_OPENH264_CABAC |
||||
#define FF_API_OPENH264_CABAC (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_UNUSED_CODEC_CAPS |
||||
#define FF_API_UNUSED_CODEC_CAPS (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_AVPRIV_PUT_BITS |
||||
#define FF_API_AVPRIV_PUT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_OLD_ENCDEC |
||||
#define FF_API_OLD_ENCDEC (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_AVCODEC_PIX_FMT |
||||
#define FF_API_AVCODEC_PIX_FMT (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_MPV_RC_STRATEGY |
||||
#define FF_API_MPV_RC_STRATEGY (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_PARSER_CHANGE |
||||
#define FF_API_PARSER_CHANGE (LIBAVCODEC_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_THREAD_SAFE_CALLBACKS |
||||
#define FF_API_THREAD_SAFE_CALLBACKS (LIBAVCODEC_VERSION_MAJOR < 60) |
||||
#endif |
||||
#ifndef FF_API_DEBUG_MV |
||||
#define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 60) |
||||
#endif |
||||
#ifndef FF_API_GET_FRAME_CLASS |
||||
#define FF_API_GET_FRAME_CLASS (LIBAVCODEC_VERSION_MAJOR < 60) |
||||
#endif |
||||
#ifndef FF_API_AUTO_THREADS |
||||
#define FF_API_AUTO_THREADS (LIBAVCODEC_VERSION_MAJOR < 60) |
||||
#endif |
||||
#ifndef FF_API_INIT_PACKET |
||||
#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 60) |
||||
#endif |
||||
|
||||
#endif /* AVCODEC_VERSION_H */ |
||||
@ -0,0 +1,127 @@ |
||||
/*
|
||||
* Videotoolbox hardware acceleration |
||||
* |
||||
* copyright (c) 2012 Sebastien Zwickert |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_VIDEOTOOLBOX_H |
||||
#define AVCODEC_VIDEOTOOLBOX_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup lavc_codec_hwaccel_videotoolbox |
||||
* Public libavcodec Videotoolbox header. |
||||
*/ |
||||
|
||||
#include <stdint.h> |
||||
|
||||
#define Picture QuickdrawPicture |
||||
#include <VideoToolbox/VideoToolbox.h> |
||||
#undef Picture |
||||
|
||||
#include "libavcodec/avcodec.h" |
||||
|
||||
/**
|
||||
* This struct holds all the information that needs to be passed |
||||
* between the caller and libavcodec for initializing Videotoolbox decoding. |
||||
* Its size is not a part of the public ABI, it must be allocated with |
||||
* av_videotoolbox_alloc_context() and freed with av_free(). |
||||
*/ |
||||
typedef struct AVVideotoolboxContext { |
||||
/**
|
||||
* Videotoolbox decompression session object. |
||||
* Created and freed the caller. |
||||
*/ |
||||
VTDecompressionSessionRef session; |
||||
|
||||
/**
|
||||
* The output callback that must be passed to the session. |
||||
* Set by av_videottoolbox_default_init() |
||||
*/ |
||||
VTDecompressionOutputCallback output_callback; |
||||
|
||||
/**
|
||||
* CVPixelBuffer Format Type that Videotoolbox will use for decoded frames. |
||||
* set by the caller. If this is set to 0, then no specific format is |
||||
* requested from the decoder, and its native format is output. |
||||
*/ |
||||
OSType cv_pix_fmt_type; |
||||
|
||||
/**
|
||||
* CoreMedia Format Description that Videotoolbox will use to create the decompression session. |
||||
* Set by the caller. |
||||
*/ |
||||
CMVideoFormatDescriptionRef cm_fmt_desc; |
||||
|
||||
/**
|
||||
* CoreMedia codec type that Videotoolbox will use to create the decompression session. |
||||
* Set by the caller. |
||||
*/ |
||||
int cm_codec_type; |
||||
} AVVideotoolboxContext; |
||||
|
||||
/**
|
||||
* Allocate and initialize a Videotoolbox context. |
||||
* |
||||
* This function should be called from the get_format() callback when the caller |
||||
* selects the AV_PIX_FMT_VIDETOOLBOX format. The caller must then create |
||||
* the decoder object (using the output callback provided by libavcodec) that |
||||
* will be used for Videotoolbox-accelerated decoding. |
||||
* |
||||
* When decoding with Videotoolbox is finished, the caller must destroy the decoder |
||||
* object and free the Videotoolbox context using av_free(). |
||||
* |
||||
* @return the newly allocated context or NULL on failure |
||||
*/ |
||||
AVVideotoolboxContext *av_videotoolbox_alloc_context(void); |
||||
|
||||
/**
|
||||
* This is a convenience function that creates and sets up the Videotoolbox context using |
||||
* an internal implementation. |
||||
* |
||||
* @param avctx the corresponding codec context |
||||
* |
||||
* @return >= 0 on success, a negative AVERROR code on failure |
||||
*/ |
||||
int av_videotoolbox_default_init(AVCodecContext *avctx); |
||||
|
||||
/**
|
||||
* This is a convenience function that creates and sets up the Videotoolbox context using |
||||
* an internal implementation. |
||||
* |
||||
* @param avctx the corresponding codec context |
||||
* @param vtctx the Videotoolbox context to use |
||||
* |
||||
* @return >= 0 on success, a negative AVERROR code on failure |
||||
*/ |
||||
int av_videotoolbox_default_init2(AVCodecContext *avctx, AVVideotoolboxContext *vtctx); |
||||
|
||||
/**
|
||||
* This function must be called to free the Videotoolbox context initialized with |
||||
* av_videotoolbox_default_init(). |
||||
* |
||||
* @param avctx the corresponding codec context |
||||
*/ |
||||
void av_videotoolbox_default_free(AVCodecContext *avctx); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* AVCODEC_VIDEOTOOLBOX_H */ |
||||
@ -0,0 +1,74 @@ |
||||
/*
|
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
/**
|
||||
* @file |
||||
* A public API for Vorbis parsing |
||||
* |
||||
* Determines the duration for each packet. |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_VORBIS_PARSER_H |
||||
#define AVCODEC_VORBIS_PARSER_H |
||||
|
||||
#include <stdint.h> |
||||
|
||||
typedef struct AVVorbisParseContext AVVorbisParseContext; |
||||
|
||||
/**
|
||||
* Allocate and initialize the Vorbis parser using headers in the extradata. |
||||
*/ |
||||
AVVorbisParseContext *av_vorbis_parse_init(const uint8_t *extradata, |
||||
int extradata_size); |
||||
|
||||
/**
|
||||
* Free the parser and everything associated with it. |
||||
*/ |
||||
void av_vorbis_parse_free(AVVorbisParseContext **s); |
||||
|
||||
#define VORBIS_FLAG_HEADER 0x00000001 |
||||
#define VORBIS_FLAG_COMMENT 0x00000002 |
||||
#define VORBIS_FLAG_SETUP 0x00000004 |
||||
|
||||
/**
|
||||
* Get the duration for a Vorbis packet. |
||||
* |
||||
* If @p flags is @c NULL, |
||||
* special frames are considered invalid. |
||||
* |
||||
* @param s Vorbis parser context |
||||
* @param buf buffer containing a Vorbis frame |
||||
* @param buf_size size of the buffer |
||||
* @param flags flags for special frames |
||||
*/ |
||||
int av_vorbis_parse_frame_flags(AVVorbisParseContext *s, const uint8_t *buf, |
||||
int buf_size, int *flags); |
||||
|
||||
/**
|
||||
* Get the duration for a Vorbis packet. |
||||
* |
||||
* @param s Vorbis parser context |
||||
* @param buf buffer containing a Vorbis frame |
||||
* @param buf_size size of the buffer |
||||
*/ |
||||
int av_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf, |
||||
int buf_size); |
||||
|
||||
void av_vorbis_parse_reset(AVVorbisParseContext *s); |
||||
|
||||
#endif /* AVCODEC_VORBIS_PARSER_H */ |
||||
@ -0,0 +1,170 @@ |
||||
/*
|
||||
* Copyright (C) 2003 Ivan Kalvachev |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_XVMC_H |
||||
#define AVCODEC_XVMC_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup lavc_codec_hwaccel_xvmc |
||||
* Public libavcodec XvMC header. |
||||
*/ |
||||
|
||||
#include <X11/extensions/XvMC.h> |
||||
|
||||
#include "libavutil/attributes.h" |
||||
#include "version.h" |
||||
#include "avcodec.h" |
||||
|
||||
/**
|
||||
* @defgroup lavc_codec_hwaccel_xvmc XvMC |
||||
* @ingroup lavc_codec_hwaccel |
||||
* |
||||
* @{ |
||||
*/ |
||||
|
||||
#define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct |
||||
the number is 1337 speak for the letters IDCT MCo (motion compensation) */ |
||||
|
||||
struct attribute_deprecated xvmc_pix_fmt { |
||||
/** The field contains the special constant value AV_XVMC_ID.
|
||||
It is used as a test that the application correctly uses the API, |
||||
and that there is no corruption caused by pixel routines. |
||||
- application - set during initialization |
||||
- libavcodec - unchanged |
||||
*/ |
||||
int xvmc_id; |
||||
|
||||
/** Pointer to the block array allocated by XvMCCreateBlocks().
|
||||
The array has to be freed by XvMCDestroyBlocks(). |
||||
Each group of 64 values represents one data block of differential |
||||
pixel information (in MoCo mode) or coefficients for IDCT. |
||||
- application - set the pointer during initialization |
||||
- libavcodec - fills coefficients/pixel data into the array |
||||
*/ |
||||
short* data_blocks; |
||||
|
||||
/** Pointer to the macroblock description array allocated by
|
||||
XvMCCreateMacroBlocks() and freed by XvMCDestroyMacroBlocks(). |
||||
- application - set the pointer during initialization |
||||
- libavcodec - fills description data into the array |
||||
*/ |
||||
XvMCMacroBlock* mv_blocks; |
||||
|
||||
/** Number of macroblock descriptions that can be stored in the mv_blocks
|
||||
array. |
||||
- application - set during initialization |
||||
- libavcodec - unchanged |
||||
*/ |
||||
int allocated_mv_blocks; |
||||
|
||||
/** Number of blocks that can be stored at once in the data_blocks array.
|
||||
- application - set during initialization |
||||
- libavcodec - unchanged |
||||
*/ |
||||
int allocated_data_blocks; |
||||
|
||||
/** Indicate that the hardware would interpret data_blocks as IDCT
|
||||
coefficients and perform IDCT on them. |
||||
- application - set during initialization |
||||
- libavcodec - unchanged |
||||
*/ |
||||
int idct; |
||||
|
||||
/** In MoCo mode it indicates that intra macroblocks are assumed to be in
|
||||
unsigned format; same as the XVMC_INTRA_UNSIGNED flag. |
||||
- application - set during initialization |
||||
- libavcodec - unchanged |
||||
*/ |
||||
int unsigned_intra; |
||||
|
||||
/** Pointer to the surface allocated by XvMCCreateSurface().
|
||||
It has to be freed by XvMCDestroySurface() on application exit. |
||||
It identifies the frame and its state on the video hardware. |
||||
- application - set during initialization |
||||
- libavcodec - unchanged |
||||
*/ |
||||
XvMCSurface* p_surface; |
||||
|
||||
/** Set by the decoder before calling ff_draw_horiz_band(),
|
||||
needed by the XvMCRenderSurface function. */ |
||||
//@{
|
||||
/** Pointer to the surface used as past reference
|
||||
- application - unchanged |
||||
- libavcodec - set |
||||
*/ |
||||
XvMCSurface* p_past_surface; |
||||
|
||||
/** Pointer to the surface used as future reference
|
||||
- application - unchanged |
||||
- libavcodec - set |
||||
*/ |
||||
XvMCSurface* p_future_surface; |
||||
|
||||
/** top/bottom field or frame
|
||||
- application - unchanged |
||||
- libavcodec - set |
||||
*/ |
||||
unsigned int picture_structure; |
||||
|
||||
/** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence
|
||||
- application - unchanged |
||||
- libavcodec - set |
||||
*/ |
||||
unsigned int flags; |
||||
//}@
|
||||
|
||||
/** Number of macroblock descriptions in the mv_blocks array
|
||||
that have already been passed to the hardware. |
||||
- application - zeroes it on get_buffer(). |
||||
A successful ff_draw_horiz_band() may increment it |
||||
with filled_mb_block_num or zero both. |
||||
- libavcodec - unchanged |
||||
*/ |
||||
int start_mv_blocks_num; |
||||
|
||||
/** Number of new macroblock descriptions in the mv_blocks array (after
|
||||
start_mv_blocks_num) that are filled by libavcodec and have to be |
||||
passed to the hardware. |
||||
- application - zeroes it on get_buffer() or after successful |
||||
ff_draw_horiz_band(). |
||||
- libavcodec - increment with one of each stored MB |
||||
*/ |
||||
int filled_mv_blocks_num; |
||||
|
||||
/** Number of the next free data block; one data block consists of
|
||||
64 short values in the data_blocks array. |
||||
All blocks before this one have already been claimed by placing their |
||||
position into the corresponding block description structure field, |
||||
that are part of the mv_blocks array. |
||||
- application - zeroes it on get_buffer(). |
||||
A successful ff_draw_horiz_band() may zero it together |
||||
with start_mb_blocks_num. |
||||
- libavcodec - each decoded macroblock increases it by the number |
||||
of coded blocks it contains. |
||||
*/ |
||||
int next_free_data_block_num; |
||||
}; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* AVCODEC_XVMC_H */ |
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,205 @@ |
||||
/*
|
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVFILTER_BUFFERSINK_H |
||||
#define AVFILTER_BUFFERSINK_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup lavfi_buffersink |
||||
* memory buffer sink API for audio and video |
||||
*/ |
||||
|
||||
#include "avfilter.h" |
||||
|
||||
/**
|
||||
* @defgroup lavfi_buffersink Buffer sink API |
||||
* @ingroup lavfi |
||||
* @{ |
||||
* |
||||
* The buffersink and abuffersink filters are there to connect filter graphs |
||||
* to applications. They have a single input, connected to the graph, and no |
||||
* output. Frames must be extracted using av_buffersink_get_frame() or |
||||
* av_buffersink_get_samples(). |
||||
* |
||||
* The format negotiated by the graph during configuration can be obtained |
||||
* using the accessor functions: |
||||
* - av_buffersink_get_time_base(), |
||||
* - av_buffersink_get_format(), |
||||
* - av_buffersink_get_frame_rate(), |
||||
* - av_buffersink_get_w(), |
||||
* - av_buffersink_get_h(), |
||||
* - av_buffersink_get_sample_aspect_ratio(), |
||||
* - av_buffersink_get_channels(), |
||||
* - av_buffersink_get_channel_layout(), |
||||
* - av_buffersink_get_sample_rate(). |
||||
* |
||||
* The format can be constrained by setting options, using av_opt_set() and |
||||
* related functions with the AV_OPT_SEARCH_CHILDREN flag. |
||||
* - pix_fmts (int list), |
||||
* - sample_fmts (int list), |
||||
* - sample_rates (int list), |
||||
* - channel_layouts (int64_t), |
||||
* - channel_counts (int list), |
||||
* - all_channel_counts (bool). |
||||
* Most of these options are of type binary, and should be set using |
||||
* av_opt_set_int_list() or av_opt_set_bin(). If they are not set, all |
||||
* corresponding formats are accepted. |
||||
* |
||||
* As a special case, if neither channel_layouts nor channel_counts is set, |
||||
* all valid channel layouts are accepted, but channel counts without a |
||||
* layout are not, unless all_channel_counts is set. |
||||
* Also, channel_layouts must not contain a channel layout already accepted |
||||
* by a value in channel_counts; for example, if channel_counts contains 2, |
||||
* then channel_layouts must not contain stereo. |
||||
*/ |
||||
|
||||
/**
|
||||
* Get a frame with filtered data from sink and put it in frame. |
||||
* |
||||
* @param ctx pointer to a buffersink or abuffersink filter context. |
||||
* @param frame pointer to an allocated frame that will be filled with data. |
||||
* The data must be freed using av_frame_unref() / av_frame_free() |
||||
* @param flags a combination of AV_BUFFERSINK_FLAG_* flags |
||||
* |
||||
* @return >= 0 in for success, a negative AVERROR code for failure. |
||||
*/ |
||||
int av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags); |
||||
|
||||
/**
|
||||
* Tell av_buffersink_get_buffer_ref() to read video/samples buffer |
||||
* reference, but not remove it from the buffer. This is useful if you |
||||
* need only to read a video/samples buffer, without to fetch it. |
||||
*/ |
||||
#define AV_BUFFERSINK_FLAG_PEEK 1 |
||||
|
||||
/**
|
||||
* Tell av_buffersink_get_buffer_ref() not to request a frame from its input. |
||||
* If a frame is already buffered, it is read (and removed from the buffer), |
||||
* but if no frame is present, return AVERROR(EAGAIN). |
||||
*/ |
||||
#define AV_BUFFERSINK_FLAG_NO_REQUEST 2 |
||||
|
||||
#if FF_API_BUFFERSINK_ALLOC |
||||
/**
|
||||
* Deprecated and unused struct to use for initializing a buffersink context. |
||||
*/ |
||||
typedef struct AVBufferSinkParams { |
||||
const enum AVPixelFormat *pixel_fmts; ///< list of allowed pixel formats, terminated by AV_PIX_FMT_NONE
|
||||
} AVBufferSinkParams; |
||||
|
||||
/**
|
||||
* Create an AVBufferSinkParams structure. |
||||
* |
||||
* Must be freed with av_free(). |
||||
*/ |
||||
attribute_deprecated |
||||
AVBufferSinkParams *av_buffersink_params_alloc(void); |
||||
|
||||
/**
|
||||
* Deprecated and unused struct to use for initializing an abuffersink context. |
||||
*/ |
||||
typedef struct AVABufferSinkParams { |
||||
const enum AVSampleFormat *sample_fmts; ///< list of allowed sample formats, terminated by AV_SAMPLE_FMT_NONE
|
||||
const int64_t *channel_layouts; ///< list of allowed channel layouts, terminated by -1
|
||||
const int *channel_counts; ///< list of allowed channel counts, terminated by -1
|
||||
int all_channel_counts; ///< if not 0, accept any channel count or layout
|
||||
int *sample_rates; ///< list of allowed sample rates, terminated by -1
|
||||
} AVABufferSinkParams; |
||||
|
||||
/**
|
||||
* Create an AVABufferSinkParams structure. |
||||
* |
||||
* Must be freed with av_free(). |
||||
*/ |
||||
attribute_deprecated |
||||
AVABufferSinkParams *av_abuffersink_params_alloc(void); |
||||
#endif |
||||
|
||||
/**
|
||||
* Set the frame size for an audio buffer sink. |
||||
* |
||||
* All calls to av_buffersink_get_buffer_ref will return a buffer with |
||||
* exactly the specified number of samples, or AVERROR(EAGAIN) if there is |
||||
* not enough. The last buffer at EOF will be padded with 0. |
||||
*/ |
||||
void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size); |
||||
|
||||
/**
|
||||
* @defgroup lavfi_buffersink_accessors Buffer sink accessors |
||||
* Get the properties of the stream |
||||
* @{ |
||||
*/ |
||||
|
||||
enum AVMediaType av_buffersink_get_type (const AVFilterContext *ctx); |
||||
AVRational av_buffersink_get_time_base (const AVFilterContext *ctx); |
||||
int av_buffersink_get_format (const AVFilterContext *ctx); |
||||
|
||||
AVRational av_buffersink_get_frame_rate (const AVFilterContext *ctx); |
||||
int av_buffersink_get_w (const AVFilterContext *ctx); |
||||
int av_buffersink_get_h (const AVFilterContext *ctx); |
||||
AVRational av_buffersink_get_sample_aspect_ratio (const AVFilterContext *ctx); |
||||
|
||||
int av_buffersink_get_channels (const AVFilterContext *ctx); |
||||
uint64_t av_buffersink_get_channel_layout (const AVFilterContext *ctx); |
||||
int av_buffersink_get_sample_rate (const AVFilterContext *ctx); |
||||
|
||||
AVBufferRef * av_buffersink_get_hw_frames_ctx (const AVFilterContext *ctx); |
||||
|
||||
/** @} */ |
||||
|
||||
/**
|
||||
* Get a frame with filtered data from sink and put it in frame. |
||||
* |
||||
* @param ctx pointer to a context of a buffersink or abuffersink AVFilter. |
||||
* @param frame pointer to an allocated frame that will be filled with data. |
||||
* The data must be freed using av_frame_unref() / av_frame_free() |
||||
* |
||||
* @return |
||||
* - >= 0 if a frame was successfully returned. |
||||
* - AVERROR(EAGAIN) if no frames are available at this point; more |
||||
* input frames must be added to the filtergraph to get more output. |
||||
* - AVERROR_EOF if there will be no more output frames on this sink. |
||||
* - A different negative AVERROR code in other failure cases. |
||||
*/ |
||||
int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame); |
||||
|
||||
/**
|
||||
* Same as av_buffersink_get_frame(), but with the ability to specify the number |
||||
* of samples read. This function is less efficient than |
||||
* av_buffersink_get_frame(), because it copies the data around. |
||||
* |
||||
* @param ctx pointer to a context of the abuffersink AVFilter. |
||||
* @param frame pointer to an allocated frame that will be filled with data. |
||||
* The data must be freed using av_frame_unref() / av_frame_free() |
||||
* frame will contain exactly nb_samples audio samples, except at |
||||
* the end of stream, when it can contain less than nb_samples. |
||||
* |
||||
* @return The return codes have the same meaning as for |
||||
* av_buffersink_get_frame(). |
||||
* |
||||
* @warning do not mix this function with av_buffersink_get_frame(). Use only one or |
||||
* the other with a single sink, not both. |
||||
*/ |
||||
int av_buffersink_get_samples(AVFilterContext *ctx, AVFrame *frame, int nb_samples); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* AVFILTER_BUFFERSINK_H */ |
||||
@ -0,0 +1,209 @@ |
||||
/*
|
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVFILTER_BUFFERSRC_H |
||||
#define AVFILTER_BUFFERSRC_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup lavfi_buffersrc |
||||
* Memory buffer source API. |
||||
*/ |
||||
|
||||
#include "avfilter.h" |
||||
|
||||
/**
|
||||
* @defgroup lavfi_buffersrc Buffer source API |
||||
* @ingroup lavfi |
||||
* @{ |
||||
*/ |
||||
|
||||
enum { |
||||
|
||||
/**
|
||||
* Do not check for format changes. |
||||
*/ |
||||
AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT = 1, |
||||
|
||||
/**
|
||||
* Immediately push the frame to the output. |
||||
*/ |
||||
AV_BUFFERSRC_FLAG_PUSH = 4, |
||||
|
||||
/**
|
||||
* Keep a reference to the frame. |
||||
* If the frame if reference-counted, create a new reference; otherwise |
||||
* copy the frame data. |
||||
*/ |
||||
AV_BUFFERSRC_FLAG_KEEP_REF = 8, |
||||
|
||||
}; |
||||
|
||||
/**
|
||||
* Get the number of failed requests. |
||||
* |
||||
* A failed request is when the request_frame method is called while no |
||||
* frame is present in the buffer. |
||||
* The number is reset when a frame is added. |
||||
*/ |
||||
unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src); |
||||
|
||||
/**
|
||||
* This structure contains the parameters describing the frames that will be |
||||
* passed to this filter. |
||||
* |
||||
* It should be allocated with av_buffersrc_parameters_alloc() and freed with |
||||
* av_free(). All the allocated fields in it remain owned by the caller. |
||||
*/ |
||||
typedef struct AVBufferSrcParameters { |
||||
/**
|
||||
* video: the pixel format, value corresponds to enum AVPixelFormat |
||||
* audio: the sample format, value corresponds to enum AVSampleFormat |
||||
*/ |
||||
int format; |
||||
/**
|
||||
* The timebase to be used for the timestamps on the input frames. |
||||
*/ |
||||
AVRational time_base; |
||||
|
||||
/**
|
||||
* Video only, the display dimensions of the input frames. |
||||
*/ |
||||
int width, height; |
||||
|
||||
/**
|
||||
* Video only, the sample (pixel) aspect ratio. |
||||
*/ |
||||
AVRational sample_aspect_ratio; |
||||
|
||||
/**
|
||||
* Video only, the frame rate of the input video. This field must only be |
||||
* set to a non-zero value if input stream has a known constant framerate |
||||
* and should be left at its initial value if the framerate is variable or |
||||
* unknown. |
||||
*/ |
||||
AVRational frame_rate; |
||||
|
||||
/**
|
||||
* Video with a hwaccel pixel format only. This should be a reference to an |
||||
* AVHWFramesContext instance describing the input frames. |
||||
*/ |
||||
AVBufferRef *hw_frames_ctx; |
||||
|
||||
/**
|
||||
* Audio only, the audio sampling rate in samples per second. |
||||
*/ |
||||
int sample_rate; |
||||
|
||||
/**
|
||||
* Audio only, the audio channel layout |
||||
*/ |
||||
uint64_t channel_layout; |
||||
} AVBufferSrcParameters; |
||||
|
||||
/**
|
||||
* Allocate a new AVBufferSrcParameters instance. It should be freed by the |
||||
* caller with av_free(). |
||||
*/ |
||||
AVBufferSrcParameters *av_buffersrc_parameters_alloc(void); |
||||
|
||||
/**
|
||||
* Initialize the buffersrc or abuffersrc filter with the provided parameters. |
||||
* This function may be called multiple times, the later calls override the |
||||
* previous ones. Some of the parameters may also be set through AVOptions, then |
||||
* whatever method is used last takes precedence. |
||||
* |
||||
* @param ctx an instance of the buffersrc or abuffersrc filter |
||||
* @param param the stream parameters. The frames later passed to this filter |
||||
* must conform to those parameters. All the allocated fields in |
||||
* param remain owned by the caller, libavfilter will make internal |
||||
* copies or references when necessary. |
||||
* @return 0 on success, a negative AVERROR code on failure. |
||||
*/ |
||||
int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *param); |
||||
|
||||
/**
|
||||
* Add a frame to the buffer source. |
||||
* |
||||
* @param ctx an instance of the buffersrc filter |
||||
* @param frame frame to be added. If the frame is reference counted, this |
||||
* function will make a new reference to it. Otherwise the frame data will be |
||||
* copied. |
||||
* |
||||
* @return 0 on success, a negative AVERROR on error |
||||
* |
||||
* This function is equivalent to av_buffersrc_add_frame_flags() with the |
||||
* AV_BUFFERSRC_FLAG_KEEP_REF flag. |
||||
*/ |
||||
av_warn_unused_result |
||||
int av_buffersrc_write_frame(AVFilterContext *ctx, const AVFrame *frame); |
||||
|
||||
/**
|
||||
* Add a frame to the buffer source. |
||||
* |
||||
* @param ctx an instance of the buffersrc filter |
||||
* @param frame frame to be added. If the frame is reference counted, this |
||||
* function will take ownership of the reference(s) and reset the frame. |
||||
* Otherwise the frame data will be copied. If this function returns an error, |
||||
* the input frame is not touched. |
||||
* |
||||
* @return 0 on success, a negative AVERROR on error. |
||||
* |
||||
* @note the difference between this function and av_buffersrc_write_frame() is |
||||
* that av_buffersrc_write_frame() creates a new reference to the input frame, |
||||
* while this function takes ownership of the reference passed to it. |
||||
* |
||||
* This function is equivalent to av_buffersrc_add_frame_flags() without the |
||||
* AV_BUFFERSRC_FLAG_KEEP_REF flag. |
||||
*/ |
||||
av_warn_unused_result |
||||
int av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame); |
||||
|
||||
/**
|
||||
* Add a frame to the buffer source. |
||||
* |
||||
* By default, if the frame is reference-counted, this function will take |
||||
* ownership of the reference(s) and reset the frame. This can be controlled |
||||
* using the flags. |
||||
* |
||||
* If this function returns an error, the input frame is not touched. |
||||
* |
||||
* @param buffer_src pointer to a buffer source context |
||||
* @param frame a frame, or NULL to mark EOF |
||||
* @param flags a combination of AV_BUFFERSRC_FLAG_* |
||||
* @return >= 0 in case of success, a negative AVERROR code |
||||
* in case of failure |
||||
*/ |
||||
av_warn_unused_result |
||||
int av_buffersrc_add_frame_flags(AVFilterContext *buffer_src, |
||||
AVFrame *frame, int flags); |
||||
|
||||
/**
|
||||
* Close the buffer source after EOF. |
||||
* |
||||
* This is similar to passing NULL to av_buffersrc_add_frame_flags() |
||||
* except it takes the timestamp of the EOF, i.e. the timestamp of the end |
||||
* of the last frame. |
||||
*/ |
||||
int av_buffersrc_close(AVFilterContext *ctx, int64_t pts, unsigned flags); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* AVFILTER_BUFFERSRC_H */ |
||||
@ -0,0 +1,75 @@ |
||||
/*
|
||||
* Version macros. |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVFILTER_VERSION_H |
||||
#define AVFILTER_VERSION_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup lavfi |
||||
* Libavfilter version macros |
||||
*/ |
||||
|
||||
#include "libavutil/version.h" |
||||
|
||||
#define LIBAVFILTER_VERSION_MAJOR 7 |
||||
#define LIBAVFILTER_VERSION_MINOR 110 |
||||
#define LIBAVFILTER_VERSION_MICRO 100 |
||||
|
||||
|
||||
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ |
||||
LIBAVFILTER_VERSION_MINOR, \
|
||||
LIBAVFILTER_VERSION_MICRO) |
||||
#define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \ |
||||
LIBAVFILTER_VERSION_MINOR, \
|
||||
LIBAVFILTER_VERSION_MICRO) |
||||
#define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT |
||||
|
||||
#define LIBAVFILTER_IDENT "Lavfi" AV_STRINGIFY(LIBAVFILTER_VERSION) |
||||
|
||||
/**
|
||||
* FF_API_* defines may be placed below to indicate public API that will be |
||||
* dropped at a future version bump. The defines themselves are not part of |
||||
* the public API and may change, break or disappear at any time. |
||||
*/ |
||||
|
||||
#ifndef FF_API_OLD_FILTER_OPTS_ERROR |
||||
#define FF_API_OLD_FILTER_OPTS_ERROR (LIBAVFILTER_VERSION_MAJOR < 8) |
||||
#endif |
||||
#ifndef FF_API_LAVR_OPTS |
||||
#define FF_API_LAVR_OPTS (LIBAVFILTER_VERSION_MAJOR < 8) |
||||
#endif |
||||
#ifndef FF_API_FILTER_GET_SET |
||||
#define FF_API_FILTER_GET_SET (LIBAVFILTER_VERSION_MAJOR < 8) |
||||
#endif |
||||
#ifndef FF_API_SWS_PARAM_OPTION |
||||
#define FF_API_SWS_PARAM_OPTION (LIBAVFILTER_VERSION_MAJOR < 8) |
||||
#endif |
||||
#ifndef FF_API_NEXT |
||||
#define FF_API_NEXT (LIBAVFILTER_VERSION_MAJOR < 8) |
||||
#endif |
||||
#ifndef FF_API_FILTER_LINK_SET_CLOSED |
||||
#define FF_API_FILTER_LINK_SET_CLOSED (LIBAVFILTER_VERSION_MAJOR < 8) |
||||
#endif |
||||
#ifndef FF_API_BUFFERSINK_ALLOC |
||||
#define FF_API_BUFFERSINK_ALLOC (LIBAVFILTER_VERSION_MAJOR < 9) |
||||
#endif |
||||
|
||||
#endif /* AVFILTER_VERSION_H */ |
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,888 @@ |
||||
/*
|
||||
* copyright (c) 2001 Fabrice Bellard |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
#ifndef AVFORMAT_AVIO_H |
||||
#define AVFORMAT_AVIO_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup lavf_io |
||||
* Buffered I/O operations |
||||
*/ |
||||
|
||||
#include <stdint.h> |
||||
|
||||
#include "libavutil/common.h" |
||||
#include "libavutil/dict.h" |
||||
#include "libavutil/log.h" |
||||
|
||||
#include "libavformat/version.h" |
||||
|
||||
/**
|
||||
* Seeking works like for a local file. |
||||
*/ |
||||
#define AVIO_SEEKABLE_NORMAL (1 << 0) |
||||
|
||||
/**
|
||||
* Seeking by timestamp with avio_seek_time() is possible. |
||||
*/ |
||||
#define AVIO_SEEKABLE_TIME (1 << 1) |
||||
|
||||
/**
|
||||
* Callback for checking whether to abort blocking functions. |
||||
* AVERROR_EXIT is returned in this case by the interrupted |
||||
* function. During blocking operations, callback is called with |
||||
* opaque as parameter. If the callback returns 1, the |
||||
* blocking operation will be aborted. |
||||
* |
||||
* No members can be added to this struct without a major bump, if |
||||
* new elements have been added after this struct in AVFormatContext |
||||
* or AVIOContext. |
||||
*/ |
||||
typedef struct AVIOInterruptCB { |
||||
int (*callback)(void*); |
||||
void *opaque; |
||||
} AVIOInterruptCB; |
||||
|
||||
/**
|
||||
* Directory entry types. |
||||
*/ |
||||
enum AVIODirEntryType { |
||||
AVIO_ENTRY_UNKNOWN, |
||||
AVIO_ENTRY_BLOCK_DEVICE, |
||||
AVIO_ENTRY_CHARACTER_DEVICE, |
||||
AVIO_ENTRY_DIRECTORY, |
||||
AVIO_ENTRY_NAMED_PIPE, |
||||
AVIO_ENTRY_SYMBOLIC_LINK, |
||||
AVIO_ENTRY_SOCKET, |
||||
AVIO_ENTRY_FILE, |
||||
AVIO_ENTRY_SERVER, |
||||
AVIO_ENTRY_SHARE, |
||||
AVIO_ENTRY_WORKGROUP, |
||||
}; |
||||
|
||||
/**
|
||||
* Describes single entry of the directory. |
||||
* |
||||
* Only name and type fields are guaranteed be set. |
||||
* Rest of fields are protocol or/and platform dependent and might be unknown. |
||||
*/ |
||||
typedef struct AVIODirEntry { |
||||
char *name; /**< Filename */ |
||||
int type; /**< Type of the entry */ |
||||
int utf8; /**< Set to 1 when name is encoded with UTF-8, 0 otherwise.
|
||||
Name can be encoded with UTF-8 even though 0 is set. */ |
||||
int64_t size; /**< File size in bytes, -1 if unknown. */ |
||||
int64_t modification_timestamp; /**< Time of last modification in microseconds since unix
|
||||
epoch, -1 if unknown. */ |
||||
int64_t access_timestamp; /**< Time of last access in microseconds since unix epoch,
|
||||
-1 if unknown. */ |
||||
int64_t status_change_timestamp; /**< Time of last status change in microseconds since unix
|
||||
epoch, -1 if unknown. */ |
||||
int64_t user_id; /**< User ID of owner, -1 if unknown. */ |
||||
int64_t group_id; /**< Group ID of owner, -1 if unknown. */ |
||||
int64_t filemode; /**< Unix file mode, -1 if unknown. */ |
||||
} AVIODirEntry; |
||||
|
||||
typedef struct AVIODirContext { |
||||
struct URLContext *url_context; |
||||
} AVIODirContext; |
||||
|
||||
/**
|
||||
* Different data types that can be returned via the AVIO |
||||
* write_data_type callback. |
||||
*/ |
||||
enum AVIODataMarkerType { |
||||
/**
|
||||
* Header data; this needs to be present for the stream to be decodeable. |
||||
*/ |
||||
AVIO_DATA_MARKER_HEADER, |
||||
/**
|
||||
* A point in the output bytestream where a decoder can start decoding |
||||
* (i.e. a keyframe). A demuxer/decoder given the data flagged with |
||||
* AVIO_DATA_MARKER_HEADER, followed by any AVIO_DATA_MARKER_SYNC_POINT, |
||||
* should give decodeable results. |
||||
*/ |
||||
AVIO_DATA_MARKER_SYNC_POINT, |
||||
/**
|
||||
* A point in the output bytestream where a demuxer can start parsing |
||||
* (for non self synchronizing bytestream formats). That is, any |
||||
* non-keyframe packet start point. |
||||
*/ |
||||
AVIO_DATA_MARKER_BOUNDARY_POINT, |
||||
/**
|
||||
* This is any, unlabelled data. It can either be a muxer not marking |
||||
* any positions at all, it can be an actual boundary/sync point |
||||
* that the muxer chooses not to mark, or a later part of a packet/fragment |
||||
* that is cut into multiple write callbacks due to limited IO buffer size. |
||||
*/ |
||||
AVIO_DATA_MARKER_UNKNOWN, |
||||
/**
|
||||
* Trailer data, which doesn't contain actual content, but only for |
||||
* finalizing the output file. |
||||
*/ |
||||
AVIO_DATA_MARKER_TRAILER, |
||||
/**
|
||||
* A point in the output bytestream where the underlying AVIOContext might |
||||
* flush the buffer depending on latency or buffering requirements. Typically |
||||
* means the end of a packet. |
||||
*/ |
||||
AVIO_DATA_MARKER_FLUSH_POINT, |
||||
}; |
||||
|
||||
/**
|
||||
* Bytestream IO Context. |
||||
* New fields can be added to the end with minor version bumps. |
||||
* Removal, reordering and changes to existing fields require a major |
||||
* version bump. |
||||
* sizeof(AVIOContext) must not be used outside libav*. |
||||
* |
||||
* @note None of the function pointers in AVIOContext should be called |
||||
* directly, they should only be set by the client application |
||||
* when implementing custom I/O. Normally these are set to the |
||||
* function pointers specified in avio_alloc_context() |
||||
*/ |
||||
typedef struct AVIOContext { |
||||
/**
|
||||
* A class for private options. |
||||
* |
||||
* If this AVIOContext is created by avio_open2(), av_class is set and |
||||
* passes the options down to protocols. |
||||
* |
||||
* If this AVIOContext is manually allocated, then av_class may be set by |
||||
* the caller. |
||||
* |
||||
* warning -- this field can be NULL, be sure to not pass this AVIOContext |
||||
* to any av_opt_* functions in that case. |
||||
*/ |
||||
const AVClass *av_class; |
||||
|
||||
/*
|
||||
* The following shows the relationship between buffer, buf_ptr, |
||||
* buf_ptr_max, buf_end, buf_size, and pos, when reading and when writing |
||||
* (since AVIOContext is used for both): |
||||
* |
||||
********************************************************************************** |
||||
* READING |
||||
********************************************************************************** |
||||
* |
||||
* | buffer_size | |
||||
* |---------------------------------------| |
||||
* | | |
||||
* |
||||
* buffer buf_ptr buf_end |
||||
* +---------------+-----------------------+ |
||||
* |/ / / / / / / /|/ / / / / / /| | |
||||
* read buffer: |/ / consumed / | to be read /| | |
||||
* |/ / / / / / / /|/ / / / / / /| | |
||||
* +---------------+-----------------------+ |
||||
* |
||||
* pos |
||||
* +-------------------------------------------+-----------------+ |
||||
* input file: | | | |
||||
* +-------------------------------------------+-----------------+ |
||||
* |
||||
* |
||||
********************************************************************************** |
||||
* WRITING |
||||
********************************************************************************** |
||||
* |
||||
* | buffer_size | |
||||
* |--------------------------------------| |
||||
* | | |
||||
* |
||||
* buf_ptr_max |
||||
* buffer (buf_ptr) buf_end |
||||
* +-----------------------+--------------+ |
||||
* |/ / / / / / / / / / / /| | |
||||
* write buffer: | / / to be flushed / / | | |
||||
* |/ / / / / / / / / / / /| | |
||||
* +-----------------------+--------------+ |
||||
* buf_ptr can be in this |
||||
* due to a backward seek |
||||
* |
||||
* pos |
||||
* +-------------+----------------------------------------------+ |
||||
* output file: | | | |
||||
* +-------------+----------------------------------------------+ |
||||
* |
||||
*/ |
||||
unsigned char *buffer; /**< Start of the buffer. */ |
||||
int buffer_size; /**< Maximum buffer size */ |
||||
unsigned char *buf_ptr; /**< Current position in the buffer */ |
||||
unsigned char *buf_end; /**< End of the data, may be less than
|
||||
buffer+buffer_size if the read function returned |
||||
less data than requested, e.g. for streams where |
||||
no more data has been received yet. */ |
||||
void *opaque; /**< A private pointer, passed to the read/write/seek/...
|
||||
functions. */ |
||||
int (*read_packet)(void *opaque, uint8_t *buf, int buf_size); |
||||
int (*write_packet)(void *opaque, uint8_t *buf, int buf_size); |
||||
int64_t (*seek)(void *opaque, int64_t offset, int whence); |
||||
int64_t pos; /**< position in the file of the current buffer */ |
||||
int eof_reached; /**< true if was unable to read due to error or eof */ |
||||
int write_flag; /**< true if open for writing */ |
||||
int max_packet_size; |
||||
unsigned long checksum; |
||||
unsigned char *checksum_ptr; |
||||
unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size); |
||||
int error; /**< contains the error code or 0 if no error happened */ |
||||
/**
|
||||
* Pause or resume playback for network streaming protocols - e.g. MMS. |
||||
*/ |
||||
int (*read_pause)(void *opaque, int pause); |
||||
/**
|
||||
* Seek to a given timestamp in stream with the specified stream_index. |
||||
* Needed for some network streaming protocols which don't support seeking |
||||
* to byte position. |
||||
*/ |
||||
int64_t (*read_seek)(void *opaque, int stream_index, |
||||
int64_t timestamp, int flags); |
||||
/**
|
||||
* A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. |
||||
*/ |
||||
int seekable; |
||||
|
||||
/**
|
||||
* max filesize, used to limit allocations |
||||
* This field is internal to libavformat and access from outside is not allowed. |
||||
*/ |
||||
int64_t maxsize; |
||||
|
||||
/**
|
||||
* avio_read and avio_write should if possible be satisfied directly |
||||
* instead of going through a buffer, and avio_seek will always |
||||
* call the underlying seek function directly. |
||||
*/ |
||||
int direct; |
||||
|
||||
/**
|
||||
* Bytes read statistic |
||||
* This field is internal to libavformat and access from outside is not allowed. |
||||
*/ |
||||
int64_t bytes_read; |
||||
|
||||
/**
|
||||
* seek statistic |
||||
* This field is internal to libavformat and access from outside is not allowed. |
||||
*/ |
||||
int seek_count; |
||||
|
||||
/**
|
||||
* writeout statistic |
||||
* This field is internal to libavformat and access from outside is not allowed. |
||||
*/ |
||||
int writeout_count; |
||||
|
||||
/**
|
||||
* Original buffer size |
||||
* used internally after probing and ensure seekback to reset the buffer size |
||||
* This field is internal to libavformat and access from outside is not allowed. |
||||
*/ |
||||
int orig_buffer_size; |
||||
|
||||
/**
|
||||
* Threshold to favor readahead over seek. |
||||
* This is current internal only, do not use from outside. |
||||
*/ |
||||
int short_seek_threshold; |
||||
|
||||
/**
|
||||
* ',' separated list of allowed protocols. |
||||
*/ |
||||
const char *protocol_whitelist; |
||||
|
||||
/**
|
||||
* ',' separated list of disallowed protocols. |
||||
*/ |
||||
const char *protocol_blacklist; |
||||
|
||||
/**
|
||||
* A callback that is used instead of write_packet. |
||||
*/ |
||||
int (*write_data_type)(void *opaque, uint8_t *buf, int buf_size, |
||||
enum AVIODataMarkerType type, int64_t time); |
||||
/**
|
||||
* If set, don't call write_data_type separately for AVIO_DATA_MARKER_BOUNDARY_POINT, |
||||
* but ignore them and treat them as AVIO_DATA_MARKER_UNKNOWN (to avoid needlessly |
||||
* small chunks of data returned from the callback). |
||||
*/ |
||||
int ignore_boundary_point; |
||||
|
||||
/**
|
||||
* Internal, not meant to be used from outside of AVIOContext. |
||||
*/ |
||||
enum AVIODataMarkerType current_type; |
||||
int64_t last_time; |
||||
|
||||
/**
|
||||
* A callback that is used instead of short_seek_threshold. |
||||
* This is current internal only, do not use from outside. |
||||
*/ |
||||
int (*short_seek_get)(void *opaque); |
||||
|
||||
int64_t written; |
||||
|
||||
/**
|
||||
* Maximum reached position before a backward seek in the write buffer, |
||||
* used keeping track of already written data for a later flush. |
||||
*/ |
||||
unsigned char *buf_ptr_max; |
||||
|
||||
/**
|
||||
* Try to buffer at least this amount of data before flushing it |
||||
*/ |
||||
int min_packet_size; |
||||
} AVIOContext; |
||||
|
||||
/**
|
||||
* Return the name of the protocol that will handle the passed URL. |
||||
* |
||||
* NULL is returned if no protocol could be found for the given URL. |
||||
* |
||||
* @return Name of the protocol or NULL. |
||||
*/ |
||||
const char *avio_find_protocol_name(const char *url); |
||||
|
||||
/**
|
||||
* Return AVIO_FLAG_* access flags corresponding to the access permissions |
||||
* of the resource in url, or a negative value corresponding to an |
||||
* AVERROR code in case of failure. The returned access flags are |
||||
* masked by the value in flags. |
||||
* |
||||
* @note This function is intrinsically unsafe, in the sense that the |
||||
* checked resource may change its existence or permission status from |
||||
* one call to another. Thus you should not trust the returned value, |
||||
* unless you are sure that no other processes are accessing the |
||||
* checked resource. |
||||
*/ |
||||
int avio_check(const char *url, int flags); |
||||
|
||||
/**
|
||||
* Move or rename a resource. |
||||
* |
||||
* @note url_src and url_dst should share the same protocol and authority. |
||||
* |
||||
* @param url_src url to resource to be moved |
||||
* @param url_dst new url to resource if the operation succeeded |
||||
* @return >=0 on success or negative on error. |
||||
*/ |
||||
int avpriv_io_move(const char *url_src, const char *url_dst); |
||||
|
||||
/**
|
||||
* Delete a resource. |
||||
* |
||||
* @param url resource to be deleted. |
||||
* @return >=0 on success or negative on error. |
||||
*/ |
||||
int avpriv_io_delete(const char *url); |
||||
|
||||
/**
|
||||
* Open directory for reading. |
||||
* |
||||
* @param s directory read context. Pointer to a NULL pointer must be passed. |
||||
* @param url directory to be listed. |
||||
* @param options A dictionary filled with protocol-private options. On return |
||||
* this parameter will be destroyed and replaced with a dictionary |
||||
* containing options that were not found. May be NULL. |
||||
* @return >=0 on success or negative on error. |
||||
*/ |
||||
int avio_open_dir(AVIODirContext **s, const char *url, AVDictionary **options); |
||||
|
||||
/**
|
||||
* Get next directory entry. |
||||
* |
||||
* Returned entry must be freed with avio_free_directory_entry(). In particular |
||||
* it may outlive AVIODirContext. |
||||
* |
||||
* @param s directory read context. |
||||
* @param[out] next next entry or NULL when no more entries. |
||||
* @return >=0 on success or negative on error. End of list is not considered an |
||||
* error. |
||||
*/ |
||||
int avio_read_dir(AVIODirContext *s, AVIODirEntry **next); |
||||
|
||||
/**
|
||||
* Close directory. |
||||
* |
||||
* @note Entries created using avio_read_dir() are not deleted and must be |
||||
* freeded with avio_free_directory_entry(). |
||||
* |
||||
* @param s directory read context. |
||||
* @return >=0 on success or negative on error. |
||||
*/ |
||||
int avio_close_dir(AVIODirContext **s); |
||||
|
||||
/**
|
||||
* Free entry allocated by avio_read_dir(). |
||||
* |
||||
* @param entry entry to be freed. |
||||
*/ |
||||
void avio_free_directory_entry(AVIODirEntry **entry); |
||||
|
||||
/**
|
||||
* Allocate and initialize an AVIOContext for buffered I/O. It must be later |
||||
* freed with avio_context_free(). |
||||
* |
||||
* @param buffer Memory block for input/output operations via AVIOContext. |
||||
* The buffer must be allocated with av_malloc() and friends. |
||||
* It may be freed and replaced with a new buffer by libavformat. |
||||
* AVIOContext.buffer holds the buffer currently in use, |
||||
* which must be later freed with av_free(). |
||||
* @param buffer_size The buffer size is very important for performance. |
||||
* For protocols with fixed blocksize it should be set to this blocksize. |
||||
* For others a typical size is a cache page, e.g. 4kb. |
||||
* @param write_flag Set to 1 if the buffer should be writable, 0 otherwise. |
||||
* @param opaque An opaque pointer to user-specific data. |
||||
* @param read_packet A function for refilling the buffer, may be NULL. |
||||
* For stream protocols, must never return 0 but rather |
||||
* a proper AVERROR code. |
||||
* @param write_packet A function for writing the buffer contents, may be NULL. |
||||
* The function may not change the input buffers content. |
||||
* @param seek A function for seeking to specified byte position, may be NULL. |
||||
* |
||||
* @return Allocated AVIOContext or NULL on failure. |
||||
*/ |
||||
AVIOContext *avio_alloc_context( |
||||
unsigned char *buffer, |
||||
int buffer_size, |
||||
int write_flag, |
||||
void *opaque, |
||||
int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), |
||||
int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), |
||||
int64_t (*seek)(void *opaque, int64_t offset, int whence)); |
||||
|
||||
/**
|
||||
* Free the supplied IO context and everything associated with it. |
||||
* |
||||
* @param s Double pointer to the IO context. This function will write NULL |
||||
* into s. |
||||
*/ |
||||
void avio_context_free(AVIOContext **s); |
||||
|
||||
void avio_w8(AVIOContext *s, int b); |
||||
void avio_write(AVIOContext *s, const unsigned char *buf, int size); |
||||
void avio_wl64(AVIOContext *s, uint64_t val); |
||||
void avio_wb64(AVIOContext *s, uint64_t val); |
||||
void avio_wl32(AVIOContext *s, unsigned int val); |
||||
void avio_wb32(AVIOContext *s, unsigned int val); |
||||
void avio_wl24(AVIOContext *s, unsigned int val); |
||||
void avio_wb24(AVIOContext *s, unsigned int val); |
||||
void avio_wl16(AVIOContext *s, unsigned int val); |
||||
void avio_wb16(AVIOContext *s, unsigned int val); |
||||
|
||||
/**
|
||||
* Write a NULL-terminated string. |
||||
* @return number of bytes written. |
||||
*/ |
||||
int avio_put_str(AVIOContext *s, const char *str); |
||||
|
||||
/**
|
||||
* Convert an UTF-8 string to UTF-16LE and write it. |
||||
* @param s the AVIOContext |
||||
* @param str NULL-terminated UTF-8 string |
||||
* |
||||
* @return number of bytes written. |
||||
*/ |
||||
int avio_put_str16le(AVIOContext *s, const char *str); |
||||
|
||||
/**
|
||||
* Convert an UTF-8 string to UTF-16BE and write it. |
||||
* @param s the AVIOContext |
||||
* @param str NULL-terminated UTF-8 string |
||||
* |
||||
* @return number of bytes written. |
||||
*/ |
||||
int avio_put_str16be(AVIOContext *s, const char *str); |
||||
|
||||
/**
|
||||
* Mark the written bytestream as a specific type. |
||||
* |
||||
* Zero-length ranges are omitted from the output. |
||||
* |
||||
* @param time the stream time the current bytestream pos corresponds to |
||||
* (in AV_TIME_BASE units), or AV_NOPTS_VALUE if unknown or not |
||||
* applicable |
||||
* @param type the kind of data written starting at the current pos |
||||
*/ |
||||
void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type); |
||||
|
||||
/**
|
||||
* ORing this as the "whence" parameter to a seek function causes it to |
||||
* return the filesize without seeking anywhere. Supporting this is optional. |
||||
* If it is not supported then the seek function will return <0. |
||||
*/ |
||||
#define AVSEEK_SIZE 0x10000 |
||||
|
||||
/**
|
||||
* Passing this flag as the "whence" parameter to a seek function causes it to |
||||
* seek by any means (like reopening and linear reading) or other normally unreasonable |
||||
* means that can be extremely slow. |
||||
* This may be ignored by the seek code. |
||||
*/ |
||||
#define AVSEEK_FORCE 0x20000 |
||||
|
||||
/**
|
||||
* fseek() equivalent for AVIOContext. |
||||
* @return new position or AVERROR. |
||||
*/ |
||||
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence); |
||||
|
||||
/**
|
||||
* Skip given number of bytes forward |
||||
* @return new position or AVERROR. |
||||
*/ |
||||
int64_t avio_skip(AVIOContext *s, int64_t offset); |
||||
|
||||
/**
|
||||
* ftell() equivalent for AVIOContext. |
||||
* @return position or AVERROR. |
||||
*/ |
||||
static av_always_inline int64_t avio_tell(AVIOContext *s) |
||||
{ |
||||
return avio_seek(s, 0, SEEK_CUR); |
||||
} |
||||
|
||||
/**
|
||||
* Get the filesize. |
||||
* @return filesize or AVERROR |
||||
*/ |
||||
int64_t avio_size(AVIOContext *s); |
||||
|
||||
/**
|
||||
* Similar to feof() but also returns nonzero on read errors. |
||||
* @return non zero if and only if at end of file or a read error happened when reading. |
||||
*/ |
||||
int avio_feof(AVIOContext *s); |
||||
|
||||
/**
|
||||
* Writes a formatted string to the context. |
||||
* @return number of bytes written, < 0 on error. |
||||
*/ |
||||
int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3); |
||||
|
||||
/**
|
||||
* Write a NULL terminated array of strings to the context. |
||||
* Usually you don't need to use this function directly but its macro wrapper, |
||||
* avio_print. |
||||
*/ |
||||
void avio_print_string_array(AVIOContext *s, const char *strings[]); |
||||
|
||||
/**
|
||||
* Write strings (const char *) to the context. |
||||
* This is a convenience macro around avio_print_string_array and it |
||||
* automatically creates the string array from the variable argument list. |
||||
* For simple string concatenations this function is more performant than using |
||||
* avio_printf since it does not need a temporary buffer. |
||||
*/ |
||||
#define avio_print(s, ...) \ |
||||
avio_print_string_array(s, (const char*[]){__VA_ARGS__, NULL}) |
||||
|
||||
/**
|
||||
* Force flushing of buffered data. |
||||
* |
||||
* For write streams, force the buffered data to be immediately written to the output, |
||||
* without to wait to fill the internal buffer. |
||||
* |
||||
* For read streams, discard all currently buffered data, and advance the |
||||
* reported file position to that of the underlying stream. This does not |
||||
* read new data, and does not perform any seeks. |
||||
*/ |
||||
void avio_flush(AVIOContext *s); |
||||
|
||||
/**
|
||||
* Read size bytes from AVIOContext into buf. |
||||
* @return number of bytes read or AVERROR |
||||
*/ |
||||
int avio_read(AVIOContext *s, unsigned char *buf, int size); |
||||
|
||||
/**
|
||||
* Read size bytes from AVIOContext into buf. Unlike avio_read(), this is allowed |
||||
* to read fewer bytes than requested. The missing bytes can be read in the next |
||||
* call. This always tries to read at least 1 byte. |
||||
* Useful to reduce latency in certain cases. |
||||
* @return number of bytes read or AVERROR |
||||
*/ |
||||
int avio_read_partial(AVIOContext *s, unsigned char *buf, int size); |
||||
|
||||
/**
|
||||
* @name Functions for reading from AVIOContext |
||||
* @{ |
||||
* |
||||
* @note return 0 if EOF, so you cannot use it if EOF handling is |
||||
* necessary |
||||
*/ |
||||
int avio_r8 (AVIOContext *s); |
||||
unsigned int avio_rl16(AVIOContext *s); |
||||
unsigned int avio_rl24(AVIOContext *s); |
||||
unsigned int avio_rl32(AVIOContext *s); |
||||
uint64_t avio_rl64(AVIOContext *s); |
||||
unsigned int avio_rb16(AVIOContext *s); |
||||
unsigned int avio_rb24(AVIOContext *s); |
||||
unsigned int avio_rb32(AVIOContext *s); |
||||
uint64_t avio_rb64(AVIOContext *s); |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* Read a string from pb into buf. The reading will terminate when either |
||||
* a NULL character was encountered, maxlen bytes have been read, or nothing |
||||
* more can be read from pb. The result is guaranteed to be NULL-terminated, it |
||||
* will be truncated if buf is too small. |
||||
* Note that the string is not interpreted or validated in any way, it |
||||
* might get truncated in the middle of a sequence for multi-byte encodings. |
||||
* |
||||
* @return number of bytes read (is always <= maxlen). |
||||
* If reading ends on EOF or error, the return value will be one more than |
||||
* bytes actually read. |
||||
*/ |
||||
int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen); |
||||
|
||||
/**
|
||||
* Read a UTF-16 string from pb and convert it to UTF-8. |
||||
* The reading will terminate when either a null or invalid character was |
||||
* encountered or maxlen bytes have been read. |
||||
* @return number of bytes read (is always <= maxlen) |
||||
*/ |
||||
int avio_get_str16le(AVIOContext *pb, int maxlen, char *buf, int buflen); |
||||
int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen); |
||||
|
||||
|
||||
/**
|
||||
* @name URL open modes |
||||
* The flags argument to avio_open must be one of the following |
||||
* constants, optionally ORed with other flags. |
||||
* @{ |
||||
*/ |
||||
#define AVIO_FLAG_READ 1 /**< read-only */ |
||||
#define AVIO_FLAG_WRITE 2 /**< write-only */ |
||||
#define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) /**< read-write pseudo flag */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* Use non-blocking mode. |
||||
* If this flag is set, operations on the context will return |
||||
* AVERROR(EAGAIN) if they can not be performed immediately. |
||||
* If this flag is not set, operations on the context will never return |
||||
* AVERROR(EAGAIN). |
||||
* Note that this flag does not affect the opening/connecting of the |
||||
* context. Connecting a protocol will always block if necessary (e.g. on |
||||
* network protocols) but never hang (e.g. on busy devices). |
||||
* Warning: non-blocking protocols is work-in-progress; this flag may be |
||||
* silently ignored. |
||||
*/ |
||||
#define AVIO_FLAG_NONBLOCK 8 |
||||
|
||||
/**
|
||||
* Use direct mode. |
||||
* avio_read and avio_write should if possible be satisfied directly |
||||
* instead of going through a buffer, and avio_seek will always |
||||
* call the underlying seek function directly. |
||||
*/ |
||||
#define AVIO_FLAG_DIRECT 0x8000 |
||||
|
||||
/**
|
||||
* Create and initialize a AVIOContext for accessing the |
||||
* resource indicated by url. |
||||
* @note When the resource indicated by url has been opened in |
||||
* read+write mode, the AVIOContext can be used only for writing. |
||||
* |
||||
* @param s Used to return the pointer to the created AVIOContext. |
||||
* In case of failure the pointed to value is set to NULL. |
||||
* @param url resource to access |
||||
* @param flags flags which control how the resource indicated by url |
||||
* is to be opened |
||||
* @return >= 0 in case of success, a negative value corresponding to an |
||||
* AVERROR code in case of failure |
||||
*/ |
||||
int avio_open(AVIOContext **s, const char *url, int flags); |
||||
|
||||
/**
|
||||
* Create and initialize a AVIOContext for accessing the |
||||
* resource indicated by url. |
||||
* @note When the resource indicated by url has been opened in |
||||
* read+write mode, the AVIOContext can be used only for writing. |
||||
* |
||||
* @param s Used to return the pointer to the created AVIOContext. |
||||
* In case of failure the pointed to value is set to NULL. |
||||
* @param url resource to access |
||||
* @param flags flags which control how the resource indicated by url |
||||
* is to be opened |
||||
* @param int_cb an interrupt callback to be used at the protocols level |
||||
* @param options A dictionary filled with protocol-private options. On return |
||||
* this parameter will be destroyed and replaced with a dict containing options |
||||
* that were not found. May be NULL. |
||||
* @return >= 0 in case of success, a negative value corresponding to an |
||||
* AVERROR code in case of failure |
||||
*/ |
||||
int avio_open2(AVIOContext **s, const char *url, int flags, |
||||
const AVIOInterruptCB *int_cb, AVDictionary **options); |
||||
|
||||
/**
|
||||
* Close the resource accessed by the AVIOContext s and free it. |
||||
* This function can only be used if s was opened by avio_open(). |
||||
* |
||||
* The internal buffer is automatically flushed before closing the |
||||
* resource. |
||||
* |
||||
* @return 0 on success, an AVERROR < 0 on error. |
||||
* @see avio_closep |
||||
*/ |
||||
int avio_close(AVIOContext *s); |
||||
|
||||
/**
|
||||
* Close the resource accessed by the AVIOContext *s, free it |
||||
* and set the pointer pointing to it to NULL. |
||||
* This function can only be used if s was opened by avio_open(). |
||||
* |
||||
* The internal buffer is automatically flushed before closing the |
||||
* resource. |
||||
* |
||||
* @return 0 on success, an AVERROR < 0 on error. |
||||
* @see avio_close |
||||
*/ |
||||
int avio_closep(AVIOContext **s); |
||||
|
||||
|
||||
/**
|
||||
* Open a write only memory stream. |
||||
* |
||||
* @param s new IO context |
||||
* @return zero if no error. |
||||
*/ |
||||
int avio_open_dyn_buf(AVIOContext **s); |
||||
|
||||
/**
|
||||
* Return the written size and a pointer to the buffer. |
||||
* The AVIOContext stream is left intact. |
||||
* The buffer must NOT be freed. |
||||
* No padding is added to the buffer. |
||||
* |
||||
* @param s IO context |
||||
* @param pbuffer pointer to a byte buffer |
||||
* @return the length of the byte buffer |
||||
*/ |
||||
int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer); |
||||
|
||||
/**
|
||||
* Return the written size and a pointer to the buffer. The buffer |
||||
* must be freed with av_free(). |
||||
* Padding of AV_INPUT_BUFFER_PADDING_SIZE is added to the buffer. |
||||
* |
||||
* @param s IO context |
||||
* @param pbuffer pointer to a byte buffer |
||||
* @return the length of the byte buffer |
||||
*/ |
||||
int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer); |
||||
|
||||
/**
|
||||
* Iterate through names of available protocols. |
||||
* |
||||
* @param opaque A private pointer representing current protocol. |
||||
* It must be a pointer to NULL on first iteration and will |
||||
* be updated by successive calls to avio_enum_protocols. |
||||
* @param output If set to 1, iterate over output protocols, |
||||
* otherwise over input protocols. |
||||
* |
||||
* @return A static string containing the name of current protocol or NULL |
||||
*/ |
||||
const char *avio_enum_protocols(void **opaque, int output); |
||||
|
||||
/**
|
||||
* Get AVClass by names of available protocols. |
||||
* |
||||
* @return A AVClass of input protocol name or NULL |
||||
*/ |
||||
const AVClass *avio_protocol_get_class(const char *name); |
||||
|
||||
/**
|
||||
* Pause and resume playing - only meaningful if using a network streaming |
||||
* protocol (e.g. MMS). |
||||
* |
||||
* @param h IO context from which to call the read_pause function pointer |
||||
* @param pause 1 for pause, 0 for resume |
||||
*/ |
||||
int avio_pause(AVIOContext *h, int pause); |
||||
|
||||
/**
|
||||
* Seek to a given timestamp relative to some component stream. |
||||
* Only meaningful if using a network streaming protocol (e.g. MMS.). |
||||
* |
||||
* @param h IO context from which to call the seek function pointers |
||||
* @param stream_index The stream index that the timestamp is relative to. |
||||
* If stream_index is (-1) the timestamp should be in AV_TIME_BASE |
||||
* units from the beginning of the presentation. |
||||
* If a stream_index >= 0 is used and the protocol does not support |
||||
* seeking based on component streams, the call will fail. |
||||
* @param timestamp timestamp in AVStream.time_base units |
||||
* or if there is no stream specified then in AV_TIME_BASE units. |
||||
* @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE |
||||
* and AVSEEK_FLAG_ANY. The protocol may silently ignore |
||||
* AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will |
||||
* fail if used and not supported. |
||||
* @return >= 0 on success |
||||
* @see AVInputFormat::read_seek |
||||
*/ |
||||
int64_t avio_seek_time(AVIOContext *h, int stream_index, |
||||
int64_t timestamp, int flags); |
||||
|
||||
/* Avoid a warning. The header can not be included because it breaks c++. */ |
||||
struct AVBPrint; |
||||
|
||||
/**
|
||||
* Read contents of h into print buffer, up to max_size bytes, or up to EOF. |
||||
* |
||||
* @return 0 for success (max_size bytes read or EOF reached), negative error |
||||
* code otherwise |
||||
*/ |
||||
int avio_read_to_bprint(AVIOContext *h, struct AVBPrint *pb, size_t max_size); |
||||
|
||||
/**
|
||||
* Accept and allocate a client context on a server context. |
||||
* @param s the server context |
||||
* @param c the client context, must be unallocated |
||||
* @return >= 0 on success or a negative value corresponding |
||||
* to an AVERROR on failure |
||||
*/ |
||||
int avio_accept(AVIOContext *s, AVIOContext **c); |
||||
|
||||
/**
|
||||
* Perform one step of the protocol handshake to accept a new client. |
||||
* This function must be called on a client returned by avio_accept() before |
||||
* using it as a read/write context. |
||||
* It is separate from avio_accept() because it may block. |
||||
* A step of the handshake is defined by places where the application may |
||||
* decide to change the proceedings. |
||||
* For example, on a protocol with a request header and a reply header, each |
||||
* one can constitute a step because the application may use the parameters |
||||
* from the request to change parameters in the reply; or each individual |
||||
* chunk of the request can constitute a step. |
||||
* If the handshake is already finished, avio_handshake() does nothing and |
||||
* returns 0 immediately. |
||||
* |
||||
* @param c the client context to perform the handshake on |
||||
* @return 0 on a complete and successful handshake |
||||
* > 0 if the handshake progressed, but is not complete |
||||
* < 0 for an AVERROR code |
||||
*/ |
||||
int avio_handshake(AVIOContext *c); |
||||
#endif /* AVFORMAT_AVIO_H */ |
||||
@ -0,0 +1,123 @@ |
||||
/*
|
||||
* Version macros. |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVFORMAT_VERSION_H |
||||
#define AVFORMAT_VERSION_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup libavf |
||||
* Libavformat version macros |
||||
*/ |
||||
|
||||
#include "libavutil/version.h" |
||||
|
||||
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
|
||||
// Also please add any ticket numbers that you believe might be affected here
|
||||
#define LIBAVFORMAT_VERSION_MAJOR 58 |
||||
#define LIBAVFORMAT_VERSION_MINOR 76 |
||||
#define LIBAVFORMAT_VERSION_MICRO 100 |
||||
|
||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ |
||||
LIBAVFORMAT_VERSION_MINOR, \
|
||||
LIBAVFORMAT_VERSION_MICRO) |
||||
#define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_MAJOR, \ |
||||
LIBAVFORMAT_VERSION_MINOR, \
|
||||
LIBAVFORMAT_VERSION_MICRO) |
||||
#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT |
||||
|
||||
#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) |
||||
|
||||
/**
|
||||
* FF_API_* defines may be placed below to indicate public API that will be |
||||
* dropped at a future version bump. The defines themselves are not part of |
||||
* the public API and may change, break or disappear at any time. |
||||
* |
||||
* @note, when bumping the major version it is recommended to manually |
||||
* disable each FF_API_* in its own commit instead of disabling them all |
||||
* at once through the bump. This improves the git bisect-ability of the change. |
||||
* |
||||
*/ |
||||
#ifndef FF_API_COMPUTE_PKT_FIELDS2 |
||||
#define FF_API_COMPUTE_PKT_FIELDS2 (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_OLD_OPEN_CALLBACKS |
||||
#define FF_API_OLD_OPEN_CALLBACKS (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_LAVF_AVCTX |
||||
#define FF_API_LAVF_AVCTX (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_HTTP_USER_AGENT |
||||
#define FF_API_HTTP_USER_AGENT (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_HLS_WRAP |
||||
#define FF_API_HLS_WRAP (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_HLS_USE_LOCALTIME |
||||
#define FF_API_HLS_USE_LOCALTIME (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_LAVF_KEEPSIDE_FLAG |
||||
#define FF_API_LAVF_KEEPSIDE_FLAG (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_OLD_ROTATE_API |
||||
#define FF_API_OLD_ROTATE_API (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_FORMAT_GET_SET |
||||
#define FF_API_FORMAT_GET_SET (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_OLD_AVIO_EOF_0 |
||||
#define FF_API_OLD_AVIO_EOF_0 (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_LAVF_FFSERVER |
||||
#define FF_API_LAVF_FFSERVER (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_FORMAT_FILENAME |
||||
#define FF_API_FORMAT_FILENAME (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_OLD_RTSP_OPTIONS |
||||
#define FF_API_OLD_RTSP_OPTIONS (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_NEXT |
||||
#define FF_API_NEXT (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_DASH_MIN_SEG_DURATION |
||||
#define FF_API_DASH_MIN_SEG_DURATION (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_LAVF_MP4A_LATM |
||||
#define FF_API_LAVF_MP4A_LATM (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_AVIOFORMAT |
||||
#define FF_API_AVIOFORMAT (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_DEMUXER_OPEN |
||||
#define FF_API_DEMUXER_OPEN (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_CHAPTER_ID_INT |
||||
#define FF_API_CHAPTER_ID_INT (LIBAVFORMAT_VERSION_MAJOR < 59) |
||||
#endif |
||||
#ifndef FF_API_LAVF_PRIV_OPT |
||||
#define FF_API_LAVF_PRIV_OPT (LIBAVFORMAT_VERSION_MAJOR < 60) |
||||
#endif |
||||
|
||||
|
||||
#ifndef FF_API_R_FRAME_RATE |
||||
#define FF_API_R_FRAME_RATE 1 |
||||
#endif |
||||
#endif /* AVFORMAT_VERSION_H */ |
||||
@ -0,0 +1,72 @@ |
||||
/*
|
||||
* copyright (c) 2006 Mans Rullgard |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup lavu_adler32 |
||||
* Public header for Adler-32 hash function implementation. |
||||
*/ |
||||
|
||||
#ifndef AVUTIL_ADLER32_H |
||||
#define AVUTIL_ADLER32_H |
||||
|
||||
#include <stddef.h> |
||||
#include <stdint.h> |
||||
#include "attributes.h" |
||||
#include "version.h" |
||||
|
||||
/**
|
||||
* @defgroup lavu_adler32 Adler-32 |
||||
* @ingroup lavu_hash |
||||
* Adler-32 hash function implementation. |
||||
* |
||||
* @{ |
||||
*/ |
||||
|
||||
#if FF_API_CRYPTO_SIZE_T |
||||
typedef unsigned long AVAdler; |
||||
#else |
||||
typedef uint32_t AVAdler; |
||||
#endif |
||||
|
||||
/**
|
||||
* Calculate the Adler32 checksum of a buffer. |
||||
* |
||||
* Passing the return value to a subsequent av_adler32_update() call |
||||
* allows the checksum of multiple buffers to be calculated as though |
||||
* they were concatenated. |
||||
* |
||||
* @param adler initial checksum value |
||||
* @param buf pointer to input buffer |
||||
* @param len size of input buffer |
||||
* @return updated checksum |
||||
*/ |
||||
AVAdler av_adler32_update(AVAdler adler, const uint8_t *buf, |
||||
#if FF_API_CRYPTO_SIZE_T |
||||
unsigned int len) av_pure; |
||||
#else |
||||
size_t len) av_pure; |
||||
#endif |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* AVUTIL_ADLER32_H */ |
||||
@ -0,0 +1,65 @@ |
||||
/*
|
||||
* copyright (c) 2007 Michael Niedermayer <michaelni@gmx.at> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVUTIL_AES_H |
||||
#define AVUTIL_AES_H |
||||
|
||||
#include <stdint.h> |
||||
|
||||
#include "attributes.h" |
||||
#include "version.h" |
||||
|
||||
/**
|
||||
* @defgroup lavu_aes AES |
||||
* @ingroup lavu_crypto |
||||
* @{ |
||||
*/ |
||||
|
||||
extern const int av_aes_size; |
||||
|
||||
struct AVAES; |
||||
|
||||
/**
|
||||
* Allocate an AVAES context. |
||||
*/ |
||||
struct AVAES *av_aes_alloc(void); |
||||
|
||||
/**
|
||||
* Initialize an AVAES context. |
||||
* @param key_bits 128, 192 or 256 |
||||
* @param decrypt 0 for encryption, 1 for decryption |
||||
*/ |
||||
int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt); |
||||
|
||||
/**
|
||||
* Encrypt or decrypt a buffer using a previously initialized context. |
||||
* @param count number of 16 byte blocks |
||||
* @param dst destination array, can be equal to src |
||||
* @param src source array, can be equal to dst |
||||
* @param iv initialization vector for CBC mode, if NULL then ECB will be used |
||||
* @param decrypt 0 for encryption, 1 for decryption |
||||
*/ |
||||
void av_aes_crypt(struct AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* AVUTIL_AES_H */ |
||||
@ -0,0 +1,88 @@ |
||||
/*
|
||||
* AES-CTR cipher |
||||
* Copyright (c) 2015 Eran Kornblau <erankor at gmail dot com> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVUTIL_AES_CTR_H |
||||
#define AVUTIL_AES_CTR_H |
||||
|
||||
#include <stdint.h> |
||||
|
||||
#include "attributes.h" |
||||
#include "version.h" |
||||
|
||||
#define AES_CTR_KEY_SIZE (16) |
||||
#define AES_CTR_IV_SIZE (8) |
||||
|
||||
struct AVAESCTR; |
||||
|
||||
/**
|
||||
* Allocate an AVAESCTR context. |
||||
*/ |
||||
struct AVAESCTR *av_aes_ctr_alloc(void); |
||||
|
||||
/**
|
||||
* Initialize an AVAESCTR context. |
||||
* @param key encryption key, must have a length of AES_CTR_KEY_SIZE |
||||
*/ |
||||
int av_aes_ctr_init(struct AVAESCTR *a, const uint8_t *key); |
||||
|
||||
/**
|
||||
* Release an AVAESCTR context. |
||||
*/ |
||||
void av_aes_ctr_free(struct AVAESCTR *a); |
||||
|
||||
/**
|
||||
* Process a buffer using a previously initialized context. |
||||
* @param dst destination array, can be equal to src |
||||
* @param src source array, can be equal to dst |
||||
* @param size the size of src and dst |
||||
*/ |
||||
void av_aes_ctr_crypt(struct AVAESCTR *a, uint8_t *dst, const uint8_t *src, int size); |
||||
|
||||
/**
|
||||
* Get the current iv |
||||
*/ |
||||
const uint8_t* av_aes_ctr_get_iv(struct AVAESCTR *a); |
||||
|
||||
/**
|
||||
* Generate a random iv |
||||
*/ |
||||
void av_aes_ctr_set_random_iv(struct AVAESCTR *a); |
||||
|
||||
/**
|
||||
* Forcefully change the 8-byte iv |
||||
*/ |
||||
void av_aes_ctr_set_iv(struct AVAESCTR *a, const uint8_t* iv); |
||||
|
||||
/**
|
||||
* Forcefully change the "full" 16-byte iv, including the counter |
||||
*/ |
||||
void av_aes_ctr_set_full_iv(struct AVAESCTR *a, const uint8_t* iv); |
||||
|
||||
/**
|
||||
* Increment the top 64 bit of the iv (performed after each frame) |
||||
*/ |
||||
void av_aes_ctr_increment_iv(struct AVAESCTR *a); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* AVUTIL_AES_CTR_H */ |
||||
@ -0,0 +1,173 @@ |
||||
/*
|
||||
* copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
/**
|
||||
* @file |
||||
* Macro definitions for various function/variable attributes |
||||
*/ |
||||
|
||||
#ifndef AVUTIL_ATTRIBUTES_H |
||||
#define AVUTIL_ATTRIBUTES_H |
||||
|
||||
#ifdef __GNUC__ |
||||
# define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y)) |
||||
# define AV_GCC_VERSION_AT_MOST(x,y) (__GNUC__ < (x) || __GNUC__ == (x) && __GNUC_MINOR__ <= (y)) |
||||
#else |
||||
# define AV_GCC_VERSION_AT_LEAST(x,y) 0 |
||||
# define AV_GCC_VERSION_AT_MOST(x,y) 0 |
||||
#endif |
||||
|
||||
#ifdef __has_builtin |
||||
# define AV_HAS_BUILTIN(x) __has_builtin(x) |
||||
#else |
||||
# define AV_HAS_BUILTIN(x) 0 |
||||
#endif |
||||
|
||||
#ifndef av_always_inline |
||||
#if AV_GCC_VERSION_AT_LEAST(3,1) |
||||
# define av_always_inline __attribute__((always_inline)) inline |
||||
#elif defined(_MSC_VER) |
||||
# define av_always_inline __forceinline |
||||
#else |
||||
# define av_always_inline inline |
||||
#endif |
||||
#endif |
||||
|
||||
#ifndef av_extern_inline |
||||
#if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__) |
||||
# define av_extern_inline extern inline |
||||
#else |
||||
# define av_extern_inline inline |
||||
#endif |
||||
#endif |
||||
|
||||
#if AV_GCC_VERSION_AT_LEAST(3,4) |
||||
# define av_warn_unused_result __attribute__((warn_unused_result)) |
||||
#else |
||||
# define av_warn_unused_result |
||||
#endif |
||||
|
||||
#if AV_GCC_VERSION_AT_LEAST(3,1) |
||||
# define av_noinline __attribute__((noinline)) |
||||
#elif defined(_MSC_VER) |
||||
# define av_noinline __declspec(noinline) |
||||
#else |
||||
# define av_noinline |
||||
#endif |
||||
|
||||
#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) |
||||
# define av_pure __attribute__((pure)) |
||||
#else |
||||
# define av_pure |
||||
#endif |
||||
|
||||
#if AV_GCC_VERSION_AT_LEAST(2,6) || defined(__clang__) |
||||
# define av_const __attribute__((const)) |
||||
#else |
||||
# define av_const |
||||
#endif |
||||
|
||||
#if AV_GCC_VERSION_AT_LEAST(4,3) || defined(__clang__) |
||||
# define av_cold __attribute__((cold)) |
||||
#else |
||||
# define av_cold |
||||
#endif |
||||
|
||||
#if AV_GCC_VERSION_AT_LEAST(4,1) && !defined(__llvm__) |
||||
# define av_flatten __attribute__((flatten)) |
||||
#else |
||||
# define av_flatten |
||||
#endif |
||||
|
||||
#if AV_GCC_VERSION_AT_LEAST(3,1) |
||||
# define attribute_deprecated __attribute__((deprecated)) |
||||
#elif defined(_MSC_VER) |
||||
# define attribute_deprecated __declspec(deprecated) |
||||
#else |
||||
# define attribute_deprecated |
||||
#endif |
||||
|
||||
/**
|
||||
* Disable warnings about deprecated features |
||||
* This is useful for sections of code kept for backward compatibility and |
||||
* scheduled for removal. |
||||
*/ |
||||
#ifndef AV_NOWARN_DEPRECATED |
||||
#if AV_GCC_VERSION_AT_LEAST(4,6) |
||||
# define AV_NOWARN_DEPRECATED(code) \ |
||||
_Pragma("GCC diagnostic push") \
|
||||
_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \
|
||||
code \
|
||||
_Pragma("GCC diagnostic pop") |
||||
#elif defined(_MSC_VER) |
||||
# define AV_NOWARN_DEPRECATED(code) \ |
||||
__pragma(warning(push)) \
|
||||
__pragma(warning(disable : 4996)) \
|
||||
code; \
|
||||
__pragma(warning(pop)) |
||||
#else |
||||
# define AV_NOWARN_DEPRECATED(code) code |
||||
#endif |
||||
#endif |
||||
|
||||
#if defined(__GNUC__) || defined(__clang__) |
||||
# define av_unused __attribute__((unused)) |
||||
#else |
||||
# define av_unused |
||||
#endif |
||||
|
||||
/**
|
||||
* Mark a variable as used and prevent the compiler from optimizing it |
||||
* away. This is useful for variables accessed only from inline |
||||
* assembler without the compiler being aware. |
||||
*/ |
||||
#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) |
||||
# define av_used __attribute__((used)) |
||||
#else |
||||
# define av_used |
||||
#endif |
||||
|
||||
#if AV_GCC_VERSION_AT_LEAST(3,3) || defined(__clang__) |
||||
# define av_alias __attribute__((may_alias)) |
||||
#else |
||||
# define av_alias |
||||
#endif |
||||
|
||||
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__INTEL_COMPILER) |
||||
# define av_uninit(x) x=x |
||||
#else |
||||
# define av_uninit(x) x |
||||
#endif |
||||
|
||||
#if defined(__GNUC__) || defined(__clang__) |
||||
# define av_builtin_constant_p __builtin_constant_p |
||||
# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos))) |
||||
#else |
||||
# define av_builtin_constant_p(x) 0 |
||||
# define av_printf_format(fmtpos, attrpos) |
||||
#endif |
||||
|
||||
#if AV_GCC_VERSION_AT_LEAST(2,5) || defined(__clang__) |
||||
# define av_noreturn __attribute__((noreturn)) |
||||
#else |
||||
# define av_noreturn |
||||
#endif |
||||
|
||||
#endif /* AVUTIL_ATTRIBUTES_H */ |
||||
@ -0,0 +1,187 @@ |
||||
/*
|
||||
* Audio FIFO |
||||
* Copyright (c) 2012 Justin Ruggles <justin.ruggles@gmail.com> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
/**
|
||||
* @file |
||||
* Audio FIFO Buffer |
||||
*/ |
||||
|
||||
#ifndef AVUTIL_AUDIO_FIFO_H |
||||
#define AVUTIL_AUDIO_FIFO_H |
||||
|
||||
#include "avutil.h" |
||||
#include "fifo.h" |
||||
#include "samplefmt.h" |
||||
|
||||
/**
|
||||
* @addtogroup lavu_audio |
||||
* @{ |
||||
* |
||||
* @defgroup lavu_audiofifo Audio FIFO Buffer |
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* Context for an Audio FIFO Buffer. |
||||
* |
||||
* - Operates at the sample level rather than the byte level. |
||||
* - Supports multiple channels with either planar or packed sample format. |
||||
* - Automatic reallocation when writing to a full buffer. |
||||
*/ |
||||
typedef struct AVAudioFifo AVAudioFifo; |
||||
|
||||
/**
|
||||
* Free an AVAudioFifo. |
||||
* |
||||
* @param af AVAudioFifo to free |
||||
*/ |
||||
void av_audio_fifo_free(AVAudioFifo *af); |
||||
|
||||
/**
|
||||
* Allocate an AVAudioFifo. |
||||
* |
||||
* @param sample_fmt sample format |
||||
* @param channels number of channels |
||||
* @param nb_samples initial allocation size, in samples |
||||
* @return newly allocated AVAudioFifo, or NULL on error |
||||
*/ |
||||
AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels, |
||||
int nb_samples); |
||||
|
||||
/**
|
||||
* Reallocate an AVAudioFifo. |
||||
* |
||||
* @param af AVAudioFifo to reallocate |
||||
* @param nb_samples new allocation size, in samples |
||||
* @return 0 if OK, or negative AVERROR code on failure |
||||
*/ |
||||
av_warn_unused_result |
||||
int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples); |
||||
|
||||
/**
|
||||
* Write data to an AVAudioFifo. |
||||
* |
||||
* The AVAudioFifo will be reallocated automatically if the available space |
||||
* is less than nb_samples. |
||||
* |
||||
* @see enum AVSampleFormat |
||||
* The documentation for AVSampleFormat describes the data layout. |
||||
* |
||||
* @param af AVAudioFifo to write to |
||||
* @param data audio data plane pointers |
||||
* @param nb_samples number of samples to write |
||||
* @return number of samples actually written, or negative AVERROR |
||||
* code on failure. If successful, the number of samples |
||||
* actually written will always be nb_samples. |
||||
*/ |
||||
int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples); |
||||
|
||||
/**
|
||||
* Peek data from an AVAudioFifo. |
||||
* |
||||
* @see enum AVSampleFormat |
||||
* The documentation for AVSampleFormat describes the data layout. |
||||
* |
||||
* @param af AVAudioFifo to read from |
||||
* @param data audio data plane pointers |
||||
* @param nb_samples number of samples to peek |
||||
* @return number of samples actually peek, or negative AVERROR code |
||||
* on failure. The number of samples actually peek will not |
||||
* be greater than nb_samples, and will only be less than |
||||
* nb_samples if av_audio_fifo_size is less than nb_samples. |
||||
*/ |
||||
int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples); |
||||
|
||||
/**
|
||||
* Peek data from an AVAudioFifo. |
||||
* |
||||
* @see enum AVSampleFormat |
||||
* The documentation for AVSampleFormat describes the data layout. |
||||
* |
||||
* @param af AVAudioFifo to read from |
||||
* @param data audio data plane pointers |
||||
* @param nb_samples number of samples to peek |
||||
* @param offset offset from current read position |
||||
* @return number of samples actually peek, or negative AVERROR code |
||||
* on failure. The number of samples actually peek will not |
||||
* be greater than nb_samples, and will only be less than |
||||
* nb_samples if av_audio_fifo_size is less than nb_samples. |
||||
*/ |
||||
int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offset); |
||||
|
||||
/**
|
||||
* Read data from an AVAudioFifo. |
||||
* |
||||
* @see enum AVSampleFormat |
||||
* The documentation for AVSampleFormat describes the data layout. |
||||
* |
||||
* @param af AVAudioFifo to read from |
||||
* @param data audio data plane pointers |
||||
* @param nb_samples number of samples to read |
||||
* @return number of samples actually read, or negative AVERROR code |
||||
* on failure. The number of samples actually read will not |
||||
* be greater than nb_samples, and will only be less than |
||||
* nb_samples if av_audio_fifo_size is less than nb_samples. |
||||
*/ |
||||
int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples); |
||||
|
||||
/**
|
||||
* Drain data from an AVAudioFifo. |
||||
* |
||||
* Removes the data without reading it. |
||||
* |
||||
* @param af AVAudioFifo to drain |
||||
* @param nb_samples number of samples to drain |
||||
* @return 0 if OK, or negative AVERROR code on failure |
||||
*/ |
||||
int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples); |
||||
|
||||
/**
|
||||
* Reset the AVAudioFifo buffer. |
||||
* |
||||
* This empties all data in the buffer. |
||||
* |
||||
* @param af AVAudioFifo to reset |
||||
*/ |
||||
void av_audio_fifo_reset(AVAudioFifo *af); |
||||
|
||||
/**
|
||||
* Get the current number of samples in the AVAudioFifo available for reading. |
||||
* |
||||
* @param af the AVAudioFifo to query |
||||
* @return number of samples available for reading |
||||
*/ |
||||
int av_audio_fifo_size(AVAudioFifo *af); |
||||
|
||||
/**
|
||||
* Get the current number of samples in the AVAudioFifo available for writing. |
||||
* |
||||
* @param af the AVAudioFifo to query |
||||
* @return number of samples available for writing |
||||
*/ |
||||
int av_audio_fifo_space(AVAudioFifo *af); |
||||
|
||||
/**
|
||||
* @} |
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* AVUTIL_AUDIO_FIFO_H */ |
||||
@ -0,0 +1,75 @@ |
||||
/*
|
||||
* copyright (c) 2010 Michael Niedermayer <michaelni@gmx.at> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
/**
|
||||
* @file |
||||
* simple assert() macros that are a bit more flexible than ISO C assert(). |
||||
* @author Michael Niedermayer <michaelni@gmx.at> |
||||
*/ |
||||
|
||||
#ifndef AVUTIL_AVASSERT_H |
||||
#define AVUTIL_AVASSERT_H |
||||
|
||||
#include <stdlib.h> |
||||
#include "avutil.h" |
||||
#include "log.h" |
||||
|
||||
/**
|
||||
* assert() equivalent, that is always enabled. |
||||
*/ |
||||
#define av_assert0(cond) do { \ |
||||
if (!(cond)) { \
|
||||
av_log(NULL, AV_LOG_PANIC, "Assertion %s failed at %s:%d\n", \
|
||||
AV_STRINGIFY(cond), __FILE__, __LINE__); \
|
||||
abort(); \
|
||||
} \
|
||||
} while (0) |
||||
|
||||
|
||||
/**
|
||||
* assert() equivalent, that does not lie in speed critical code. |
||||
* These asserts() thus can be enabled without fearing speed loss. |
||||
*/ |
||||
#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0 |
||||
#define av_assert1(cond) av_assert0(cond) |
||||
#else |
||||
#define av_assert1(cond) ((void)0) |
||||
#endif |
||||
|
||||
|
||||
/**
|
||||
* assert() equivalent, that does lie in speed critical code. |
||||
*/ |
||||
#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 |
||||
#define av_assert2(cond) av_assert0(cond) |
||||
#define av_assert2_fpu() av_assert0_fpu() |
||||
#else |
||||
#define av_assert2(cond) ((void)0) |
||||
#define av_assert2_fpu() ((void)0) |
||||
#endif |
||||
|
||||
/**
|
||||
* Assert that floating point operations can be executed. |
||||
* |
||||
* This will av_assert0() that the cpu is not in MMX state on X86 |
||||
*/ |
||||
void av_assert0_fpu(void); |
||||
|
||||
#endif /* AVUTIL_AVASSERT_H */ |
||||
@ -0,0 +1,6 @@ |
||||
/* Generated by ffmpeg configure */ |
||||
#ifndef AVUTIL_AVCONFIG_H |
||||
#define AVUTIL_AVCONFIG_H |
||||
#define AV_HAVE_BIGENDIAN 0 |
||||
#define AV_HAVE_FAST_UNALIGNED 0 |
||||
#endif /* AVUTIL_AVCONFIG_H */ |
||||
@ -0,0 +1,437 @@ |
||||
/*
|
||||
* Copyright (c) 2007 Mans Rullgard |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVUTIL_AVSTRING_H |
||||
#define AVUTIL_AVSTRING_H |
||||
|
||||
#include <stddef.h> |
||||
#include <stdint.h> |
||||
#include "attributes.h" |
||||
#include "version.h" |
||||
|
||||
/**
|
||||
* @addtogroup lavu_string |
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* Return non-zero if pfx is a prefix of str. If it is, *ptr is set to |
||||
* the address of the first character in str after the prefix. |
||||
* |
||||
* @param str input string |
||||
* @param pfx prefix to test |
||||
* @param ptr updated if the prefix is matched inside str |
||||
* @return non-zero if the prefix matches, zero otherwise |
||||
*/ |
||||
int av_strstart(const char *str, const char *pfx, const char **ptr); |
||||
|
||||
/**
|
||||
* Return non-zero if pfx is a prefix of str independent of case. If |
||||
* it is, *ptr is set to the address of the first character in str |
||||
* after the prefix. |
||||
* |
||||
* @param str input string |
||||
* @param pfx prefix to test |
||||
* @param ptr updated if the prefix is matched inside str |
||||
* @return non-zero if the prefix matches, zero otherwise |
||||
*/ |
||||
int av_stristart(const char *str, const char *pfx, const char **ptr); |
||||
|
||||
/**
|
||||
* Locate the first case-independent occurrence in the string haystack |
||||
* of the string needle. A zero-length string needle is considered to |
||||
* match at the start of haystack. |
||||
* |
||||
* This function is a case-insensitive version of the standard strstr(). |
||||
* |
||||
* @param haystack string to search in |
||||
* @param needle string to search for |
||||
* @return pointer to the located match within haystack |
||||
* or a null pointer if no match |
||||
*/ |
||||
char *av_stristr(const char *haystack, const char *needle); |
||||
|
||||
/**
|
||||
* Locate the first occurrence of the string needle in the string haystack |
||||
* where not more than hay_length characters are searched. A zero-length |
||||
* string needle is considered to match at the start of haystack. |
||||
* |
||||
* This function is a length-limited version of the standard strstr(). |
||||
* |
||||
* @param haystack string to search in |
||||
* @param needle string to search for |
||||
* @param hay_length length of string to search in |
||||
* @return pointer to the located match within haystack |
||||
* or a null pointer if no match |
||||
*/ |
||||
char *av_strnstr(const char *haystack, const char *needle, size_t hay_length); |
||||
|
||||
/**
|
||||
* Copy the string src to dst, but no more than size - 1 bytes, and |
||||
* null-terminate dst. |
||||
* |
||||
* This function is the same as BSD strlcpy(). |
||||
* |
||||
* @param dst destination buffer |
||||
* @param src source string |
||||
* @param size size of destination buffer |
||||
* @return the length of src |
||||
* |
||||
* @warning since the return value is the length of src, src absolutely |
||||
* _must_ be a properly 0-terminated string, otherwise this will read beyond |
||||
* the end of the buffer and possibly crash. |
||||
*/ |
||||
size_t av_strlcpy(char *dst, const char *src, size_t size); |
||||
|
||||
/**
|
||||
* Append the string src to the string dst, but to a total length of |
||||
* no more than size - 1 bytes, and null-terminate dst. |
||||
* |
||||
* This function is similar to BSD strlcat(), but differs when |
||||
* size <= strlen(dst). |
||||
* |
||||
* @param dst destination buffer |
||||
* @param src source string |
||||
* @param size size of destination buffer |
||||
* @return the total length of src and dst |
||||
* |
||||
* @warning since the return value use the length of src and dst, these |
||||
* absolutely _must_ be a properly 0-terminated strings, otherwise this |
||||
* will read beyond the end of the buffer and possibly crash. |
||||
*/ |
||||
size_t av_strlcat(char *dst, const char *src, size_t size); |
||||
|
||||
/**
|
||||
* Append output to a string, according to a format. Never write out of |
||||
* the destination buffer, and always put a terminating 0 within |
||||
* the buffer. |
||||
* @param dst destination buffer (string to which the output is |
||||
* appended) |
||||
* @param size total size of the destination buffer |
||||
* @param fmt printf-compatible format string, specifying how the |
||||
* following parameters are used |
||||
* @return the length of the string that would have been generated |
||||
* if enough space had been available |
||||
*/ |
||||
size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4); |
||||
|
||||
/**
|
||||
* Get the count of continuous non zero chars starting from the beginning. |
||||
* |
||||
* @param len maximum number of characters to check in the string, that |
||||
* is the maximum value which is returned by the function |
||||
*/ |
||||
static inline size_t av_strnlen(const char *s, size_t len) |
||||
{ |
||||
size_t i; |
||||
for (i = 0; i < len && s[i]; i++) |
||||
; |
||||
return i; |
||||
} |
||||
|
||||
/**
|
||||
* Print arguments following specified format into a large enough auto |
||||
* allocated buffer. It is similar to GNU asprintf(). |
||||
* @param fmt printf-compatible format string, specifying how the |
||||
* following parameters are used. |
||||
* @return the allocated string |
||||
* @note You have to free the string yourself with av_free(). |
||||
*/ |
||||
char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2); |
||||
|
||||
#if FF_API_D2STR |
||||
/**
|
||||
* Convert a number to an av_malloced string. |
||||
* @deprecated use av_asprintf() with "%f" or a more specific format |
||||
*/ |
||||
attribute_deprecated |
||||
char *av_d2str(double d); |
||||
#endif |
||||
|
||||
/**
|
||||
* Unescape the given string until a non escaped terminating char, |
||||
* and return the token corresponding to the unescaped string. |
||||
* |
||||
* The normal \ and ' escaping is supported. Leading and trailing |
||||
* whitespaces are removed, unless they are escaped with '\' or are |
||||
* enclosed between ''. |
||||
* |
||||
* @param buf the buffer to parse, buf will be updated to point to the |
||||
* terminating char |
||||
* @param term a 0-terminated list of terminating chars |
||||
* @return the malloced unescaped string, which must be av_freed by |
||||
* the user, NULL in case of allocation failure |
||||
*/ |
||||
char *av_get_token(const char **buf, const char *term); |
||||
|
||||
/**
|
||||
* Split the string into several tokens which can be accessed by |
||||
* successive calls to av_strtok(). |
||||
* |
||||
* A token is defined as a sequence of characters not belonging to the |
||||
* set specified in delim. |
||||
* |
||||
* On the first call to av_strtok(), s should point to the string to |
||||
* parse, and the value of saveptr is ignored. In subsequent calls, s |
||||
* should be NULL, and saveptr should be unchanged since the previous |
||||
* call. |
||||
* |
||||
* This function is similar to strtok_r() defined in POSIX.1. |
||||
* |
||||
* @param s the string to parse, may be NULL |
||||
* @param delim 0-terminated list of token delimiters, must be non-NULL |
||||
* @param saveptr user-provided pointer which points to stored |
||||
* information necessary for av_strtok() to continue scanning the same |
||||
* string. saveptr is updated to point to the next character after the |
||||
* first delimiter found, or to NULL if the string was terminated |
||||
* @return the found token, or NULL when no token is found |
||||
*/ |
||||
char *av_strtok(char *s, const char *delim, char **saveptr); |
||||
|
||||
/**
|
||||
* Locale-independent conversion of ASCII isdigit. |
||||
*/ |
||||
static inline av_const int av_isdigit(int c) |
||||
{ |
||||
return c >= '0' && c <= '9'; |
||||
} |
||||
|
||||
/**
|
||||
* Locale-independent conversion of ASCII isgraph. |
||||
*/ |
||||
static inline av_const int av_isgraph(int c) |
||||
{ |
||||
return c > 32 && c < 127; |
||||
} |
||||
|
||||
/**
|
||||
* Locale-independent conversion of ASCII isspace. |
||||
*/ |
||||
static inline av_const int av_isspace(int c) |
||||
{ |
||||
return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || |
||||
c == '\v'; |
||||
} |
||||
|
||||
/**
|
||||
* Locale-independent conversion of ASCII characters to uppercase. |
||||
*/ |
||||
static inline av_const int av_toupper(int c) |
||||
{ |
||||
if (c >= 'a' && c <= 'z') |
||||
c ^= 0x20; |
||||
return c; |
||||
} |
||||
|
||||
/**
|
||||
* Locale-independent conversion of ASCII characters to lowercase. |
||||
*/ |
||||
static inline av_const int av_tolower(int c) |
||||
{ |
||||
if (c >= 'A' && c <= 'Z') |
||||
c ^= 0x20; |
||||
return c; |
||||
} |
||||
|
||||
/**
|
||||
* Locale-independent conversion of ASCII isxdigit. |
||||
*/ |
||||
static inline av_const int av_isxdigit(int c) |
||||
{ |
||||
c = av_tolower(c); |
||||
return av_isdigit(c) || (c >= 'a' && c <= 'f'); |
||||
} |
||||
|
||||
/**
|
||||
* Locale-independent case-insensitive compare. |
||||
* @note This means only ASCII-range characters are case-insensitive |
||||
*/ |
||||
int av_strcasecmp(const char *a, const char *b); |
||||
|
||||
/**
|
||||
* Locale-independent case-insensitive compare. |
||||
* @note This means only ASCII-range characters are case-insensitive |
||||
*/ |
||||
int av_strncasecmp(const char *a, const char *b, size_t n); |
||||
|
||||
/**
|
||||
* Locale-independent strings replace. |
||||
* @note This means only ASCII-range characters are replace |
||||
*/ |
||||
char *av_strireplace(const char *str, const char *from, const char *to); |
||||
|
||||
/**
|
||||
* Thread safe basename. |
||||
* @param path the string to parse, on DOS both \ and / are considered separators. |
||||
* @return pointer to the basename substring. |
||||
* If path does not contain a slash, the function returns a copy of path. |
||||
* If path is a NULL pointer or points to an empty string, a pointer |
||||
* to a string "." is returned. |
||||
*/ |
||||
const char *av_basename(const char *path); |
||||
|
||||
/**
|
||||
* Thread safe dirname. |
||||
* @param path the string to parse, on DOS both \ and / are considered separators. |
||||
* @return A pointer to a string that's the parent directory of path. |
||||
* If path is a NULL pointer or points to an empty string, a pointer |
||||
* to a string "." is returned. |
||||
* @note the function may modify the contents of the path, so copies should be passed. |
||||
*/ |
||||
const char *av_dirname(char *path); |
||||
|
||||
/**
|
||||
* Match instances of a name in a comma-separated list of names. |
||||
* List entries are checked from the start to the end of the names list, |
||||
* the first match ends further processing. If an entry prefixed with '-' |
||||
* matches, then 0 is returned. The "ALL" list entry is considered to |
||||
* match all names. |
||||
* |
||||
* @param name Name to look for. |
||||
* @param names List of names. |
||||
* @return 1 on match, 0 otherwise. |
||||
*/ |
||||
int av_match_name(const char *name, const char *names); |
||||
|
||||
/**
|
||||
* Append path component to the existing path. |
||||
* Path separator '/' is placed between when needed. |
||||
* Resulting string have to be freed with av_free(). |
||||
* @param path base path |
||||
* @param component component to be appended |
||||
* @return new path or NULL on error. |
||||
*/ |
||||
char *av_append_path_component(const char *path, const char *component); |
||||
|
||||
enum AVEscapeMode { |
||||
AV_ESCAPE_MODE_AUTO, ///< Use auto-selected escaping mode.
|
||||
AV_ESCAPE_MODE_BACKSLASH, ///< Use backslash escaping.
|
||||
AV_ESCAPE_MODE_QUOTE, ///< Use single-quote escaping.
|
||||
AV_ESCAPE_MODE_XML, ///< Use XML non-markup character data escaping.
|
||||
}; |
||||
|
||||
/**
|
||||
* Consider spaces special and escape them even in the middle of the |
||||
* string. |
||||
* |
||||
* This is equivalent to adding the whitespace characters to the special |
||||
* characters lists, except it is guaranteed to use the exact same list |
||||
* of whitespace characters as the rest of libavutil. |
||||
*/ |
||||
#define AV_ESCAPE_FLAG_WHITESPACE (1 << 0) |
||||
|
||||
/**
|
||||
* Escape only specified special characters. |
||||
* Without this flag, escape also any characters that may be considered |
||||
* special by av_get_token(), such as the single quote. |
||||
*/ |
||||
#define AV_ESCAPE_FLAG_STRICT (1 << 1) |
||||
|
||||
/**
|
||||
* Within AV_ESCAPE_MODE_XML, additionally escape single quotes for single |
||||
* quoted attributes. |
||||
*/ |
||||
#define AV_ESCAPE_FLAG_XML_SINGLE_QUOTES (1 << 2) |
||||
|
||||
/**
|
||||
* Within AV_ESCAPE_MODE_XML, additionally escape double quotes for double |
||||
* quoted attributes. |
||||
*/ |
||||
#define AV_ESCAPE_FLAG_XML_DOUBLE_QUOTES (1 << 3) |
||||
|
||||
|
||||
/**
|
||||
* Escape string in src, and put the escaped string in an allocated |
||||
* string in *dst, which must be freed with av_free(). |
||||
* |
||||
* @param dst pointer where an allocated string is put |
||||
* @param src string to escape, must be non-NULL |
||||
* @param special_chars string containing the special characters which |
||||
* need to be escaped, can be NULL |
||||
* @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. |
||||
* Any unknown value for mode will be considered equivalent to |
||||
* AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without |
||||
* notice. |
||||
* @param flags flags which control how to escape, see AV_ESCAPE_FLAG_ macros |
||||
* @return the length of the allocated string, or a negative error code in case of error |
||||
* @see av_bprint_escape() |
||||
*/ |
||||
av_warn_unused_result |
||||
int av_escape(char **dst, const char *src, const char *special_chars, |
||||
enum AVEscapeMode mode, int flags); |
||||
|
||||
#define AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES 1 ///< accept codepoints over 0x10FFFF
|
||||
#define AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS 2 ///< accept non-characters - 0xFFFE and 0xFFFF
|
||||
#define AV_UTF8_FLAG_ACCEPT_SURROGATES 4 ///< accept UTF-16 surrogates codes
|
||||
#define AV_UTF8_FLAG_EXCLUDE_XML_INVALID_CONTROL_CODES 8 ///< exclude control codes not accepted by XML
|
||||
|
||||
#define AV_UTF8_FLAG_ACCEPT_ALL \ |
||||
AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES|AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS|AV_UTF8_FLAG_ACCEPT_SURROGATES |
||||
|
||||
/**
|
||||
* Read and decode a single UTF-8 code point (character) from the |
||||
* buffer in *buf, and update *buf to point to the next byte to |
||||
* decode. |
||||
* |
||||
* In case of an invalid byte sequence, the pointer will be updated to |
||||
* the next byte after the invalid sequence and the function will |
||||
* return an error code. |
||||
* |
||||
* Depending on the specified flags, the function will also fail in |
||||
* case the decoded code point does not belong to a valid range. |
||||
* |
||||
* @note For speed-relevant code a carefully implemented use of |
||||
* GET_UTF8() may be preferred. |
||||
* |
||||
* @param codep pointer used to return the parsed code in case of success. |
||||
* The value in *codep is set even in case the range check fails. |
||||
* @param bufp pointer to the address the first byte of the sequence |
||||
* to decode, updated by the function to point to the |
||||
* byte next after the decoded sequence |
||||
* @param buf_end pointer to the end of the buffer, points to the next |
||||
* byte past the last in the buffer. This is used to |
||||
* avoid buffer overreads (in case of an unfinished |
||||
* UTF-8 sequence towards the end of the buffer). |
||||
* @param flags a collection of AV_UTF8_FLAG_* flags |
||||
* @return >= 0 in case a sequence was successfully read, a negative |
||||
* value in case of invalid sequence |
||||
*/ |
||||
av_warn_unused_result |
||||
int av_utf8_decode(int32_t *codep, const uint8_t **bufp, const uint8_t *buf_end, |
||||
unsigned int flags); |
||||
|
||||
/**
|
||||
* Check if a name is in a list. |
||||
* @returns 0 if not found, or the 1 based index where it has been found in the |
||||
* list. |
||||
*/ |
||||
int av_match_list(const char *name, const char *list, char separator); |
||||
|
||||
/**
|
||||
* See libc sscanf manual for more information. |
||||
* Locale-independent sscanf implementation. |
||||
*/ |
||||
int av_sscanf(const char *string, const char *format, ...); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* AVUTIL_AVSTRING_H */ |
||||
@ -0,0 +1,365 @@ |
||||
/*
|
||||
* copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVUTIL_AVUTIL_H |
||||
#define AVUTIL_AVUTIL_H |
||||
|
||||
/**
|
||||
* @file |
||||
* @ingroup lavu |
||||
* Convenience header that includes @ref lavu "libavutil"'s core. |
||||
*/ |
||||
|
||||
/**
|
||||
* @mainpage |
||||
* |
||||
* @section ffmpeg_intro Introduction |
||||
* |
||||
* This document describes the usage of the different libraries |
||||
* provided by FFmpeg. |
||||
* |
||||
* @li @ref libavc "libavcodec" encoding/decoding library |
||||
* @li @ref lavfi "libavfilter" graph-based frame editing library |
||||
* @li @ref libavf "libavformat" I/O and muxing/demuxing library |
||||
* @li @ref lavd "libavdevice" special devices muxing/demuxing library |
||||
* @li @ref lavu "libavutil" common utility library |
||||
* @li @ref lswr "libswresample" audio resampling, format conversion and mixing |
||||
* @li @ref lpp "libpostproc" post processing library |
||||
* @li @ref libsws "libswscale" color conversion and scaling library |
||||
* |
||||
* @section ffmpeg_versioning Versioning and compatibility |
||||
* |
||||
* Each of the FFmpeg libraries contains a version.h header, which defines a |
||||
* major, minor and micro version number with the |
||||
* <em>LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO}</em> macros. The major version |
||||
* number is incremented with backward incompatible changes - e.g. removing |
||||
* parts of the public API, reordering public struct members, etc. The minor |
||||
* version number is incremented for backward compatible API changes or major |
||||
* new features - e.g. adding a new public function or a new decoder. The micro |
||||
* version number is incremented for smaller changes that a calling program |
||||
* might still want to check for - e.g. changing behavior in a previously |
||||
* unspecified situation. |
||||
* |
||||
* FFmpeg guarantees backward API and ABI compatibility for each library as long |
||||
* as its major version number is unchanged. This means that no public symbols |
||||
* will be removed or renamed. Types and names of the public struct members and |
||||
* values of public macros and enums will remain the same (unless they were |
||||
* explicitly declared as not part of the public API). Documented behavior will |
||||
* not change. |
||||
* |
||||
* In other words, any correct program that works with a given FFmpeg snapshot |
||||
* should work just as well without any changes with any later snapshot with the |
||||
* same major versions. This applies to both rebuilding the program against new |
||||
* FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program |
||||
* links against. |
||||
* |
||||
* However, new public symbols may be added and new members may be appended to |
||||
* public structs whose size is not part of public ABI (most public structs in |
||||
* FFmpeg). New macros and enum values may be added. Behavior in undocumented |
||||
* situations may change slightly (and be documented). All those are accompanied |
||||
* by an entry in doc/APIchanges and incrementing either the minor or micro |
||||
* version number. |
||||
*/ |
||||
|
||||
/**
|
||||
* @defgroup lavu libavutil |
||||
* Common code shared across all FFmpeg libraries. |
||||
* |
||||
* @note |
||||
* libavutil is designed to be modular. In most cases, in order to use the |
||||
* functions provided by one component of libavutil you must explicitly include |
||||
* the specific header containing that feature. If you are only using |
||||
* media-related components, you could simply include libavutil/avutil.h, which |
||||
* brings in most of the "core" components. |
||||
* |
||||
* @{ |
||||
* |
||||