diff -rup xvba-video.orig/src/xvba_buffer.c xvba-video/src/xvba_buffer.c --- xvba-video.orig/src/xvba_buffer.c 2011-09-08 03:17:28.000000000 +0200 +++ xvba-video/src/xvba_buffer.c 2012-07-03 21:38:04.851465348 +0200 @@ -368,23 +368,18 @@ translate_VAPictureParameterBufferH264( obj_context->picture_height ); - /* Check for H.264 content over HP@L4.1 */ + /* Check for wrongly coded H264 Level 41 + 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 HP@L4.1. " - "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;