[Libva] [PATCH] STDE Optimization: Added code to support optimization of Skin Tone Detection and Enhancement for stde factors 0(default), 3, 6, and 9.

Sirisha Muppavarapu sirisha.muppavarapu at intel.com
Mon Dec 15 11:25:19 PST 2014


---
 src/gen75_vpp_vebox.c | 436 +++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 357 insertions(+), 79 deletions(-)

diff --git a/src/gen75_vpp_vebox.c b/src/gen75_vpp_vebox.c
index a5b8ca2..cb9e3eb 100644
--- a/src/gen75_vpp_vebox.c
+++ b/src/gen75_vpp_vebox.c
@@ -225,11 +225,349 @@ void hsw_veb_dndi_table(VADriverContextP ctx, struct intel_vebox_context *proc_c
         *p_table ++ = 0;         // parameters for hot pixel, 
 }
 
+//Set default values for STDE
+void set_std_table_default(struct intel_vebox_context *proc_ctx, unsigned int *p_table) {
+
+        //DWord 15
+        *p_table ++ = ( 0 << 31     |    // Reserved
+                        0x3F8 << 21 |    // SATB1 (10 bits, default 8, optimized value -8)
+                        31 << 14    |    // SATP3
+                        6 << 7      |    // SATP2
+                        0x7A );          // SATP1 (7 bits, default 6, optimized value -6)
+
+        //DWord 16
+        *p_table ++ = ( 0 << 31   |    // Reserved
+                        297 << 20 |    // SATS0
+                        124 << 10 |    // SATB3
+                        8 );           // SATB2
+
+        //DWord 17
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        297 << 11 |    // SATS2
+                        85 );          // SATS1
+
+        //DWord 18
+        *p_table ++ = ( 14 << 25    |    // HUEP3
+                        6 << 18     |    // HUEP2
+                        0x7A << 11  |    // HUEP1 (7 bits, default value -6 = 7Ah)
+                        256 );           // SATS3
+
+        //DWord 19
+        *p_table ++ = ( 0 << 30   |    // Reserved
+                        256 << 20 |    // HUEB3
+                        8 << 10   |    // HUEB2
+                        0x3F8 );       // HUEB1 (10 bits, default value 8, optimized value -8)
+
+        //DWord 20
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        85 << 11  |    // HUES1
+                        384 );         // HUES0
+
+        //DWord 21
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES3
+                        384 );         // HUES2
+
+        //DWord 22
+        *p_table ++ = ( 0 << 31   |    // Reserved
+                        0 << 21   |    // SATB1_DARK
+                        31 << 14  |    // SATP3_DARK
+                        31 << 7   |    // SATP2_DARK
+                        0x7B );        // SATP1_DARK (7 bits, default value -11 = FF5h, optimized value -5)
+
+        //DWord 23
+        *p_table ++ = ( 0 << 31   |    // Reserved
+                        305 << 20 |    // SATS0_DARK
+                        124 << 10 |    // SATB3_DARK
+                        124 );         // SATB2_DARK
+
+        //DWord 24
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // SATS2_DARK
+                        220 );         // SATS1_DARK
+
+        //DWord 25
+        *p_table ++ = ( 14 << 25  |    // HUEP3_DARK
+                        14 << 18  |    // HUEP2_DARK
+                        14 << 11  |    // HUEP1_DARK
+                        256 );         // SATS3_DARK
+
+        //DWord 26
+        *p_table ++ = ( 0 << 30   |    // Reserved
+                        56 << 20  |    // HUEB3_DARK
+                        56 << 10  |    // HUEB2_DARK
+                        56 );          // HUEB1_DARK
+
+        //DWord 27
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES1_DARK
+                        256 );         // HUES0_DARK
+
+        //DWord 28
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES3_DARK
+                        256 );         // HUES2_DARK
+}
+
+//Set values for STDE factor 3
+void set_std_table_3(struct intel_vebox_context *proc_ctx, unsigned int *p_table) {
+
+        //DWord 15
+        *p_table ++ = ( 0 << 31     |    // Reserved
+                        1016 << 21  |    // SATB1 (10 bits, default 8, optimized value 1016)
+                        31 << 14    |    // SATP3
+                        6 << 7      |    // SATP2
+                        122 );           // SATP1 (7 bits, default 6, optimized value 122)
+
+        //DWord 16
+        *p_table ++ = ( 0 << 31   |    // Reserved
+                        297 << 20 |    // SATS0
+                        124 << 10 |    // SATB3
+                        8 );           // SATB2
+
+        //DWord 17
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        297 << 11 |    // SATS2
+                        85 );          // SATS1
+
+        //DWord 18
+        *p_table ++ = ( 14 << 25    |    // HUEP3
+                        6 << 18     |    // HUEP2
+                        122 << 11   |    // HUEP1 (7 bits, default value -6 = 7Ah, optimized 122)
+                        256 );           // SATS3
+
+        //DWord 19
+        *p_table ++ = ( 0 << 30   |    // Reserved
+                        56 << 20  |    // HUEB3 (default 256, optimized 56)
+                        8 << 10   |    // HUEB2
+                        1016 );        // HUEB1 (10 bits, default value 8, optimized value 1016)
+
+        //DWord 20
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        85 << 11  |    // HUES1
+                        384 );         // HUES0
+
+        //DWord 21
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES3
+                        384 );         // HUES2
+
+        //DWord 22
+        *p_table ++ = ( 0 << 31   |    // Reserved
+                        0 << 21   |    // SATB1_DARK
+                        31 << 14  |    // SATP3_DARK
+                        31 << 7   |    // SATP2_DARK
+                        123 );         // SATP1_DARK (7 bits, default value -11 = FF5h, optimized value 123)
+
+        //DWord 23
+        *p_table ++ = ( 0 << 31   |    // Reserved
+                        305 << 20 |    // SATS0_DARK
+                        124 << 10 |    // SATB3_DARK
+                        124 );         // SATB2_DARK
+
+        //DWord 24
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // SATS2_DARK
+                        220 );         // SATS1_DARK
+
+        //DWord 25
+        *p_table ++ = ( 14 << 25  |    // HUEP3_DARK
+                        14 << 18  |    // HUEP2_DARK
+                        14 << 11  |    // HUEP1_DARK
+                        256 );         // SATS3_DARK
+
+        //DWord 26
+        *p_table ++ = ( 0 << 30   |    // Reserved
+                        56 << 20  |    // HUEB3_DARK
+                        56 << 10  |    // HUEB2_DARK
+                        56 );          // HUEB1_DARK
+
+        //DWord 27
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES1_DARK
+                        256 );         // HUES0_DARK
+
+        //DWord 28
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES3_DARK
+                        256 );         // HUES2_DARK
+}
+
+//Set values for STDE factor 6
+void set_std_table_6(struct intel_vebox_context *proc_ctx, unsigned int *p_table) {
+
+        //DWord 15
+        *p_table ++ = ( 0 << 31     |    // Reserved
+                        0 << 21     |    // SATB1 (10 bits, default 8, optimized value 0)
+                        31 << 14    |    // SATP3
+                        31 << 7     |    // SATP2 (default 6, optimized 31)
+                        114 );           // SATP1 (7 bits, default 6, optimized value 114)
+
+        //DWord 16
+        *p_table ++ = ( 0 << 31   |    // Reserved
+                        467 << 20 |    // SATS0 (default 297, optimized 467)
+                        124 << 10 |    // SATB3
+                        124 );         // SATB2
+
+        //DWord 17
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // SATS2 (default 297, optimized 256)
+                        176 );         // SATS1
+
+        //DWord 18
+        *p_table ++ = ( 14 << 25    |    // HUEP3
+                        14 << 18    |    // HUEP2
+                        14 << 11    |    // HUEP1 (7 bits, default value -6 = 7Ah, optimized value 14)
+                        256 );           // SATS3
+
+        //DWord 19
+        *p_table ++ = ( 0 << 30   |    // Reserved
+                        56 << 20  |    // HUEB3
+                        56 << 10  |    // HUEB2
+                        56 );          // HUEB1 (10 bits, default value 8, optimized value 56)
+
+        //DWord 20
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES1
+                        256 );         // HUES0
+
+        //DWord 21
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES3
+                        256 );         // HUES2
+
+        //DWord 22
+        *p_table ++ = ( 0 << 31   |    // Reserved
+                        0 << 21   |    // SATB1_DARK
+                        31 << 14  |    // SATP3_DARK
+                        31 << 7   |    // SATP2_DARK
+                        123 );         // SATP1_DARK (7 bits, default value -11 = FF5h, optimized value 123)
+
+        //DWord 23
+        *p_table ++ = ( 0 << 31   |    // Reserved
+                        305 << 20 |    // SATS0_DARK
+                        124 << 10 |    // SATB3_DARK
+                        124 );         // SATB2_DARK
+
+        //DWord 24
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // SATS2_DARK
+                        220 );         // SATS1_DARK
+
+        //DWord 25
+        *p_table ++ = ( 14 << 25  |    // HUEP3_DARK
+                        14 << 18  |    // HUEP2_DARK
+                        14 << 11  |    // HUEP1_DARK
+                        256 );         // SATS3_DARK
+
+        //DWord 26
+        *p_table ++ = ( 0 << 30   |    // Reserved
+                        56 << 20  |    // HUEB3_DARK
+                        56 << 10  |    // HUEB2_DARK
+                        56 );          // HUEB1_DARK
+
+        //DWord 27
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES1_DARK
+                        256 );         // HUES0_DARK
+
+        //DWord 28
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES3_DARK
+                        256 );         // HUES2_DARK
+}
+
+//Set values for STDE factor 9
+void set_std_table_9(struct intel_vebox_context *proc_ctx, unsigned int *p_table) {
+
+        //DWord 15
+        *p_table ++ = ( 0 << 31     |    // Reserved
+                        0 << 21     |    // SATB1 (10 bits, default 8, optimized value 0)
+                        31 << 14    |    // SATP3
+                        31 << 7     |    // SATP2 (default 6, optimized 31)
+                        108 );           // SATP1 (7 bits, default 6, optimized value 108)
+
+        //DWord 16
+        *p_table ++ = ( 0 << 31   |    // Reserved
+                        721 << 20 |    // SATS0 (default 297, optimized 721)
+                        124 << 10 |    // SATB3
+                        124 );         // SATB2
+
+        //DWord 17
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // SATS2 (default 297, optimized 256)
+                        156 );         // SATS1 (default 176, optimized 156)
+
+        //DWord 18
+        *p_table ++ = ( 14 << 25    |    // HUEP3
+                        14 << 18    |    // HUEP2
+                        14 << 11    |    // HUEP1 (7 bits, default value -6 = 7Ah, optimized value 14)
+                        256 );           // SATS3
+
+        //DWord 19
+        *p_table ++ = ( 0 << 30   |    // Reserved
+                        56 << 20  |    // HUEB3
+                        56 << 10  |    // HUEB2
+                        56 );          // HUEB1 (10 bits, default value 8, optimized value 56)
+
+        //DWord 20
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES1
+                        256 );         // HUES0
+
+        //DWord 21
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES3
+                        256 );         // HUES2
+
+        //DWord 22
+        *p_table ++ = ( 0 << 31   |    // Reserved
+                        0 << 21   |    // SATB1_DARK
+                        31 << 14  |    // SATP3_DARK
+                        31 << 7   |    // SATP2_DARK
+                        123 );         // SATP1_DARK (7 bits, default value -11 = FF5h, optimized value 123)
+
+        //DWord 23
+        *p_table ++ = ( 0 << 31   |    // Reserved
+                        305 << 20 |    // SATS0_DARK
+                        124 << 10 |    // SATB3_DARK
+                        124 );         // SATB2_DARK
+
+        //DWord 24
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // SATS2_DARK
+                        220 );         // SATS1_DARK
+
+        //DWord 25
+        *p_table ++ = ( 14 << 25  |    // HUEP3_DARK
+                        14 << 18  |    // HUEP2_DARK
+                        14 << 11  |    // HUEP1_DARK
+                        256 );         // SATS3_DARK
+
+        //DWord 26
+        *p_table ++ = ( 0 << 30   |    // Reserved
+                        56 << 20  |    // HUEB3_DARK
+                        56 << 10  |    // HUEB2_DARK
+                        56 );          // HUEB1_DARK
+
+        //DWord 27
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES1_DARK
+                        256 );         // HUES0_DARK
+
+        //DWord 28
+        *p_table ++ = ( 0 << 22   |    // Reserved
+                        256 << 11 |    // HUES3_DARK
+                        256 );         // HUES2_DARK
+}
+
+
 void hsw_veb_iecp_std_table(VADriverContextP ctx, struct intel_vebox_context *proc_ctx)
 {
     unsigned int *p_table = proc_ctx->iecp_state_table.ptr + 0 ;
-    //VAProcFilterParameterBuffer * std_param =
-    //        (VAProcFilterParameterBuffer *) proc_ctx->filter_std;
+    int stde_factor = 0; //default value
+    VAProcFilterParameterBuffer * std_param = (VAProcFilterParameterBuffer *) proc_ctx->filter_iecp_std;
+    stde_factor = std_param->value;
 
     if(!(proc_ctx->filters_mask & VPP_IECP_STD_STE)){ 
         memset(p_table, 0, 29 * 4);
@@ -328,87 +666,27 @@ void hsw_veb_iecp_std_table(VADriverContextP ctx, struct intel_vebox_context *pr
                         1 << 11   |    // Skin_Types_Enable
                         0 );           // S3U
 
-        //DWord 15
-        *p_table ++ = ( 0 << 31     |    // Reserved
-                        0x3F8 << 21 |    // SATB1 (10 bits, default 8, optimized value -8)
-                        31 << 14    |    // SATP3
-                        6 << 7      |    // SATP2
-                        0x7A );          // SATP1 (7 bits, default 6, optimized value -6)
-
-        //DWord 16
-        *p_table ++ = ( 0 << 31   |    // Reserved
-                        297 << 20 |    // SATS0
-                        124 << 10 |    // SATB3
-                        8 );           // SATB2
-
-        //DWord 17
-        *p_table ++ = ( 0 << 22   |    // Reserved
-                        297 << 11 |    // SATS2
-                        85 );          // SATS1
-
-        //DWord 18
-        *p_table ++ = ( 14 << 25    |    // HUEP3
-                        6 << 18     |    // HUEP2
-                        0x7A << 11  |    // HUEP1 (7 bits, default value -6 = 7Ah)
-                        256 );           // SATS3
-
-        //DWord 19
-        *p_table ++ = ( 0 << 30   |    // Reserved
-                        256 << 20 |    // HUEB3
-                        8 << 10   |    // HUEB2
-                        0x3F8 );       // HUEB1 (10 bits, default value 8, optimized value -8)
-
-        //DWord 20
-        *p_table ++ = ( 0 << 22   |    // Reserved
-                        85 << 11  |    // HUES1
-                        384 );         // HUES
-
-        //DWord 21
-        *p_table ++ = ( 0 << 22   |    // Reserved
-                        256 << 11 |    // HUES3
-                        384 );         // HUES2
-
-        //DWord 22
-        *p_table ++ = ( 0 << 31   |    // Reserved
-                        0 << 21   |    // SATB1_DARK
-                        31 << 14  |    // SATP3_DARK
-                        31 << 7   |    // SATP2_DARK
-                        0x7B );        // SATP1_DARK (7 bits, default value -11 = FF5h, optimized value -5)
-
-        //DWord 23
-        *p_table ++ = ( 0 << 31   |    // Reserved
-                        305 << 20 |    // SATS0_DARK
-                        124 << 10 |    // SATB3_DARK
-                        124 );         // SATB2_DARK
-
-        //DWord 24
-        *p_table ++ = ( 0 << 22   |    // Reserved
-                        256 << 11 |    // SATS2_DARK
-                        220 );         // SATS1_DARK
-
-        //DWord 25
-        *p_table ++ = ( 14 << 25  |    // HUEP3_DARK
-                        14 << 18  |    // HUEP2_DARK
-                        14 << 11  |    // HUEP1_DARK
-                        256 );         // SATS3_DARK
+        //Set DWord 15 through DWord 28 in their respective methods.
+        switch(stde_factor) {
+            case 3:
+                set_std_table_3(proc_ctx, p_table);
+                break;
 
-        //DWord 26
-        *p_table ++ = ( 0 << 30   |    // Reserved
-                        56 << 20  |    // HUEB3_DARK
-                        56 << 10  |    // HUEB2_DARK
-                        56 );          // HUEB1_DARK
+            case 6:
+                set_std_table_6(proc_ctx, p_table);
+                break;
 
-        //DWord 27
-        *p_table ++ = ( 0 << 22   |    // Reserved
-                        256 << 11 |    // HUES1_DARK
-                        256 );         // HUES0_DARK
+            case 9:
+                set_std_table_9(proc_ctx, p_table);
+                break;
 
-        //DWord 28
-        *p_table ++ = ( 0 << 22   |    // Reserved
-                        256 << 11 |    // HUES3_DARK
-                        256 );         // HUES2_DARK
-    }
+            default: 
+                set_std_table_default(proc_ctx, p_table);
+                break;
+        }
+    }//end of else
 }
+  
 
 void hsw_veb_iecp_ace_table(VADriverContextP ctx, struct intel_vebox_context *proc_ctx)
 {
-- 
1.9.1



More information about the Libva mailing list