FFmpeg
Data Structures | Macros | Functions
decode.h File Reference
#include "libavutil/frame.h"
#include "libavutil/hwcontext.h"
#include "avcodec.h"

Go to the source code of this file.

Data Structures

struct  FrameDecodeData
 This struct stores per-frame lavc-internal data and is attached to it via private_ref. More...
 

Macros

#define FF_REGET_BUFFER_FLAG_READONLY   1
 the returned buffer does not need to be writable More...
 

Functions

int ff_decode_get_packet (AVCodecContext *avctx, AVPacket *pkt)
 Called by decoders to get the next packet for decoding. More...
 
int ff_decode_frame_props_from_pkt (const AVCodecContext *avctx, AVFrame *frame, const AVPacket *pkt)
 Set various frame properties from the provided packet. More...
 
int ff_decode_frame_props (AVCodecContext *avctx, AVFrame *frame)
 Set various frame properties from the codec context / packet data. More...
 
int ff_decode_get_hw_frames_ctx (AVCodecContext *avctx, enum AVHWDeviceType dev_type)
 Make sure avctx.hw_frames_ctx is set. More...
 
int ff_attach_decode_data (AVFrame *frame)
 
int ff_copy_palette (void *dst, const AVPacket *src, void *logctx)
 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. More...
 
int ff_set_dimensions (AVCodecContext *s, int width, int height)
 Check that the provided frame dimensions are valid and set them on the codec context. More...
 
int ff_set_sar (AVCodecContext *avctx, AVRational sar)
 Check that the provided sample aspect ratio is valid and set it on the codec context. More...
 
int ff_get_format (AVCodecContext *avctx, const enum AVPixelFormat *fmt)
 Select the (possibly hardware accelerated) pixel format. More...
 
int ff_get_buffer (AVCodecContext *avctx, AVFrame *frame, int flags)
 Get a buffer for a frame. More...
 
int ff_reget_buffer (AVCodecContext *avctx, AVFrame *frame, int flags)
 Identical in function to ff_get_buffer(), except it reuses the existing buffer if available. More...
 
int ff_side_data_update_matrix_encoding (AVFrame *frame, enum AVMatrixEncoding matrix_encoding)
 Add or update AV_FRAME_DATA_MATRIXENCODING side data. More...
 
int ff_hwaccel_frame_priv_alloc (AVCodecContext *avctx, void **hwaccel_picture_private)
 Allocate a hwaccel frame private data if the provided avctx uses a hwaccel method that needs it. More...
 
const AVPacketSideDataff_get_coded_side_data (const AVCodecContext *avctx, enum AVPacketSideDataType type)
 Get side data of the given type from a decoding context. More...
 
int ff_frame_new_side_data (const AVCodecContext *avctx, AVFrame *frame, enum AVFrameSideDataType type, size_t size, AVFrameSideData **sd)
 Wrapper around av_frame_new_side_data, which rejects side data overridden by the demuxer. More...
 
int ff_frame_new_side_data_from_buf (const AVCodecContext *avctx, AVFrame *frame, enum AVFrameSideDataType type, AVBufferRef **buf, AVFrameSideData **sd)
 Similar to ff_frame_new_side_data, but using an existing buffer ref. More...
 
int ff_decode_mastering_display_new (const AVCodecContext *avctx, AVFrame *frame, struct AVMasteringDisplayMetadata **mdm)
 Wrapper around av_mastering_display_metadata_create_side_data(), which rejects side data overridden by the demuxer. More...
 
int ff_decode_content_light_new (const AVCodecContext *avctx, AVFrame *frame, struct AVContentLightMetadata **clm)
 Wrapper around av_content_light_metadata_create_side_data(), which rejects side data overridden by the demuxer. More...
 

Macro Definition Documentation

◆ FF_REGET_BUFFER_FLAG_READONLY

#define FF_REGET_BUFFER_FLAG_READONLY   1

the returned buffer does not need to be writable

Definition at line 128 of file decode.h.

Function Documentation

◆ ff_decode_get_packet()

int ff_decode_get_packet ( AVCodecContext avctx,
AVPacket pkt 
)

Called by decoders to get the next packet for decoding.

Parameters
pktAn empty packet to be filled with data.
Returns
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

Definition at line 220 of file decode.c.

Referenced by av1_receive_frame(), binkaudio_receive_frame(), cuvid_output_frame(), decode_simple_internal(), ffmmal_receive_frame(), libdav1d_receive_frame_internal(), libjxl_receive_frame(), libxevd_receive_frame(), mediacodec_receive_frame(), osq_receive_frame(), and v4l2_receive_frame().

◆ ff_decode_frame_props_from_pkt()

int ff_decode_frame_props_from_pkt ( const AVCodecContext avctx,
AVFrame frame,
const AVPacket pkt 
)

Set various frame properties from the provided packet.

Definition at line 1395 of file decode.c.

Referenced by ff_decode_frame_props(), libdav1d_receive_frame(), and libxevd_return_frame().

◆ ff_decode_frame_props()

int ff_decode_frame_props ( AVCodecContext avctx,
AVFrame frame 
)

◆ ff_decode_get_hw_frames_ctx()

int ff_decode_get_hw_frames_ctx ( AVCodecContext avctx,
enum AVHWDeviceType  dev_type 
)

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.

Definition at line 1064 of file decode.c.

Referenced by ff_d3d12va_decode_init(), ff_dxva2_decode_init(), ff_vaapi_decode_init(), ff_vdpau_common_init(), and ff_vk_decode_init().

◆ ff_attach_decode_data()

int ff_attach_decode_data ( AVFrame frame)

◆ ff_copy_palette()

int ff_copy_palette ( void *  dst,
const AVPacket src,
void *  logctx 
)

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.

Definition at line 1886 of file decode.c.

Referenced by cinepak_decode_frame(), decode_frame(), gdv_decode_frame(), idcin_decode_frame(), imx_decode_frame(), ipvideo_decode_frame(), msrle_decode_frame(), msvideo1_decode_frame(), qtrle_decode_frame(), raw_decode(), rscc_decode_frame(), and smc_decode_frame().

◆ ff_set_dimensions()

int ff_set_dimensions ( AVCodecContext s,
int  width,
int  height 
)

Check that the provided frame dimensions are valid and set them on the codec context.

Definition at line 94 of file utils.c.

Referenced by alloc_buffers(), aom_decode(), apply_param_change(), avcodec_open2(), avs_decode_init(), bmp_decode_frame(), cdg_decode_init(), cdxl_decode_frame(), cfhd_decode(), clv_decode_init(), cmv_process_header(), codec_reinit(), cri_decode_frame(), dds_decode(), decode_blocks(), decode_fint(), decode_frame(), decode_frame_header(), decode_frame_headers(), decode_header(), decode_idat_chunk(), decode_init(), decode_seq_header(), dirac_decode_data_unit(), dnxhd_decode_frame(), dvbsub_parse_display_definition_segment(), dvdsub_parse_extradata(), dvvideo_decode_frame(), execute_code(), ff_h263_decode_frame(), ff_ivi_decode_frame(), ff_mjpeg_decode_sof(), ff_pnm_decode_header(), ff_rv34_decode_frame(), ff_vc1_decode_entry_point(), ff_vc1_decode_sequence_header(), ff_vp56_decode_frame(), ffmal_update_format(), fits_decode_frame(), flashsv_decode_frame(), g2m_decode_frame(), gem_decode_frame(), get_siz(), gif_decode_frame(), h261_decode_frame(), hdr_decode_frame(), hqa_decode_frame(), init_image(), libdav1d_parse_extradata(), libdav1d_receive_frame(), libjxl_receive_frame(), librsvg_decode_frame(), libuavs3d_decode_frame(), libxevd_image_copy(), magy_decode_frame(), mediacodec_dec_parse_format(), mimic_decode_frame(), mpeg4_decode_header(), mpeg_decode_postinit(), mpegvideo_extract_headers(), mvc_decode_init(), parse_presentation_segment(), pcx_decode_frame(), pgx_decode_frame(), photocd_decode_frame(), pix_decode_frame(), pixlet_decode_frame(), process_frame_obj(), ptx_decode_frame(), qoi_decode_frame(), rl2_decode_init(), rv20_decode_picture_header(), seqvideo_decode_init(), set_context_with_sequence(), set_output_format(), sga_decode_frame(), sunrast_decode_frame(), svc_decode_frame(), svq1_decode_frame(), svq3_decode_init(), tdsc_parse_tdsf(), tgq_decode_frame(), tgv_decode_frame(), tqi_decode_frame(), truemotion1_decode_header(), truemotion2rt_decode_header(), txd_decode_frame(), update_context_with_frame_header(), update_dimensions(), update_size(), v4l2_handle_event(), vbn_decode_frame(), vp56_size_changed(), vp5_parse_header(), vp6_parse_header(), vp8_lossless_decode_frame(), vpx_decode(), vqa_decode_init(), wbmp_decode_frame(), xbm_decode_frame(), xpm_decode_frame(), and xwd_decode_frame().

◆ ff_set_sar()

int ff_set_sar ( AVCodecContext avctx,
AVRational  sar 
)

◆ ff_get_format()

int ff_get_format ( AVCodecContext avctx,
const enum AVPixelFormat fmt 
)

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 last entry in the list must be the most accurate software format. If it is not possible to decode to software, AVCodecContext.sw_pix_fmt must be set before calling this function.

Definition at line 1220 of file decode.c.

Referenced by cuvid_decode_init(), decode_frame_header(), ff_mediacodec_dec_init(), ff_mjpeg_decode_sof(), ffmmal_init_decoder(), get_format(), get_pixel_format(), h263_get_format(), mpeg_get_pixelformat(), qsv_decode_preinit(), update_size(), and vc1_get_format().

◆ ff_get_buffer()

int ff_get_buffer ( AVCodecContext avctx,
AVFrame frame,
int  flags 
)

Get a buffer for a frame.

This is a wrapper around AVCodecContext.get_buffer() and should be used instead calling get_buffer() directly.

Definition at line 1569 of file decode.c.

Referenced by ac3_decode_frame(), adpcm_decode_frame(), adx_decode_frame(), alloc_frame(), amrnb_decode_frame(), amrwb_decode_frame(), aom_decode(), apac_decode(), ape_decode_frame(), aptx_decode_frame(), atrac1_decode_frame(), atrac3_decode_frame(), atrac3al_decode_frame(), atrac3p_decode_frame(), atrac9_decode_frame(), aura_decode_frame(), avui_decode_frame(), bfi_decode_frame(), binkaudio_receive_frame(), bmp_decode_frame(), bmv_aud_decode_frame(), bonk_decode(), cdg_decode_frame(), cdxl_decode_frame(), cinaudio_decode_frame(), cmv_decode_frame(), cng_decode_frame(), cook_decode_frame(), copy_output(), cuvid_output_frame(), cyuv_decode_frame(), dds_decode(), decode_frame(), decode_pic(), decode_tag(), dfa_decode_frame(), dfpwm_dec_frame(), dpcm_decode_frame(), dss_sp_decode_frame(), eightsvx_decode_frame(), escape124_decode_frame(), escape130_decode_frame(), evrc_decode_frame(), execute_code(), fastaudio_decode(), fdk_aac_decode_frame(), ff_dca_lbr_filter_frame(), ff_dca_xll_filter_frame(), ff_ivi_decode_frame(), ff_mjpeg_decode_sof(), ff_thread_get_buffer(), ff_thread_get_ext_buffer(), ff_twinvq_decode_frame(), ff_vp56_decode_frame(), ffat_decode(), ffmal_copy_frame(), filter_frame(), filter_frame_fixed(), filter_frame_float(), fits_decode_frame(), frame_configure_elements(), ftr_decode_frame(), g2m_decode_frame(), g722_decode_frame(), g723_1_decode_frame(), gdv_decode_frame(), gem_decode_frame(), get_buffer(), get_buffer_with_edge(), gsm_decode_frame(), hcom_decode(), hnm_decode_frame(), hq_decode_frame(), hqa_decode_frame(), idcin_decode_frame(), ilbc_decode_frame(), imc_decode_frame(), init_frames(), ipu_decode_frame(), ipvideo_decode_frame(), lead_decode_frame(), libcelt_dec_decode(), libcodec2_decode(), libgsm_decode_frame(), libjxl_receive_frame(), libopus_decode(), librsvg_decode_frame(), libspeex_decode_frame(), libuavs3d_decode_frame(), libxevd_image_copy(), m101_decode_frame(), mace_decode_frame(), mediacodec_wrap_sw_buffer(), misc4_decode(), mp_decode_frame(), mpc7_decode_frame(), mpc8_decode_frame(), msp2_decode_frame(), mss2_decode_frame(), mvc_decode_frame(), mxpeg_decode_frame(), oggvorbis_decode_frame(), on2avc_decode_frame(), opus_decode_packet(), osq_receive_frame(), output_data(), paf_audio_decode(), pcm_bluray_decode_frame(), pcm_decode_frame(), pcm_dvd_decode_frame(), pcx_decode_frame(), pgx_decode_frame(), pix_decode_frame(), pnm_decode_frame(), ptx_decode_frame(), qcelp_decode_frame(), qdm2_decode_frame(), qdmc_decode_frame(), qoa_decode_frame(), ra144_decode_frame(), ra288_decode_frame(), reget_buffer_internal(), rka_decode_frame(), rl2_decode_frame(), s302m_decode_frame(), sbc_decode_frame(), sga_decode_frame(), sgirle_decode_frame(), shorten_decode_frame(), sipr_decode_frame(), siren_decode(), smka_decode_frame(), speedhq_decode_frame(), speex_decode_frame(), sunrast_decode_frame(), svc_decode_frame(), svq1_decode_frame(), synth_superframe(), tdsc_decode_frame(), tgq_decode_frame(), tgv_decode_frame(), thread_get_buffer_internal(), tmv_decode_frame(), tqi_decode_frame(), truemotion2rt_decode_frame(), truespeech_decode_frame(), txd_decode_frame(), v308_decode_frame(), v408_decode_frame(), vbn_decode_frame(), vcr1_decode_frame(), vmdaudio_decode_frame(), vmdvideo_decode_frame(), vorbis_decode_frame(), vpx_decode(), wavarc_decode(), wavesynth_decode(), wma_decode_superframe(), wmapro_decode_packet(), ws_snd_decode_frame(), xan_decode_frame(), xbm_decode_frame(), xface_decode_frame(), xma_decode_packet(), xpm_decode_frame(), xwd_decode_frame(), y216_decode_frame(), y41p_decode_frame(), yuv4_decode_frame(), zero12v_decode_frame(), and zerocodec_decode_frame().

◆ ff_reget_buffer()

int ff_reget_buffer ( AVCodecContext avctx,
AVFrame frame,
int  flags 
)

◆ ff_side_data_update_matrix_encoding()

int ff_side_data_update_matrix_encoding ( AVFrame frame,
enum AVMatrixEncoding  matrix_encoding 
)

Add or update AV_FRAME_DATA_MATRIXENCODING side data.

Definition at line 124 of file utils.c.

Referenced by ac3_decode_frame(), ff_dca_core_filter_frame(), ff_dca_lbr_filter_frame(), ff_dca_xll_filter_frame(), and output_data().

◆ ff_hwaccel_frame_priv_alloc()

int ff_hwaccel_frame_priv_alloc ( AVCodecContext avctx,
void **  hwaccel_picture_private 
)

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).

Parameters
avctxThe codec context
hwaccel_picture_privatePointer to return hwaccel_picture_private
Returns
0 on success, < 0 on error

Definition at line 1901 of file decode.c.

Referenced by alloc_frame(), alloc_picture(), av1_frame_alloc(), vp8_alloc_frame(), and vp9_frame_alloc().

◆ ff_get_coded_side_data()

const AVPacketSideData* ff_get_coded_side_data ( const AVCodecContext avctx,
enum AVPacketSideDataType  type 
)

Get side data of the given type from a decoding context.

Definition at line 1358 of file decode.c.

Referenced by av1_decode_init(), ff_decode_frame_props(), hevc_decode_init(), and libdav1d_init().

◆ ff_frame_new_side_data()

int ff_frame_new_side_data ( const AVCodecContext avctx,
AVFrame frame,
enum AVFrameSideDataType  type,
size_t  size,
AVFrameSideData **  sd 
)

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.

Definition at line 1819 of file decode.c.

Referenced by cri_decode_frame(), decode_frame(), ff_mjpeg_decode_frame_from_buf(), h264_export_frame_props(), mpeg_field_start(), populate_avctx_color_fields(), set_side_data(), tiff_decode_tag(), and webp_decode_frame().

◆ ff_frame_new_side_data_from_buf()

int ff_frame_new_side_data_from_buf ( const AVCodecContext avctx,
AVFrame frame,
enum AVFrameSideDataType  type,
AVBufferRef **  buf,
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.

Definition at line 1838 of file decode.c.

Referenced by export_itut_t35(), libdav1d_receive_frame(), libjxl_receive_frame(), mpeg_field_start(), and set_side_data().

◆ ff_decode_mastering_display_new()

int ff_decode_mastering_display_new ( const AVCodecContext avctx,
AVFrame frame,
struct AVMasteringDisplayMetadata **  mdm 
)

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.

Definition at line 1862 of file decode.c.

Referenced by export_metadata(), ff_h2645_sei_to_frame(), libdav1d_receive_frame(), and populate_avctx_color_fields().

◆ ff_decode_content_light_new()

int ff_decode_content_light_new ( const AVCodecContext avctx,
AVFrame frame,
struct AVContentLightMetadata **  clm 
)

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.

Definition at line 1874 of file decode.c.

Referenced by export_metadata(), ff_h2645_sei_to_frame(), libdav1d_receive_frame(), and populate_avctx_color_fields().