[FFmpeg-devel] Re: [PATCH 1/3] avcodec/avpacket: add av_packet_resize()
Anton Khirnov
anton at khirnov.net
Sun Mar 14 17:51:44 EET 2021
Quoting James Almer (2021-03-14 16:35:48)
> On 3/14/2021 7:34 AM, Anton Khirnov wrote:
> > Quoting James Almer (2021-03-12 18:24:47)
> >>
> >> The padding exists AFAIK because something, like an optimized bitstream
> >> reader that tries to process several bytes at the same time, may end up
> >> reading or writing pass the reported end of the buffer.
> >> That means that if reading and it's not all zeroes, it could in theory
> >> have unpredictable results. Hence why everything always zeroes the
> >> padding, even av_shrink_packet().
> >
> > On that topic, I've been wondering about eliminating this requirement.
> > Does anyone know which code it is precisely that depends on the padding
> > being zeroed? Is this optimization really worth it?
> > It seems rather silly to jump through all these hoops for an
> > unmeasurable benefit in one decoder.
>
> Some subtitle demuxers didn't look at pkt->size and depended on the
> padding to work as a 0 string terminator, but Marton fixed that in a
> patchset sent yesterday.
>
> Beyond that, i think the v210 decoder and encoder read and write past
> the end of the buffer if you use the simd functions.
>
> >
> > It would also give us zero-copy packet splitting.
> >
> > [...]
> >
> > I would suggest keeping av_shrink_packet() with a big scary warning that
> > it does not check for ownership and it is the caller's responsibility to
> > ensure that writing to the packet is safe.
>
> If we can remove the zero-padding requirement, or the padding
> requirement altogether, then that would no longer be necessary.
I don't think we can remove the padding requirement completely, as the
bitstream reader reads 4- or 8-byte chunks at once. I imagine changing
that into single-byte reads would be very slow.
But getting rid of the zeroing requirement should be more feasible.
--
Anton Khirnov
More information about the ffmpeg-devel
mailing list