Commit 289f02f9 authored by Michael Niedermayer's avatar Michael Niedermayer

avformat/utils: Inject global side data into first packet.

This fixes replaygain handling in ffplay and probably other applications.
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent a31547ce
...@@ -1040,6 +1040,11 @@ typedef struct AVStream { ...@@ -1040,6 +1040,11 @@ typedef struct AVStream {
uint8_t dts_ordered; uint8_t dts_ordered;
uint8_t dts_misordered; uint8_t dts_misordered;
/**
* Internal data to inject global side data
*/
int global_side_data_injected;
} AVStream; } AVStream;
AVRational av_stream_get_r_frame_rate(const AVStream *s); AVRational av_stream_get_r_frame_rate(const AVStream *s);
......
...@@ -1526,6 +1526,25 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt) ...@@ -1526,6 +1526,25 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
} }
st->skip_samples = 0; st->skip_samples = 0;
} }
if (!st->global_side_data_injected) {
for (i = 0; i < st->nb_side_data; i++) {
AVPacketSideData *src_sd = &st->side_data[i];
uint8_t *dst_data;
if (av_packet_get_side_data(pkt, src_sd->type, NULL))
continue;
dst_data = av_packet_new_side_data(pkt, src_sd->type, src_sd->size);
if (!dst_data) {
av_log(s, AV_LOG_WARNING, "Couldnt inject global side data\n");
continue;
}
memcpy(dst_data, src_sd->data, src_sd->size);
}
st->global_side_data_injected = 1;
}
} }
if (ret >= 0 && !(s->flags & AVFMT_FLAG_KEEP_SIDE_DATA)) if (ret >= 0 && !(s->flags & AVFMT_FLAG_KEEP_SIDE_DATA))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment