[VDPAU] ffmpeg and HEVC: NumLongTermPicturesSlcieHeaderBits

Philip Langdale philipl at overt.org
Wed May 27 13:38:09 PDT 2015


On 2015-05-27 12:50, José Hiram Soltren wrote:

>> I've attached the trace from playing this file:
>> 
>> https://s3.amazonaws.com/x265.org/video/Tractor_500kbps_x265.mp4
> 
> This was an MP4 stream that I was able to demux using tsMuxer. 
> mplayer's
> -dumpvideo was not helpful here.
> 
> I was able to play this without any issues using our in house VDPAU 
> HEVC test
> player. For simplicity, the NVIDIA internal player only operates on 
> elementary
> streams, and presents video in decode versus display order. The 
> internal player
> is designed to address issues with the video hardware. Presentation 
> queue
> management is entirely in software and is the client's responsibility.
> 
> I generated two trace files when playing this for convenience:
> 
> tractor.txt.gz, with VDPAU_TRACE=1
> tractor.full.txt.gz, with VDPAU_TRACE=2
> 
> I'm looking for clues by comparing the two.
> 
> The first thing I notice is that mplayer/ffmpeg does not appear to pas 
> the "00
> 00 01" start code at the beginning of bitstreams in vdp_decoder_render. 
> I
> wonder if this is an issue.

I definitely pass the start code. Because when I didn't, things got 
really bad really
fast. :-)

> typedef VdpStatus VdpVideoMixerRender(
>     VdpVideoMixer                 mixer,
>     VdpOutputSurface              background_surface,
>     VdpRect const *               background_source_rect,
>     VdpVideoMixerPictureStructure current_picture_structure,
>     uint32_t                      video_surface_past_count,
>     VdpVideoSurface const *       video_surface_past,
>     VdpVideoSurface               video_surface_current,
>     uint32_t                      video_surface_future_count,
>     VdpVideoSurface const *       video_surface_future,
>     VdpRect const *               video_source_rect,
>     VdpOutputSurface              destination_surface,
>     VdpRect const *               destination_rect,
>     VdpRect const *               destination_video_rect,
>     uint32_t                      layer_count,
>     VdpLayer const *              layers
> );
> 
> Yours:
> 
> vdp_video_mixer_render(
> 	5,
> 	4294967295,
> 	NULL,
> 	0,
> 	2,
> 	{4294967295, 4294967295},
> 	10,
> 	1,
> 	{10},
> 	{0, 0, 1920, 1080},
> 	6,
> 	NULL,
> 	{0, 0, 1920, 1080},
> 	0,
> 	NULL)
> 
> Mine:
> 
> vdp_video_mixer_render(
> 	29,
> 	4294967295,
> 	NULL,
> 	0,
> 	0,
> 	NULL,
> 	5,
> 	0,
> 	NULL,
> 	NULL,
> 	21,
> 	{0, 0, 1920, 1080},
> 	{0, 0, 1920, 1080},
> 	0,
> 	NULL)
> 
> So it looks to me like you are passing in handles to video_surface_past 
> and
> video_surface_future. This is not correct. VdpVideoMixerRender should 
> just be
> showing standalone frames, not trying to blend past, present, and 
> future frames
> as it does for interlaced video.

Hmm. I may have run the trace with de-int turned on in mplayer, but I 
also ran it
with de-int turned off and it didn't help. Maybe mplayer sets the 
surfaces regardless,
but I thought it didn't. I'll double check.

Are you guys going to change how the ouput surface in constructed? I 
know we're discussing
presentation hacks here, but even get_bits on the output surface returns 
the interlaced
form - I tested the basic ffmpeg mode where it doesn't do any 
presentation at all and
just reads the surface back.

--phil


More information about the VDPAU mailing list