/*
* generic decoding - related code
*
* 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_DECODE_H
#define AVCODEC_DECODE_H
#include "libavutil/frame.h"
#include "libavutil/hwcontext.h"
#include "avcodec.h"
/**
* This struct stores per - frame lavc - internal data and is attached to it via
* private_ref .
*/
typedef struct FrameDecodeData {
/**
* The callback to perform some delayed processing on the frame right
* before it is returned to the caller .
*
* @ note This code is called at some unspecified point after the frame is
* returned from the decoder ' s decode / receive_frame call . Therefore it cannot rely
* on AVCodecContext being in any specific state , so it does not get to
* access AVCodecContext directly at all . All the state it needs must be
* stored in the post_process_opaque object .
*/
int (*post_process)(void *logctx, AVFrame *frame);
void *post_process_opaque;
void (*post_process_opaque_free)(void *opaque);
/**
* Per - frame private data for hwaccels .
*
* Same as @ ref post_process , but used only by some hwaccels to retrieve or
* finalize frames , and executed first .
*/
int (*hwaccel_priv_post_process)(void *logctx, AVFrame *frame);
void *hwaccel_priv;
void (*hwaccel_priv_free)(void *priv);
} FrameDecodeData;
/**
* Called by decoders to get the next packet for decoding .
*
* @ param pkt An empty packet to be filled with data .
* @ return 0 if a new reference has been successfully written to pkt
* AVERROR ( EAGAIN ) if no data is currently available
* AVERROR_EOF if and end of stream has been reached , so no more data
* will be available
*/
int ff_decode_get_packet(AVCodecContext *avctx, AVPacket *pkt);
/**
* Set various frame properties from the provided packet .
*/
int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx,
AVFrame *frame, const AVPacket *pkt);
/**
* Set various frame properties from the codec context / packet data .
*/
int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame);
/**
* Make sure avctx . hw_frames_ctx is set . If it ' s not set , the function will
* try to allocate it from hw_device_ctx . If that is not possible , an error
* message is printed , and an error code is returned .
*/
int ff_decode_get_hw_frames_ctx(AVCodecContext *avctx,
enum AVHWDeviceType dev_type);
int ff_attach_decode_data(AVCodecContext *avctx, AVFrame *frame);
/**
* Check whether the side - data of src contains a palette of
* size AVPALETTE_SIZE ; if so , copy it to dst and return 1 ;
* else return 0 .
* Also emit an error message upon encountering a palette
* with invalid size .
*/
int ff_copy_palette(void *dst, const AVPacket *src, void *logctx);
/**
* Check that the provided frame dimensions are valid and set them on the codec
* context .
*/
int ff_set_dimensions(AVCodecContext *s, int width, int height);
/**
* Check that the provided sample aspect ratio is valid and set it on the codec
* context .
*/
int ff_set_sar(AVCodecContext *avctx, AVRational sar);
/**
* Select the ( possibly hardware accelerated ) pixel format .
* This is a wrapper around AVCodecContext . get_format ( ) and should be used
* instead of calling get_format ( ) directly .
*
* The list of pixel formats must contain at least one valid entry , and is
* terminated with AV_PIX_FMT_NONE . If it is possible to decode to software ,
* the first entry after the last hwaccel one in the list must be the most
* accurate software format , followed by less accurate ones in order of
* preference .
* If it is not possible to decode to software , AVCodecContext . sw_pix_fmt
* must be set before calling this function .
*/
int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt);
/**
* Get a buffer for a frame . This is a wrapper around
* AVCodecContext . get_buffer ( ) and should be used instead calling get_buffer ( )
* directly .
*/
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags);
#define FF_REGET_BUFFER_FLAG_READONLY 1 ///< the returned buffer does not need to be writable
/**
* Identical in function to ff_get_buffer ( ) , except it reuses the existing buffer
* if available .
*/
int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags);
/**
* Add or update AV_FRAME_DATA_MATRIXENCODING side data .
*/
int ff_side_data_update_matrix_encoding(AVFrame *frame,
enum AVMatrixEncoding matrix_encoding);
/**
* Allocate a hwaccel frame private data if the provided avctx
* uses a hwaccel method that needs it . The returned data is
* a RefStruct reference ( if allocated ) .
*
* @ param avctx The codec context
* @ param hwaccel_picture_private Pointer to return hwaccel_picture_private
* @ return 0 on success , < 0 on error
*/
int ff_hwaccel_frame_priv_alloc(AVCodecContext *avctx, void **hwaccel_picture_private);
/**
* Get side data of the given type from a decoding context .
*/
const AVPacketSideData *ff_get_coded_side_data(const AVCodecContext *avctx,
enum AVPacketSideDataType type);
/**
* Wrapper around av_frame_new_side_data , which rejects side data overridden by
* the demuxer . Returns 0 on success , and a negative error code otherwise .
* If successful and sd is not NULL , * sd may either contain a pointer to the new
* side data , or NULL in case the side data was already present .
*/
int ff_frame_new_side_data(const AVCodecContext *avctx, AVFrame *frame,
enum AVFrameSideDataType type, size_t size,
AVFrameSideData **sd);
/**
* Similar to ` ff_frame_new_side_data ` , but using an existing buffer ref .
*
* * buf is ALWAYS consumed by this function and NULL written in its place , even
* on failure .
*/
int ff_frame_new_side_data_from_buf(const AVCodecContext *avctx,
AVFrame *frame, enum AVFrameSideDataType type,
AVBufferRef **buf);
/**
* Same as ` ff_frame_new_side_data_from_buf ` , but taking a AVFrameSideData
* array directly instead of an AVFrame .
*/
int ff_frame_new_side_data_from_buf_ext(const AVCodecContext *avctx,
AVFrameSideData ***sd, int *nb_sd,
enum AVFrameSideDataType type,
AVBufferRef **buf);
struct AVMasteringDisplayMetadata;
struct AVContentLightMetadata;
/**
* Wrapper around av_mastering_display_metadata_create_side_data ( ) , which
* rejects side data overridden by the demuxer . Returns 0 on success , and a
* negative error code otherwise . If successful , * mdm may either be a pointer to
* the new side data , or NULL in case the side data was already present .
*/
int ff_decode_mastering_display_new(const AVCodecContext *avctx, AVFrame *frame,
struct AVMasteringDisplayMetadata **mdm);
/**
* Same as ` ff_decode_mastering_display_new ` , but taking a AVFrameSideData
* array directly instead of an AVFrame .
*/
int ff_decode_mastering_display_new_ext(const AVCodecContext *avctx,
AVFrameSideData ***sd, int *nb_sd,
struct AVMasteringDisplayMetadata **mdm);
/**
* Wrapper around av_content_light_metadata_create_side_data ( ) , which
* rejects side data overridden by the demuxer . Returns 0 on success , and a
* negative error code otherwise . If successful , * clm may either be a pointer to
* the new side data , or NULL in case the side data was already present .
*/
int ff_decode_content_light_new(const AVCodecContext *avctx, AVFrame *frame,
struct AVContentLightMetadata **clm);
/**
* Same as ` ff_decode_content_light_new ` , but taking a AVFrameSideData
* array directly instead of an AVFrame .
*/
int ff_decode_content_light_new_ext(const AVCodecContext *avctx,
AVFrameSideData ***sd, int *nb_sd,
struct AVContentLightMetadata **clm);
#if CONFIG_EXIF
enum AVExifHeaderMode;
/**
* Attach the data buffer to the frame . This is mostly a wrapper for
* av_side_data_new_from_buffer , but it checks if the orientation tag is
* present in the provided EXIF buffer . If it is , it zeroes it out and
* attaches that information as an AV_FRAME_DATA_DISPLAYMATRIX instead
* of including it in the AV_FRAME_DATA_EXIF side data buffer .
*
* * buf is ALWAYS consumed by this function and NULL written in its place , even
* on failure .
*/
int ff_decode_exif_attach_buffer(AVCodecContext *avctx, AVFrame *frame, AVBufferRef **buf,
enum AVExifHeaderMode header_mode);
struct AVExifMetadata;
/**
* Attach an already - parsed EXIF metadata struct to the frame as a side data
* buffer . It writes the EXIF IFD into the buffer and attaches the buffer to
* the frame .
*
* If the metadata struct contains an orientation tag , it will be zeroed before
* writing , and instead , an AV_FRAME_DATA_DISPLAYMATRIX will be attached in
* addition to the AV_FRAME_DATA_EXIF side data .
*/
int ff_decode_exif_attach_ifd(AVCodecContext *avctx, AVFrame *frame,
const struct AVExifMetadata *ifd);
#endif
#endif /* AVCODEC_DECODE_H */
Messung V0.5 in Prozent C=91 H=100 G=95
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-08-24)
¤
*© Formatika GbR, Deutschland