1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-04 22:03:09 +02:00

avformat/oggenc: don't discard empty packets with no side data

Theora signals "Output last frame again" with an empty packet.
To keep the behaviour of 18f24527eb of ignoring side data only packets, as
generated by the FLAC encoder to propagate updated extradata, also check for
pkt->side_data_size to choose wheter to mux the paket or not.

Fixes part of ticket #11451.

Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer
2025-02-13 19:47:45 -03:00
parent 261ec6c35e
commit 84d85e7ad4

View File

@ -241,6 +241,7 @@ static int ogg_buffer_data(AVFormatContext *s, AVStream *st,
len = FFMIN(size, segments*255); len = FFMIN(size, segments*255);
page->segments[page->segments_count++] = len - (segments-1)*255; page->segments[page->segments_count++] = len - (segments-1)*255;
if (len)
memcpy(page->data+page->size, p, len); memcpy(page->data+page->size, p, len);
p += len; p += len;
size -= len; size -= len;
@ -690,7 +691,7 @@ static int ogg_write_packet(AVFormatContext *s, AVPacket *pkt)
int i; int i;
if (pkt) if (pkt)
return pkt->size ? ogg_write_packet_internal(s, pkt) : 0; return pkt->size || !pkt->side_data_elems ? ogg_write_packet_internal(s, pkt) : 0;
for (i = 0; i < s->nb_streams; i++) { for (i = 0; i < s->nb_streams; i++) {
OGGStreamContext *oggstream = s->streams[i]->priv_data; OGGStreamContext *oggstream = s->streams[i]->priv_data;
@ -710,7 +711,7 @@ static int ogg_write_trailer(AVFormatContext *s)
for (i = 0; i < s->nb_streams; i++) { for (i = 0; i < s->nb_streams; i++) {
OGGStreamContext *oggstream = s->streams[i]->priv_data; OGGStreamContext *oggstream = s->streams[i]->priv_data;
if (oggstream->page.size > 0) if (oggstream->page.segments_count)
ogg_buffer_page(s, oggstream); ogg_buffer_page(s, oggstream);
} }