Log in

View Full Version : Cyberlink h264 decoder always flagging content as "interlaced"!? (HUGE bug?)


TheShadowRunner
12th September 2008, 18:32
Hey All,
I discovered on oddity when using Cyberlink h264 decoder, cl264dec.ax.

It seems to be always reporting the InterlaceFormat to the renderer as "Interleaved Bob Only", regardless if the source is really interlaced or not!!

I use a .mkv sample which contains a h264 1280x688 progressive video stream for my tests.

I build the exact same graphs in graphedit and only change the h264 decoder. Here's the data from the VMR9 input0 pin:

cyberlink (in soft mode) + VMR9: Interlace format: Interleaved Bob Only (wtf?)
cyberlink (dxva mode) + VMR9: Interlace format: Interleaved Bob Only (wtf?)
coreavc + VMR9: Interlace format: Frames
ffdshow + VMR9: Interlace format: Frames
MPC Video decoder + VMR9 : Interlace format: Frames

Indeed the Interlace format should always be "Frames" since the video stream is progressive to start with, right?

So why on earth is Cyberlink trying to force the renderer to deinterlace when the content is progressive to begin with? :confused:
Could you guys using the Cyberlink h264 decoder check on your system if it always passes "Interleaved Bob Only" (=video is interlaced) info to the Renderer pin?

I tested with Cyberlink ver. 1.99.0.1405 & ver. 2.2.0.725, exact same results with both.

Thanks for any insight!
Later,

TSR

wozio
15th September 2008, 08:29
This is usuall behaviour of any know for me decoder, they always passes video format as interlaced (I checked cyberlink, both mpeg2 and h264, coreavc, ffdshow with option set). Basically problem is that decoders don't know if stream is interlaced or not without actually playing it, so they set stream as interlaced but later passes progressive individual frames and drivers doesn't deinterlace them. Check on what actual rate video is played. On my system mkvs are played in 24 fps, if they would be deinterlaced they would be played on 48 fps.

TheShadowRunner
15th September 2008, 18:30
wozio, you answer is much appreciated. I never thought it would work like this but was assuming the decoder had a way to detect if stream was interlaced or not and pass this info to the renderer.

"I checked cyberlink, both mpeg2 and h264, coreavc, ffdshow with option set"

Well I just can't reproduce. With FFDshow or CoreAVC, even if i force deinterlacing in both of them and then build the graph,they will report "Frames"; not ""Interleaved Bob Only" like the Cyberlink decoder always does...

Any idea why? (i enabled "Deinterlacing" in FFDshow and "agressive deinterlacing" in CoreAVC for the tests)
See you,

TSR

wozio
15th September 2008, 19:59
In coreavc you should set directshow deinterlacing and in ffdshow set interlace flag on output and method to bob. As you can see any of them have option auto.

TheShadowRunner
16th September 2008, 00:23
Wozio, I was able to reproduce it with CoreAVC and FFDShow, thank you.
However something strange remains with Cyberlinkh264dec.

If I build a graph with CoreAVC 1.8, indeed the properties of the videoinput pin of the renderer say "Interleaved Bob Only".
But the moment you start playing the movie and check the properties of the pin again, it will have changed to "Frames".
(it works like this even if you force Deinterlacing to "Bob" or "Hardware" in CoreAVC.)

With Cyberlink, it always says "Interleaved Bob Only", prior and during movie playback. And even if you select "Force Weave" in the codec property page!

That's why i think something is wrong with Cyberlink.

I discovered this with ReClock, it gives info on the video stream. With CoreAVC/FFDshow the stream is reported as progressive.
As soon as I use Cyberlink (tried both Soft & DXVA), it is reported as Interlaced, which is incorrect.
I'm pretty sure this is not a ReClock issue. It seems that Cyberlink just won't bother updating the interlace flag to "Frames" like the other decoders do.
See you,

TSR

wozio
16th September 2008, 14:28
Yes, probably Cyberlinks doesn't renegotiate connection after it receives progressive frames from stream as CoreAVC does. But this is not really problem since each individual frame is marked as interlaced or progressive regardless connection media type. So renderer knows exactly if to deinterlace frame or not (to be precise not renderer but video card driver, which actualy deinterlaces stream).

TheShadowRunner
16th September 2008, 15:17
Nice additional infos!

> But this is not really problem since each individual frame is marked as interlaced or progressive regardless connection media type.

Ah finally I understand how it works, the mystery is solved.
Thanks for your help. I can live with Cyberlink not renegociating connection and reporting wrong info, as long as the output is correct ^^
See you,

TSR