summaryrefslogtreecommitdiff
path: root/src/gen75_vpp_vebox.c
diff options
context:
space:
mode:
authorSirisha Muppavarapu <sirisha.muppavarapu@intel.com>2014-12-15 11:25:19 -0800
committerXiang, Haihao <haihao.xiang@intel.com>2015-01-09 14:50:27 +0800
commit757c510a1f32b14eff60d4fce0d42bf9b91952a7 (patch)
treef3c77be7f0ac0511c43bdd173b8c88e762ff0049 /src/gen75_vpp_vebox.c
parentf5dc5f33961147372643f598faeae5c842cfa27d (diff)
STDE Optimization: Added code to support optimization of Skin Tone Detection and Enhancement for stde factors 0(default), 3, 6, and 9.
(cherry picked from commit 4711da55046cb9bd3fa26065869d8c3bcfc9f39a)
Diffstat (limited to 'src/gen75_vpp_vebox.c')
-rw-r--r--src/gen75_vpp_vebox.c435
1 files changed, 356 insertions, 79 deletions
diff --git a/src/gen75_vpp_vebox.c b/src/gen75_vpp_vebox.c
index 2ae9813..a7b7cc6 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,86 +666,25 @@ 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)