[FFmpeg-devel] [PATCH][VAAPI][2/6] Add common data structures and helpers

Michael Niedermayer michaelni
Thu Feb 26 14:38:20 CET 2009


On Thu, Feb 26, 2009 at 02:20:34PM +0100, Gwenole Beauchesne wrote:
> On Thu, 26 Feb 2009, Michael Niedermayer wrote:
> 
> > i think the struct placed in data[0] should be designed so that it does not
> > need any vaapi headers, that is contain pointers to structs instead of
> > vaapi structs.
> > then this "data[0] struct" can just be placed in avcodec.h and vaapi.h wont
> > be needed.
> 
> It's hard because VADisplay, VAConfigID, VAContextID, VASurfaceID are not 
> structs but either void * (VADisplay) or unsigned int (VA*ID). I think 

neither void * nor unsigned int would need a #include va.h


> users of the API shall not assume anything, in case either type is 
> changed. In practise, I don't see those changing anytime soon, though.
> 
> >> + * \brief This structure is used as a callback between the FFmpeg
> >> + * library and the client video application.
> >> + * This is created by the client application prior to calling the
> >> + * FFmpeg decode functions. You must call
> >> + * av_alloc_vaapi_render_state() to allocate this structure and fill
> >> + * both the surface and va_context fields.
> >> + */
> >> +struct vaapi_render_state {
> >> +    uint32_t    magic;                  ///< Magic number identifying the structure
> >> +    uint32_t    state;                  ///< Holds FF_VAAPI_STATE_* values
> >> +    struct vaapi_context *va_context;   ///< Pointer to display-dependent data
> >> +    VASurfaceID surface;                ///< Rendering surface, never changed
> >> +    // ... there are other (private) fields beyond this point
> >> +};
> >> +
> >> +/** \brief Allocate a new VA API render state structure. */
> >> +struct vaapi_render_state *av_alloc_vaapi_render_state(void);
> >
> > do i understand correctly that the use provided get_buffer() is called and
> > then the user calls av_alloc_vaapi_render_state()?
> > this is ugly
> > either lavc should already call av_alloc_vaapi_render_state() before
> > get_buffer()
> > or it should be done in default_get_buffer() and the users get_buffer() should
> > call default_get_buffer()
> > or allocate it by avpicture_alloc()
> > i dunno which of these would be cleanest ...
> 
> I agree that we shall not depend on a specific AVFrame::data[0] to stuff 
> the HW accelerator data in. We should not delegate the call to 
> default_get_buffer() to the user as he would certainly forget about it.
> 

> Why not use an hwaccel_data member for it? Though, in that case, data[0] 
> shall not be NULL for correct operation of h264.

iam ok with that.


> 
> Did you mean alloc_picture() in mpegvideo.c? It doesn't seem 
> avpicture_alloc() to be used anywhere but imgconvert.c.

i meant avpicture_alloc() but it was just a idea after 1sec thinking


[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Democracy is the form of government in which you can choose your dictator
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090226/91fc5dae/attachment.pgp>



More information about the ffmpeg-devel mailing list