• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

hardware/intel/intel-driver


Commit MetaInfo

Revision7bb3658212f49a6f8d3d61b0b5d161aca73c2a11 (tree)
Time2015-07-06 16:08:54
AuthorZhao Yakui <yakui.zhao@inte...>
CommiterZhao, Yakui

Log Message

H264: Use macroblock pair to calculate H264 decoding parameter under MBAFF flag

Based on the H264 spec the macroblock pair should be used to calculate
the corresponding parameters under MBAFF.(mb-adaptive frame-field).
Otherwise the wrong parameter is sent to GPU HW.

Fix the GPU hang issue in https://bugs.freedesktop.org/show_bug.cgi?id=91207

Tested-by: Lim, Siew Hoon <siew.hoon.lim@intel.com>
Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>

Change Summary

Incremental Difference

--- a/src/gen6_mfd.c
+++ b/src/gen6_mfd.c
@@ -551,14 +551,20 @@ gen6_mfd_avc_slice_state(VADriverContextP ctx,
551551 }
552552 }
553553
554- first_mb_in_slice = slice_param->first_mb_in_slice << mbaff_picture;
554+ first_mb_in_slice = slice_param->first_mb_in_slice;
555555 slice_hor_pos = first_mb_in_slice % width_in_mbs;
556556 slice_ver_pos = first_mb_in_slice / width_in_mbs;
557557
558+ if (mbaff_picture)
559+ slice_ver_pos = slice_ver_pos << 1;
560+
558561 if (next_slice_param) {
559- first_mb_in_next_slice = next_slice_param->first_mb_in_slice << mbaff_picture;
562+ first_mb_in_next_slice = next_slice_param->first_mb_in_slice;
560563 next_slice_hor_pos = first_mb_in_next_slice % width_in_mbs;
561564 next_slice_ver_pos = first_mb_in_next_slice / width_in_mbs;
565+
566+ if (mbaff_picture)
567+ next_slice_ver_pos = next_slice_ver_pos << 1;
562568 } else {
563569 next_slice_hor_pos = 0;
564570 next_slice_ver_pos = height_in_mbs;
--- a/src/gen75_mfd.c
+++ b/src/gen75_mfd.c
@@ -862,14 +862,20 @@ gen75_mfd_avc_slice_state(VADriverContextP ctx,
862862 num_ref_idx_l1 = slice_param->num_ref_idx_l1_active_minus1 + 1;
863863 }
864864
865- first_mb_in_slice = slice_param->first_mb_in_slice << mbaff_picture;
865+ first_mb_in_slice = slice_param->first_mb_in_slice;
866866 slice_hor_pos = first_mb_in_slice % width_in_mbs;
867867 slice_ver_pos = first_mb_in_slice / width_in_mbs;
868868
869+ if (mbaff_picture)
870+ slice_ver_pos = slice_ver_pos << 1;
871+
869872 if (next_slice_param) {
870- first_mb_in_next_slice = next_slice_param->first_mb_in_slice << mbaff_picture;
873+ first_mb_in_next_slice = next_slice_param->first_mb_in_slice;
871874 next_slice_hor_pos = first_mb_in_next_slice % width_in_mbs;
872875 next_slice_ver_pos = first_mb_in_next_slice / width_in_mbs;
876+
877+ if (mbaff_picture)
878+ next_slice_ver_pos = next_slice_ver_pos << 1;
873879 } else {
874880 next_slice_hor_pos = 0;
875881 next_slice_ver_pos = height_in_mbs / (1 + !!pic_param->pic_fields.bits.field_pic_flag);
--- a/src/gen7_mfd.c
+++ b/src/gen7_mfd.c
@@ -556,14 +556,20 @@ gen7_mfd_avc_slice_state(VADriverContextP ctx,
556556 num_ref_idx_l1 = slice_param->num_ref_idx_l1_active_minus1 + 1;
557557 }
558558
559- first_mb_in_slice = slice_param->first_mb_in_slice << mbaff_picture;
559+ first_mb_in_slice = slice_param->first_mb_in_slice;
560560 slice_hor_pos = first_mb_in_slice % width_in_mbs;
561561 slice_ver_pos = first_mb_in_slice / width_in_mbs;
562562
563+ if (mbaff_picture)
564+ slice_ver_pos = slice_ver_pos << 1;
565+
563566 if (next_slice_param) {
564- first_mb_in_next_slice = next_slice_param->first_mb_in_slice << mbaff_picture;
567+ first_mb_in_next_slice = next_slice_param->first_mb_in_slice;
565568 next_slice_hor_pos = first_mb_in_next_slice % width_in_mbs;
566569 next_slice_ver_pos = first_mb_in_next_slice / width_in_mbs;
570+
571+ if (mbaff_picture)
572+ next_slice_ver_pos = next_slice_ver_pos << 1;
567573 } else {
568574 next_slice_hor_pos = 0;
569575 next_slice_ver_pos = height_in_mbs / (1 + !!pic_param->pic_fields.bits.field_pic_flag);
--- a/src/gen8_mfd.c
+++ b/src/gen8_mfd.c
@@ -625,14 +625,19 @@ gen8_mfd_avc_slice_state(VADriverContextP ctx,
625625 num_ref_idx_l1 = slice_param->num_ref_idx_l1_active_minus1 + 1;
626626 }
627627
628- first_mb_in_slice = slice_param->first_mb_in_slice << mbaff_picture;
628+ first_mb_in_slice = slice_param->first_mb_in_slice;
629629 slice_hor_pos = first_mb_in_slice % width_in_mbs;
630630 slice_ver_pos = first_mb_in_slice / width_in_mbs;
631631
632+ if (mbaff_picture)
633+ slice_ver_pos = slice_ver_pos << 1;
632634 if (next_slice_param) {
633- first_mb_in_next_slice = next_slice_param->first_mb_in_slice << mbaff_picture;
635+ first_mb_in_next_slice = next_slice_param->first_mb_in_slice;
634636 next_slice_hor_pos = first_mb_in_next_slice % width_in_mbs;
635637 next_slice_ver_pos = first_mb_in_next_slice / width_in_mbs;
638+
639+ if (mbaff_picture)
640+ next_slice_ver_pos = next_slice_ver_pos << 1;
636641 } else {
637642 next_slice_hor_pos = 0;
638643 next_slice_ver_pos = height_in_mbs / (1 + !!pic_param->pic_fields.bits.field_pic_flag);