avutil/frame: split side data removal out to non-AVFrame function

This will make it possible to reuse logic in further commits.

Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
Jan Ekström 2023-08-27 23:40:37 +03:00 committed by Paul B Mahol
parent a720d58aa1
commit 25479808c8

View File

@ -83,6 +83,21 @@ void av_frame_side_data_free(AVFrameSideData ***sd, int *nb_sd)
wipe_side_data(sd, nb_sd);
}
static void remove_side_data(AVFrameSideData ***sd, int *nb_side_data,
const enum AVFrameSideDataType type)
{
for (int i = *nb_side_data - 1; i >= 0; i--) {
AVFrameSideData *entry = ((*sd)[i]);
if (entry->type != type)
continue;
free_side_data(&entry);
((*sd)[i]) = ((*sd)[*nb_side_data - 1]);
(*nb_side_data)--;
}
}
AVFrame *av_frame_alloc(void)
{
AVFrame *frame = av_malloc(sizeof(*frame));
@ -801,14 +816,7 @@ int av_frame_copy(AVFrame *dst, const AVFrame *src)
void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type)
{
for (int i = frame->nb_side_data - 1; i >= 0; i--) {
AVFrameSideData *sd = frame->side_data[i];
if (sd->type == type) {
free_side_data(&frame->side_data[i]);
frame->side_data[i] = frame->side_data[frame->nb_side_data - 1];
frame->nb_side_data--;
}
}
remove_side_data(&frame->side_data, &frame->nb_side_data, type);
}
const char *av_frame_side_data_name(enum AVFrameSideDataType type)