[Libva] mpeg4 decoding

Xiang, Haihao haihao.xiang at intel.com
Tue Jan 13 20:41:28 PST 2015


On Mon, 2015-01-12 at 21:38 +0000, Varga, Michael wrote:
> Haihao,
> 
> I use modulo_time_base when reconstructing the header VideoObjectPlane header.

Does HW need the VOP header for decode ?

>  When modulo_time_base is left blank frames do not decode correctly. 
> From your comment your refering to vop_time_increment? 

No, I didn't refer to vop_time_increment or modulo_time_base. I just
wonder it is really needed to add a new field in
VAPictureParameterBufferMPEG4 or not.


> For gpu acceleration vop_time_increment can be set to "0" AFAIK.
> 
> MPEG 4 spec:
> modulo_time_base: This value represents the local time base in one second resolution units (1000 milliseconds).
> It consists of a number of consecutive '1' followed by a '0'. Each '1' represents a duration of one second that have
> elapsed. For I-, S(GMC)-, and P-VOPs of a non scalable bitstream and the base layer of a scalable bitstream, the
> number of '1's indicate the number of seconds elapsed since the synchronization point marked by time_code of
> the previous GOV header or by modulo_time_base of the previously decoded I-, S(GMC)-, or P-VOP, in decoding
> order. For B-VOP of a non scalable bitstream and a base layer of a scalable bitstream, the number of '1's indicates
> the number of seconds elapsed since the synchronization point marked in the previous GOV header, or I-VOP,
> S(GMC)-VOP, or P-VOP, in display order. For I-, P-, or B-VOPs of enhancement layer of scalable bitstream, the
> number of '1's indicate the number of seconds elapsed since the synchronization point marked in the previous
> GOV header, I-VOP, P-VOP, or B-VOP, in display order.
> 
> vop_time_increment: This value represents the absolute vop_time_increment from the synchronization point
> marked by the modulo_time_base measured in the number of clock ticks. It can take a value in the range of
> [0,vop_time_increment_resolution). The number of bits representing the value is calculated as the minimum
> number of unsigned integer bits required to represent the above range. The local time base in the units of seconds
> is recovered by dividing this value by the vop_time_increment_resolution.
> 
> 
> Thanks
> Michael
> 
> -----Original Message-----
> From: Xiang, Haihao [mailto:haihao.xiang at intel.com] 
> Sent: Wednesday, January 07, 2015 11:51 PM
> To: Varga, Michael
> Cc: Emil Velikov; Gwenole Beauchesne; libva at lists.freedesktop.org
> Subject: Re: [Libva] mpeg4 decoding
> 
> 
> Hi Michael,
> 
>  I am not familiar with MPEG4, I think modulo_time_base is used to calculate time stamp etc, is modulo_time_base really required for HW decode ?
> 
> Thanks
> Haihao
> 
> > I only really need modulo_time_base. It would appear from my tests vop_time_increment is not needed. Could modulo_time_base be added?
> > 
> > The core issue I am having is I need the modulo_time_base value. I noticed Gwenole wrote a reference driver which wraps vdpau. Gwenole's code has a fix to compute modulo_time_base. I cannot use code from Gwenole's driver due to licensing issues, his code is GPL and MESA is MIT.
> > 
> > -----Original Message-----
> > From: Emil Velikov [mailto:emil.l.velikov at gmail.com]
> > Sent: Saturday, November 08, 2014 9:58 AM
> > To: Varga, Michael; Gwenole Beauchesne
> > Cc: emil.l.velikov at gmail.com; libva at lists.freedesktop.org
> > Subject: Re: [Libva] mpeg4 decoding
> > 
> > Hi guys.
> > 
> > Don't mean to be picky or anything but won't this change cause a non-backward compat ABI/API breakage ?
> > 
> > While adding modulo_time_base might be ok (highly dependant on the implementation which may use the vop_fields union without sanitising it), vop_time_increment is definitely going to cause issues.
> > 
> > 
> > Cheers,
> > Emil
> > 
> > On 31/10/14 14:32, Varga, Michael wrote:
> > > Hi Gwenole,
> > > 
> > > I double checked vop_time_increment and its not strictly needed, 
> > > setting this value to 0 works but if you'll add it I'll use anyway. 
> > > My patch is below. I declared modulo_time_base with 4 bits, the 
> > > MPEG4 spec does not specify an upper bound for the size of this 
> > > variable. If you think this is too big I can reduce it. Also, is 
> > > there anything you think I should know about your process for submitting patches? Thanks!
> > > :)
> > > 
> > > 
> > > From 44aeb5d81789c42404d6a2398ef06699aabc6d73 Mon Sep 17 00:00:00 
> > > 2001
> > > From: Michael Varga <Michael.Varga at amd.com>
> > > Date: Fri, 31 Oct 2014 08:58:34 -0500
> > > Subject: [PATCH] va: added two variables to
> > > VAPictureParameterBufferMPEG4
> > > 
> > > Added modulo_time_base and vop_time_increment so the VOP header may 
> > > be reconstructed if it has been truncated.
> > > 
> > > Signed-off-by: Michael Varga <Michael.Varga at amd.com>
> > > ---
> > >  va/va.h | 2 ++
> > >  1 file changed, 2 insertions(+)
> > > 
> > > diff --git a/va/va.h b/va/va.h
> > > index 01694a9..c21770c 100644
> > > --- a/va/va.h
> > > +++ b/va/va.h
> > > @@ -1312,12 +1312,14 @@ typedef struct _VAPictureParameterBufferMPEG4
> > >              unsigned int intra_dc_vlc_thr              : 3; 
> > >              unsigned int top_field_first               : 1; 
> > >              unsigned int alternate_vertical_scan_flag  : 1;
> > > +            unsigned int modulo_time_base              : 4;
> > >          } bits;
> > >          unsigned int value;
> > >      } vop_fields;
> > >      unsigned char vop_fcode_forward;
> > >      unsigned char vop_fcode_backward;
> > >      unsigned short vop_time_increment_resolution;
> > > +    unsigned short vop_time_increment;
> > >      /* short header related */
> > >      unsigned char num_gobs_in_vop;
> > >      unsigned char num_macroblocks_in_gob;
> > > 
> > 
> > _______________________________________________
> > Libva mailing list
> > Libva at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/libva
> 
> 




More information about the Libva mailing list