I'm going to be building myself a new Linux HTPC for my Westinghouse LVM-37W3 and I would like something that is capable of playing the most CPU intensive HD video (x/h.264 from what I can gather) at full 1080P resolution reliably and with plenty of leeway so that, under normal conditions, stuttering or frame dropping does not occur. Does anyone have experience with this?

From what I can gather, as there is no hardware h.264 acceleration that is supported by Linux, so my real limiting factor will be the CPU, not the video card. (And I assume that XvMC won't be worth the bother, since if the system can reliably play HD H.264 then MPEG2 should be cake.)

In windows, using VLC, the most aggressive h.264 1080P content I can find tops off one of my Core 2 Duo E6400's cores at 50 percent and stutters during fast scenes. (Less aggressive, which I assume means less compression) content plays stably around 30-40 percent. 1080p VC-1 and MPEG2 work beautifully in the 30-40s as well without any hardware acceleration.

I'm thinking that I should opt for the fastest, individual core I can afford. Would something like a Pentium D 3.0 or 3.4 cut it? My budget is going to be around $400-600.

As far as I know, the only h264 decoder for Linux is currently the one which is part of libavcodec, i.e. ffmpeg. It doesn't take advantage of any GPU hardware acceleration, so even my 8800GTS/320 doesn't allow me to watch 1080i/p h264 content at the moment. I'm running a Core2 Duo E6600, with 2GB of RAM. The CPU simply can't keep up with decoding the video, even if the file is in a RAM disk, audio is disabled, etc.

Libavcodec's h264 decoder doesn't have XvMC support; I'm pretty sure the reason for this is the lack of support for quarter-pixel motion vectors required by h264, so unless XvMC changes, you can't use it for h264.

I'm currently very tempted to hack libavcodec and MPlayer so that the most expensive parts of the decoding can be done in Vertex/Pixel shaders, but I'm limited by my spare time, and it's a substantial amount of work. I see no technical reason why it wouldn't work though.

Before spending a ton on the hardware, I suggest finding someone who has it to confirm it works. I doubt that a Netburst-based CPU (Pentium 4, Pentium D) will outperform a decent Core2, but I'd be happy to be corrected. In fact, I don't think any x86 other than the Core2 Quad outperforms the Core2 Duo in the vast majority of integer code at the moment, and that's what h264 uses. Floating-point speed is irrelevant in this case, so I suspect AMD CPUs are completely out of the question. I'd look up some SPEC_int benchmarks to find the fastest x86 integer CPU. I suspect it's the highest-clocked Core2 you can find. I suppose you could overclock that, which might just be enough for 1080p h264 decoding. (but then you'll have noise issues which isn't so great for the living room)

I hate to say it, but you're probably best off with either MacOS X or Windows when it comes to watching HD h264 streams for now. Of course, if you can live with the delay of a couple of hours, you could transcode the h264 to MPEG2 with some insane bitrate, which, I suspect, would work fine, and you could even use XvMC!

You can trying buying a copy of CoreAVC, there are some patches for Mplayer for CoreAVC support for the latest version. Of course I'm sure GPU support doesn't work, but it's about 20% better, I'm actually able to play full speed some 720p content on my lowly 1.1ghz duron.

As far as I know, the only h264 decoder for Linux is currently the one which is part of libavcodec, i.e. ffmpeg. It doesn't take advantage of any GPU hardware acceleration, so even my 8800GTS/320 doesn't allow me to watch 1080i/p h264 content at the moment. I'm running a Core2 Duo E6600, with 2GB of RAM. The CPU simply can't keep up with decoding the video, even if the file is in a RAM disk, audio is disabled, etc.

Libavcodec's h264 decoder doesn't have XvMC support; I'm pretty sure the reason for this is the lack of support for quarter-pixel motion vectors required by h264, so unless XvMC changes, you can't use it for h264.

I'm currently very tempted to hack libavcodec and MPlayer so that the most expensive parts of the decoding can be done in Vertex/Pixel shaders, but I'm limited by my spare time, and it's a substantial amount of work. I see no technical reason why it wouldn't work though.

Before spending a ton on the hardware, I suggest finding someone who has it to confirm it works. I doubt that a Netburst-based CPU (Pentium 4, Pentium D) will outperform a decent Core2, but I'd be happy to be corrected. In fact, I don't think any x86 other than the Core2 Quad outperforms the Core2 Duo in the vast majority of integer code at the moment, and that's what h264 uses. Floating-point speed is irrelevant in this case, so I suspect AMD CPUs are completely out of the question. I'd look up some SPEC_int benchmarks to find the fastest x86 integer CPU. I suspect it's the highest-clocked Core2 you can find. I suppose you could overclock that, which might just be enough for 1080p h264 decoding. (but then you'll have noise issues which isn't so great for the living room)

I hate to say it, but you're probably best off with either MacOS X or Windows when it comes to watching HD h264 streams for now. Of course, if you can live with the delay of a couple of hours, you could transcode the h264 to MPEG2 with some insane bitrate, which, I suspect, would work fine, and you could even use XvMC!

~phil

What a beast 1080i/p H.264 content is if it won't even play on your system! You've definitely given me a lot to think about. I guess I just need to have some patience and wait for the code to mature so that I can actually afford a system that can do the playback I want it to. My setup is such that my Windows machine is very near my TV so I might just run an extra VGA cable (why oh why did I buy a 7600 GS without dual DVI?) and use that machine whenever I want to watch HD stuff for now. Thanks for your great info!

Quote:

You can trying buying a copy of CoreAVC, there are some patches for Mplayer for CoreAVC support for the latest version. Of course I'm sure GPU support doesn't work, but it's about 20% better, I'm actually able to play full speed some 720p content on my lowly 1.1ghz duron.

I might give that a shot. I've come across CoreAVC quite a few times in my internet travels but I wasn't aware that anyone got it working under Linux. Definitely a good thing! (Now if someone could only reverse engineer it...) My current mythtv system is an Athlon XP 2600+ which I'm sure wouldn't be enough to run 1080P even with CoreAVC, but definitely 720p considering your 1.1 GHz can do it. Thanks for the heads up!