mirror of https://git.ffmpeg.org/ffmpeg.git
avutil/frame: split side data removal out to non-AVFrame function
This will make it possible to reuse logic in further commits.
This commit is contained in:
parent
28783896dc
commit
d2bb22f6d5
|
@ -83,6 +83,21 @@ void av_frame_side_data_free(AVFrameSideData ***sd, int *nb_sd)
|
||||||
wipe_side_data(sd, 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 *av_frame_alloc(void)
|
||||||
{
|
{
|
||||||
AVFrame *frame = av_malloc(sizeof(*frame));
|
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)
|
void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type)
|
||||||
{
|
{
|
||||||
for (int i = frame->nb_side_data - 1; i >= 0; i--) {
|
remove_side_data(&frame->side_data, &frame->nb_side_data, type);
|
||||||
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--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *av_frame_side_data_name(enum AVFrameSideDataType type)
|
const char *av_frame_side_data_name(enum AVFrameSideDataType type)
|
||||||
|
|
Loading…
Reference in New Issue