benwaggoner
21st March 2009, 17:51
I guess I could do some tests in Media Player Classic, and record CPU utilization over a span of time (anyone know how to do this?) - say a 10 minute test clip that has most of the "magic" turned on - i.e. 4+ mixed references, 8x8dct, CABAC, no slices, high-ish bitrate, 1080p. I'd have to stay consistent with my renderer of course, but I'd vary the DirectShow decoder and core affinity.
I could then compare that to playing the same MP4 in Firefox or IE 7 with Silverlight 3 and Flash...
I'd definitely be interested in that!
We're continuing to tune SL3 playback performance, so I'm always happy to get more data from the field.
Do the Flash and Silverlight decoders support multithreading (I'd assume and sincerely hope so!)? Also, last I checked with Flash, a huge bottleneck was with full screen playback (i.e. scaling and rendering). I see this shouldn't be an issue with Silverlight, as it can easily offload this process to GPU. Very cool! I wonder how it compares to EVR or Haali Renderer? Gosh I'm getting a little excited now!
Yes, the Silverlight H.264 decoder is multithreaded, as is Silveright itself pretty pervasively. We're continuing to tune that, particularly for highly multicore systems.
To measure pure decoder performance, you're probably best off just not scaling anything. In Silverlight, this will activate our "Fast Path" behavior.
http://on10.net/blogs/benwagg/Building-high-performance-Silverlight-Media-Players/
I also wonder how Flash and Sliverlight handle PC / TV luma levels? This has been a cause for endless rage for me... I'm sure it has something to do with a combination of GPU manufacturer, OS, and driver version... :p
In Silverlight 3 final, we'll support the correct matricies for 601 and 709, with our conversion mapping Y'=16 to R'G'B'=0 and Y'=235 to R'G'B'=255. The latest beta release has a few...issues in that area, but they're already fixed in our current builds. However that'll have no impact on decode performance, just my own personal embarassement.
601/709 is determined by frame size, with width >1024 or height >576 as the trigger for 709.
Thoughts? I'll wait to formulate a decent plan instead of flailing about looking like an idiot as I did with this initial test :D
I'd also recommend using content with burned-in timecode and using something like FRAPS to capture frames getting played back. It's better to play 100% of frames at 80% CPU load than 85% of frames at 40% CPU load :).
I could then compare that to playing the same MP4 in Firefox or IE 7 with Silverlight 3 and Flash...
I'd definitely be interested in that!
We're continuing to tune SL3 playback performance, so I'm always happy to get more data from the field.
Do the Flash and Silverlight decoders support multithreading (I'd assume and sincerely hope so!)? Also, last I checked with Flash, a huge bottleneck was with full screen playback (i.e. scaling and rendering). I see this shouldn't be an issue with Silverlight, as it can easily offload this process to GPU. Very cool! I wonder how it compares to EVR or Haali Renderer? Gosh I'm getting a little excited now!
Yes, the Silverlight H.264 decoder is multithreaded, as is Silveright itself pretty pervasively. We're continuing to tune that, particularly for highly multicore systems.
To measure pure decoder performance, you're probably best off just not scaling anything. In Silverlight, this will activate our "Fast Path" behavior.
http://on10.net/blogs/benwagg/Building-high-performance-Silverlight-Media-Players/
I also wonder how Flash and Sliverlight handle PC / TV luma levels? This has been a cause for endless rage for me... I'm sure it has something to do with a combination of GPU manufacturer, OS, and driver version... :p
In Silverlight 3 final, we'll support the correct matricies for 601 and 709, with our conversion mapping Y'=16 to R'G'B'=0 and Y'=235 to R'G'B'=255. The latest beta release has a few...issues in that area, but they're already fixed in our current builds. However that'll have no impact on decode performance, just my own personal embarassement.
601/709 is determined by frame size, with width >1024 or height >576 as the trigger for 709.
Thoughts? I'll wait to formulate a decent plan instead of flailing about looking like an idiot as I did with this initial test :D
I'd also recommend using content with burned-in timecode and using something like FRAPS to capture frames getting played back. It's better to play 100% of frames at 80% CPU load than 85% of frames at 40% CPU load :).