2012-07-04, 07:37
There might still be issues with broken 4.1 content that actually should be decoded as 5.1 content... with the va driver if you have the 5.1 support enabled, you could fix it with this patch... I suspect that a similar patch could be worked into this...
Phoronix Backtrack
Ubuntu Pastebin link
Code:
diff --git a/src/xvba_buffer.c b/src/xvba_buffer.c
index 4facbbf..d8012a3 100644
--- a/src/xvba_buffer.c
+++ b/src/xvba_buffer.c
@@ -368,23 +368,18 @@ translate_VAPictureParameterBufferH264(
obj_context->picture_height
);
- /* Check for H.264 content over [email protected] */
+ /* Check for wrongly coded H264 Level 41 files
+ adjust profile to Level 51 when reframes are too many
+ */
unsigned int num_ref_frames = pic_param->num_ref_frames;
- if (profile == XVBA_H264_HIGH && level > 41) {
- if (!driver_data->warn_h264_over_hp_l41) {
- driver_data->warn_h264_over_hp_l41 = 1;
- xvba_information_message(
- "driver does not support H.264 content over [email protected]. "
- "Please upgrade.\n"
- );
- }
+ if (profile == XVBA_H264_HIGH && level == 41) {
- /* Use fail-safe values (lower ref frames) */
+ /* Increase Level to decode pseudo Level 41 as Level 51 */
const unsigned int mbw = pic_param->picture_width_in_mbs_minus1 + 1;
const unsigned int mbh = (obj_context->picture_height + 15) / 16;
const unsigned int max_ref_frames = 12288 * 1024 / (mbw * mbh * 384);
if (max_ref_frames < num_ref_frames)
- num_ref_frames = max_ref_frames;
+ level = 51;
}
XVBABufferDescriptor * const xvba_buffer = obj_surface->pic_desc_buffer;
Ubuntu Pastebin link