[vlc-devel] Software decoding in Hardware buffers

John Cox jc at kynesim.co.uk
Thu Aug 8 14:55:10 CEST 2019


Hi

>Hi,
>
>I'm looking at the display pool in the MMAL (Raspberry Pi) code and it 
>seems that we currently decode in "hardware" buffers all the time. 
>Either the opaque decoder output, or when the decoder outputs I420.
>
>In push we don't to use this pool anymore. The decoder will have its own 
>pool and the display just deals with what it receives. In most cases 
>that means copy from CPU memory to GPU memory. This doesn't work with a 
>SoC like on the Raspberry Pi where the memory is the same and can be 
>used directly from both sides.
>
>The idea was that current decoders continue to use decoder_NewPicture() 
>as they used to. The pictures will come from the decoder video context, 
>if there's one (hardware decoding) or from picture_NewFromFormat() if 
>there's none. That means for MMAL we would need to copy this CPU 
>allocated memory to the "port allocated" memory (the mechanism to get 
>buffers from the display). Given the limited resources that's something 
>we should avoid.
>
>I think we should have a third way to provide pictures: from the decoder 
>device. In case of software decoding there is no video context, but 
>there is a decoder device (A MMAL one in this case).
>
>So I suggests the decoders (and filters) get their output picture from:
>- the video context if there is one
>- the decoder device if there is one and it has an allocator
>- picture_NewFromFormat() otherwise
>
>Any opinion ?

I'm sure I should have an opinion (though I'm not quite sure what it is)
as I've get a substantial rewrite of the entire mmal/Pi modules here,
which I intended to upstream when it was a bit closer to finished (it is
currently in use as the default shipped with Pis but there is still work
to be done before I want it set in anything like stone).

There are a number of buffer types that I now pass around - all
currently declared as h/w though some have a plausible existance in CPU
memory (though not all).  All end up as having their actual allocation
done at source (decoder or filter) though the picture_t is allocated by
the "display"

Regards

JC


More information about the vlc-devel mailing list