1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-10-30 23:18:11 +02:00

avcodec/avcodec: add helpers to convert between packet and frame side data

They will be used in following commits.

Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer
2025-10-18 20:07:15 -03:00
parent 0242cb36a5
commit 6879c8ee5d
4 changed files with 84 additions and 1 deletions

View File

@@ -2,6 +2,9 @@ The last version increases of all libraries were on 2025-03-28
API changes, most recent first:
2025-10-30 - xxxxxxxxxx - lavc 62.17.100 - packet.h
Add av_packet_side_data_from_frame() and av_packet_side_data_to_frame().
2025-10-xx - xxxxxxxxxx - lavu 60.16.100 - pixfmt.h
Add AVCOL_TRC_EXT_BASE, AVCOL_TRC_V_LOG,
AVCOL_PRI_EXT_BASE and AVCOL_PRI_V_GAMUT.

View File

@@ -815,3 +815,53 @@ int avcodec_get_supported_config(const AVCodecContext *avctx, const AVCodec *cod
return ff_default_get_supported_config(avctx, codec, config, flags, out, out_num);
}
}
int av_packet_side_data_from_frame(AVPacketSideData **psd, int *pnb_sd,
const AVFrameSideData *src, unsigned int flags)
{
AVPacketSideData *sd = NULL;
for (unsigned j = 0; ff_sd_global_map[j].packet < AV_PKT_DATA_NB; j++) {
if (ff_sd_global_map[j].frame != src->type)
continue;
sd = av_packet_side_data_new(psd, pnb_sd, ff_sd_global_map[j].packet,
src->size, 0);
if (!sd)
return AVERROR(ENOMEM);
memcpy(sd->data, src->data, src->size);
break;
}
if (!sd)
return AVERROR(EINVAL);
return 0;
}
int av_packet_side_data_to_frame(AVFrameSideData ***psd, int *pnb_sd,
const AVPacketSideData *src, unsigned int flags)
{
AVFrameSideData *sd = NULL;
for (unsigned j = 0; ff_sd_global_map[j].packet < AV_PKT_DATA_NB; j++) {
if (ff_sd_global_map[j].packet != src->type)
continue;
sd = av_frame_side_data_new(psd, pnb_sd, ff_sd_global_map[j].frame,
src->size, flags);
if (!sd)
return AVERROR(ENOMEM);
memcpy(sd->data, src->data, src->size);
break;
}
if (!sd)
return AVERROR(EINVAL);
return 0;
}

View File

@@ -489,6 +489,36 @@ void av_packet_side_data_remove(AVPacketSideData *sd, int *nb_sd,
*/
void av_packet_side_data_free(AVPacketSideData **sd, int *nb_sd);
struct AVFrameSideData;
/**
* Add a new packet side data entry to an array based on existing frame
* side data, if a matching type exists for packet side data.
*
* @param flags Currently unused. Must be 0.
* @retval >= 0 Success
* @retval AVERROR(EINVAL) The frame side data type does not have a matching
* packet side data type.
* @retval AVERROR(ENOMEM) Failed to add a side data entry to the array, or
* similar.
*/
int av_packet_side_data_from_frame(AVPacketSideData **sd, int *nb_sd,
const struct AVFrameSideData *src, unsigned int flags);
/**
* Add a new frame side data entry to an array based on existing packet
* side data, if a matching type exists for frame side data.
*
* @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags,
* or 0.
* @retval >= 0 Success
* @retval AVERROR(EINVAL) The packet side data type does not have a matching
* frame side data type.
* @retval AVERROR(ENOMEM) Failed to add a side data entry to the array, or
* similar.
*/
int av_packet_side_data_to_frame(struct AVFrameSideData ***sd, int *nb_sd,
const AVPacketSideData *src, unsigned int flags);
const char *av_packet_side_data_name(enum AVPacketSideDataType type);
/**

View File

@@ -29,7 +29,7 @@
#include "version_major.h"
#define LIBAVCODEC_VERSION_MINOR 16
#define LIBAVCODEC_VERSION_MINOR 17
#define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \