Ping! I would appreciate some input on this, a bit more digging and I have found that in the lavf-ogg flake test the last packet that arrives and causes the regression with my patch looks like this: (AVPacket) $1 = { buf = 0x0000000103105740 pts = 44100 dts = 44100 data = 0x0000000103105c40 "" size = 0 stream_index = 0 flags = 1 side_data = 0x0000000103105ff0 side_data_elems = 1 duration = 0 pos = -1 convergence_duration = 0 }
Currently wondering if it makes sense to send in a zero sized packet for muxing or not. That is, should I try to fix that or should I rather try to compensate for this in oggenc.c? Regards, Peter > On 15 Dec 2020, at 14:35, Peter Zebühr <pe...@zebuhr.se> wrote: > > Hello! > > I have stumbled on an issue with the ogg page termination in a probably quite > rare case. > If the last page ends up full (255 segments) and the last packet that is > written is an even multiple of 255 that needs to be terminated with a lacing > value of zero that spills over to the next page, then oggenc fails to write a > last page that contains the zero lacing value and libogg will fail to detect > the end of stream when parsing the produced file. Example: > > 1. Last page contains 253 segments > 2. Packet arrives of size 510 bytes > 3. Packet it split into three segments of sizes [255, 255, 0] > 4. Page gets the two segments [255, 255] and is full > 5. A new page is created containing only the [0] lacing value but no actual > data > 6. The last page is ignored when completing the stream (because it contains 0 > bytes data) > > I have a patch that fixes this (attached) in the case that I had, but... one > of the fate tests fail (lavf-ogg) and I need some help to reason about what > the right thing to do is. > > The reason the test fails is because one extra page is created with my patch. > The reason why one extra page is created is because the previous page is > completed as it hits the "pref_duration" setting of 1 second > (https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/oggenc.c#L261) and > then write_packet is called with one more packet of size 0 bytes. The > questions I have are: > * Is this a reasonable regression? From the ogg perspective it sounds kind of > reasonable that a 0 byte packet would result in a 0 byte segment but not sure > why write_packet is even called with a 0 byte packet. > * If this is not a reasonable regression I could either: > - short circuit handling of a 0 byte packet and make it produce 0 segments > in ogg_buffer_data > OR > - tweak the logic in the proposed change to write_trailer to make it > consider segment_count only if the ongoing page is a continuation of the > previous page. > (OR perhaps it is another bug that a 0 byte packet is written?) > > > / Peter > > <0001-Fix-ogg-page-termination-on-even-last-packets.patch>_______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".