[FFmpeg-devel] [PATCH 04/13] fftools/ffmpeg: stop using AVStream.side_data
James Almer
jamrial at gmail.com
Thu Jul 20 23:34:06 EEST 2023
Signed-off-by: James Almer <jamrial at gmail.com>
---
fftools/ffmpeg_demux.c | 11 +++++++----
fftools/ffmpeg_enc.c | 25 +++++++++++++------------
fftools/ffmpeg_filter.c | 5 ++++-
fftools/ffmpeg_mux_init.c | 16 ++++++++--------
4 files changed, 32 insertions(+), 25 deletions(-)
diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index 48edbd7f6b..f984df7c95 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -482,8 +482,8 @@ static int input_packet_process(Demuxer *d, DemuxMsg *msg, AVPacket *src)
/* add the stream-global side data to the first packet */
if (ds->nb_packets == 1) {
- for (int i = 0; i < ist->st->nb_side_data; i++) {
- AVPacketSideData *src_sd = &ist->st->side_data[i];
+ for (int i = 0; i < ist->st->codecpar->side_data_set.nb_side_data; i++) {
+ AVPacketSideData *src_sd = &ist->st->codecpar->side_data_set.side_data[i];
uint8_t *dst_data;
if (src_sd->type == AV_PKT_DATA_DISPLAYMATRIX)
@@ -979,6 +979,7 @@ static int add_display_matrix_to_stream(const OptionsContext *o,
AVFormatContext *ctx, InputStream *ist)
{
AVStream *st = ist->st;
+ AVPacketSideData *sd;
double rotation = DBL_MAX;
int hflip = -1, vflip = -1;
int hflip_set = 0, vflip_set = 0, rotation_set = 0;
@@ -995,12 +996,14 @@ static int add_display_matrix_to_stream(const OptionsContext *o,
if (!rotation_set && !hflip_set && !vflip_set)
return 0;
- buf = (int32_t *)av_stream_new_side_data(st, AV_PKT_DATA_DISPLAYMATRIX, sizeof(int32_t) * 9);
- if (!buf) {
+ sd = av_packet_new_side_data_to_set(&st->codecpar->side_data_set, AV_PKT_DATA_DISPLAYMATRIX,
+ sizeof(int32_t) * 9);
+ if (!sd) {
av_log(ist, AV_LOG_FATAL, "Failed to generate a display matrix!\n");
return AVERROR(ENOMEM);
}
+ buf = (int32_t *)sd->data;
av_display_rotation_set(buf,
rotation_set ? -(rotation) : -0.0f);
diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c
index 96424272bf..f12024dff5 100644
--- a/fftools/ffmpeg_enc.c
+++ b/fftools/ffmpeg_enc.c
@@ -428,12 +428,12 @@ int enc_open(OutputStream *ost, AVFrame *frame)
for (i = 0; i < ost->enc_ctx->nb_coded_side_data; i++) {
const AVPacketSideData *sd_src = &ost->enc_ctx->coded_side_data[i];
- uint8_t *dst_data;
+ AVPacketSideData *sd_dst;
- dst_data = av_stream_new_side_data(ost->st, sd_src->type, sd_src->size);
- if (!dst_data)
+ sd_dst = av_packet_new_side_data_to_set(&ost->par_in->side_data_set, sd_src->type, sd_src->size);
+ if (!sd_dst)
return AVERROR(ENOMEM);
- memcpy(dst_data, sd_src->data, sd_src->size);
+ memcpy(sd_dst->data, sd_src->data, sd_src->size);
}
}
@@ -446,15 +446,16 @@ int enc_open(OutputStream *ost, AVFrame *frame)
*/
if (ist) {
int i;
- for (i = 0; i < ist->st->nb_side_data; i++) {
- AVPacketSideData *sd = &ist->st->side_data[i];
- if (sd->type != AV_PKT_DATA_CPB_PROPERTIES) {
- uint8_t *dst = av_stream_new_side_data(ost->st, sd->type, sd->size);
- if (!dst)
+ for (i = 0; i < ist->st->codecpar->side_data_set.nb_side_data; i++) {
+ AVPacketSideData *sd_src = &ist->st->codecpar->side_data_set.side_data[i];
+ if (sd_src->type != AV_PKT_DATA_CPB_PROPERTIES) {
+ AVPacketSideData *sd_dst = av_packet_new_side_data_to_set(&ost->par_in->side_data_set,
+ sd_src->type, sd_src->size);
+ if (!sd_dst)
return AVERROR(ENOMEM);
- memcpy(dst, sd->data, sd->size);
- if (ist->autorotate && sd->type == AV_PKT_DATA_DISPLAYMATRIX)
- av_display_rotation_set((int32_t *)dst, 0);
+ memcpy(sd_dst->data, sd_src->data, sd_src->size);
+ if (ist->autorotate && sd_src->type == AV_PKT_DATA_DISPLAYMATRIX)
+ av_display_rotation_set((int32_t *)sd_dst->data, 0);
}
}
}
diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index 925b5116cc..33bc96c8dd 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -1383,11 +1383,14 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
// TODO: insert hwaccel enabled filters like transpose_vaapi into the graph
if (ist->autorotate && !(desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) {
+ AVPacketSideData *sd = NULL;
int32_t *displaymatrix = ifp->displaymatrix;
double theta;
if (!ifp->displaymatrix_present)
- displaymatrix = (int32_t *)av_stream_get_side_data(ist->st, AV_PKT_DATA_DISPLAYMATRIX, NULL);
+ sd = av_packet_get_side_data_from_set(&ist->st->codecpar->side_data_set, AV_PKT_DATA_DISPLAYMATRIX);
+ if (sd)
+ displaymatrix = (int32_t *)sd->data;
theta = get_rotation(displaymatrix);
if (fabs(theta - 90) < 1.0) {
diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c
index 86521417ec..eb5dcf6543 100644
--- a/fftools/ffmpeg_mux_init.c
+++ b/fftools/ffmpeg_mux_init.c
@@ -1041,24 +1041,24 @@ static int streamcopy_init(const Muxer *mux, OutputStream *ost)
}
}
- for (int i = 0; i < ist->st->nb_side_data; i++) {
- const AVPacketSideData *sd_src = &ist->st->side_data[i];
- uint8_t *dst_data;
+ for (int i = 0; i < ist->st->codecpar->side_data_set.nb_side_data; i++) {
+ const AVPacketSideData *sd_src = &ist->st->codecpar->side_data_set.side_data[i];
+ AVPacketSideData *sd_dst;
- dst_data = av_stream_new_side_data(ost->st, sd_src->type, sd_src->size);
- if (!dst_data) {
+ sd_dst = av_packet_new_side_data_to_set(&ost->st->codecpar->side_data_set, sd_src->type, sd_src->size);
+ if (!sd_dst) {
ret = AVERROR(ENOMEM);
goto fail;
}
- memcpy(dst_data, sd_src->data, sd_src->size);
+ memcpy(sd_dst->data, sd_src->data, sd_src->size);
}
#if FFMPEG_ROTATION_METADATA
if (ost->rotate_overridden) {
- uint8_t *sd = av_stream_new_side_data(ost->st, AV_PKT_DATA_DISPLAYMATRIX,
+ AVPacketSideData *sd = av_packet_new_side_data_to_set(&ost->st->codecpar->side_data_set, AV_PKT_DATA_DISPLAYMATRIX,
sizeof(int32_t) * 9);
if (sd)
- av_display_rotation_set((int32_t *)sd, -ost->rotate_override_value);
+ av_display_rotation_set((int32_t *)sd->data, -ost->rotate_override_value);
}
#endif
--
2.41.0
More information about the ffmpeg-devel
mailing list