avformat/utils: Move av_stream_*_side_data API to avformat.c

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
release/5.1
Andreas Rheinhardt 3 years ago
parent 703318b350
commit 21f3dc0ad6
  1. 68
      libavformat/avformat.c
  2. 68
      libavformat/utils.c

@ -128,3 +128,71 @@ void avformat_free_context(AVFormatContext *s)
av_freep(&s->url);
av_free(s);
}
uint8_t *av_stream_get_side_data(const AVStream *st,
enum AVPacketSideDataType type, size_t *size)
{
for (int i = 0; i < st->nb_side_data; i++) {
if (st->side_data[i].type == type) {
if (size)
*size = st->side_data[i].size;
return st->side_data[i].data;
}
}
if (size)
*size = 0;
return NULL;
}
int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type,
uint8_t *data, size_t size)
{
AVPacketSideData *sd, *tmp;
for (int i = 0; i < st->nb_side_data; i++) {
sd = &st->side_data[i];
if (sd->type == type) {
av_freep(&sd->data);
sd->data = data;
sd->size = size;
return 0;
}
}
if (st->nb_side_data + 1U > FFMIN(INT_MAX, SIZE_MAX / sizeof(*tmp)))
return AVERROR(ERANGE);
tmp = av_realloc_array(st->side_data, st->nb_side_data + 1, sizeof(*tmp));
if (!tmp) {
return AVERROR(ENOMEM);
}
st->side_data = tmp;
st->nb_side_data++;
sd = &st->side_data[st->nb_side_data - 1];
sd->type = type;
sd->data = data;
sd->size = size;
return 0;
}
uint8_t *av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type,
size_t size)
{
int ret;
uint8_t *data = av_malloc(size);
if (!data)
return NULL;
ret = av_stream_add_side_data(st, type, data, size);
if (ret < 0) {
av_freep(&data);
return NULL;
}
return data;
}

@ -1091,74 +1091,6 @@ error:
return ret;
}
uint8_t *av_stream_get_side_data(const AVStream *st,
enum AVPacketSideDataType type, size_t *size)
{
for (int i = 0; i < st->nb_side_data; i++) {
if (st->side_data[i].type == type) {
if (size)
*size = st->side_data[i].size;
return st->side_data[i].data;
}
}
if (size)
*size = 0;
return NULL;
}
int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type,
uint8_t *data, size_t size)
{
AVPacketSideData *sd, *tmp;
for (int i = 0; i < st->nb_side_data; i++) {
sd = &st->side_data[i];
if (sd->type == type) {
av_freep(&sd->data);
sd->data = data;
sd->size = size;
return 0;
}
}
if (st->nb_side_data + 1U > FFMIN(INT_MAX, SIZE_MAX / sizeof(*tmp)))
return AVERROR(ERANGE);
tmp = av_realloc_array(st->side_data, st->nb_side_data + 1, sizeof(*tmp));
if (!tmp) {
return AVERROR(ENOMEM);
}
st->side_data = tmp;
st->nb_side_data++;
sd = &st->side_data[st->nb_side_data - 1];
sd->type = type;
sd->data = data;
sd->size = size;
return 0;
}
uint8_t *av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type,
size_t size)
{
int ret;
uint8_t *data = av_malloc(size);
if (!data)
return NULL;
ret = av_stream_add_side_data(st, type, data, size);
if (ret < 0) {
av_freep(&data);
return NULL;
}
return data;
}
void ff_format_io_close_default(AVFormatContext *s, AVIOContext *pb)
{
avio_close(pb);

Loading…
Cancel
Save