trunk/hlsl/yiq_decode.fx
| r253017 | r253018 | |
| 1 | 1 | // license:BSD-3-Clause |
| 2 | | // copyright-holders:Ryan Holtz |
| 2 | // copyright-holders:Ryan Holtz,ImJezze |
| 3 | 3 | //----------------------------------------------------------------------------- |
| 4 | 4 | // YIQ Decode Effect |
| 5 | 5 | //----------------------------------------------------------------------------- |
| r253017 | r253018 | |
| 41 | 41 | struct VS_OUTPUT |
| 42 | 42 | { |
| 43 | 43 | float4 Position : POSITION; |
| 44 | | float4 Coord0 : TEXCOORD0; |
| 44 | float4 TexCoord : TEXCOORD0; |
| 45 | 45 | }; |
| 46 | 46 | |
| 47 | 47 | struct VS_INPUT |
| r253017 | r253018 | |
| 49 | 49 | float4 Position : POSITION; |
| 50 | 50 | float4 Color : COLOR0; |
| 51 | 51 | float2 TexCoord : TEXCOORD0; |
| 52 | | float2 Unused : TEXCOORD1; |
| 53 | 52 | }; |
| 54 | 53 | |
| 55 | 54 | struct PS_INPUT |
| 56 | 55 | { |
| 57 | | float4 Coord0 : TEXCOORD0; |
| 56 | float2 TexCoord : TEXCOORD0; |
| 58 | 57 | }; |
| 59 | 58 | |
| 60 | 59 | //----------------------------------------------------------------------------- |
| r253017 | r253018 | |
| 71 | 70 | |
| 72 | 71 | Output.Position = float4(Input.Position.xyz, 1.0f); |
| 73 | 72 | Output.Position.xy /= ScreenDims; |
| 74 | | Output.Position.y = 1.0f - Output.Position.y; |
| 75 | | Output.Position.xy -= 0.5f; |
| 76 | | Output.Position *= float4(2.0f, 2.0f, 1.0f, 1.0f); |
| 77 | | Output.Coord0.xy = Input.TexCoord; |
| 78 | | Output.Coord0.zw = float2(1.0f / SourceDims.x, 0.0f); |
| 73 | Output.Position.y = 1.0f - Output.Position.y; // flip y |
| 74 | Output.Position.xy -= 0.5f; // center |
| 75 | Output.Position.xy *= 2.0f; // zoom |
| 79 | 76 | |
| 77 | Output.TexCoord.xy = Input.TexCoord; |
| 78 | Output.TexCoord.xy += 0.5f / SourceDims; // half texel offset correction (DX9) |
| 79 | |
| 80 | 80 | return Output; |
| 81 | 81 | } |
| 82 | 82 | |
| r253017 | r253018 | |
| 84 | 84 | // YIQ Decode Pixel Shader |
| 85 | 85 | //----------------------------------------------------------------------------- |
| 86 | 86 | |
| 87 | | uniform float AValue = 0.0f; |
| 88 | | uniform float BValue = 0.0f; |
| 89 | | uniform float CCValue = 3.04183f; |
| 90 | | uniform float PValue = 1.0f; |
| 87 | uniform float AValue = 0.5f; |
| 88 | uniform float BValue = 0.5f; |
| 89 | uniform float CCValue = 3.5975454f; |
| 91 | 90 | uniform float OValue = 0.0f; |
| 91 | uniform float PValue = 1.0f; // unused |
| 92 | |
| 92 | 93 | uniform float ScanTime = 52.6f; |
| 94 | uniform float FrameOffset = 0.0f; |
| 93 | 95 | |
| 94 | 96 | uniform float NotchHalfWidth = 1.0f; |
| 95 | 97 | uniform float YFreqResponse = 6.0f; |
| 96 | 98 | uniform float IFreqResponse = 1.2f; |
| 97 | 99 | uniform float QFreqResponse = 0.6f; |
| 98 | 100 | |
| 99 | | uniform float PI = 3.141592653589; |
| 100 | | uniform float PI2 = 6.283185307178; |
| 101 | //----------------------------------------------------------------------------- |
| 102 | // Constants |
| 103 | //----------------------------------------------------------------------------- |
| 101 | 104 | |
| 105 | static const float4 NotchOffset = float4(0.0f, 1.0f, 2.0f, 3.0f); |
| 106 | |
| 107 | static const float PI = 3.1415927f; |
| 108 | static const float PI2 = 6.2831855f; |
| 109 | |
| 110 | static const float MaxC = 2.1183f; |
| 111 | static const float MinC = -1.1183f; |
| 112 | static const float CRange = 3.2366f; |
| 113 | |
| 102 | 114 | float4 ps_main(PS_INPUT Input) : COLOR |
| 103 | 115 | { |
| 104 | | float4 BaseTexel = tex2D(DiffuseSampler, Input.Coord0.xy + 0.5f / SourceDims); |
| 116 | float4 BaseTexel = tex2D(DiffuseSampler, Input.TexCoord.xy); |
| 105 | 117 | |
| 118 | float2 InvDims = 1.0f / SourceDims; |
| 119 | |
| 106 | 120 | // YIQ convolution: N coefficients each |
| 107 | 121 | float4 YAccum = 0.0f; |
| 108 | 122 | float4 IAccum = 0.0f; |
| 109 | 123 | float4 QAccum = 0.0f; |
| 110 | | float MaxC = 2.1183f; |
| 111 | | float MinC = -1.1183f; |
| 112 | | float CRange = MaxC - MinC; |
| 113 | | float FrameWidthx4 = SourceDims.x * 4.0f * SourceRect.x; |
| 114 | | float Fc_y1 = (CCValue - NotchHalfWidth) * ScanTime / FrameWidthx4; |
| 115 | | float Fc_y2 = (CCValue + NotchHalfWidth) * ScanTime / FrameWidthx4; |
| 116 | | float Fc_y3 = YFreqResponse * ScanTime / FrameWidthx4; |
| 117 | | float Fc_i = IFreqResponse * ScanTime / FrameWidthx4; |
| 118 | | float Fc_q = QFreqResponse * ScanTime / FrameWidthx4; |
| 124 | |
| 125 | float BValueFrameOffset = BValue * FrameOffset; |
| 126 | |
| 127 | float FrameWidthx4 = SourceDims.x * SourceRect.x * 4.0f; |
| 128 | float TimePerSample = ScanTime / FrameWidthx4; |
| 129 | |
| 130 | float Fc_y1 = (CCValue - NotchHalfWidth) * TimePerSample; |
| 131 | float Fc_y2 = (CCValue + NotchHalfWidth) * TimePerSample; |
| 132 | float Fc_y3 = YFreqResponse * TimePerSample; |
| 133 | float Fc_i = IFreqResponse * TimePerSample; |
| 134 | float Fc_q = QFreqResponse * TimePerSample; |
| 119 | 135 | float Fc_i_2 = Fc_i * 2.0f; |
| 120 | 136 | float Fc_q_2 = Fc_q * 2.0f; |
| 121 | 137 | float Fc_y1_2 = Fc_y1 * 2.0f; |
| r253017 | r253018 | |
| 127 | 143 | float Fc_y2_pi2 = Fc_y2 * PI2; |
| 128 | 144 | float Fc_y3_pi2 = Fc_y3 * PI2; |
| 129 | 145 | float PI2Length = PI2 / 82.0f; |
| 130 | | float4 NOffset = float4(0.0f, 1.0f, 2.0f, 3.0f); |
| 146 | |
| 131 | 147 | float W = PI2 * CCValue * ScanTime; |
| 132 | | float4 CoordY = Input.Coord0.y; |
| 133 | | float4 VPosition = (CoordY * SourceRect.y) * (SourceDims.x / SourceRect.x); |
| 148 | |
| 149 | float4 Cy = Input.TexCoord.y; |
| 150 | float4 VPosition = Cy * (SourceDims.y * SourceRect.y) * 2.0f; |
| 151 | |
| 134 | 152 | for(float n = -41.0f; n < 42.0f; n += 4.0f) |
| 135 | 153 | { |
| 136 | | float4 n4 = n + NOffset; |
| 137 | | float4 CoordX = Input.Coord0.x + Input.Coord0.z * n4 * 0.25f; |
| 138 | | float2 TexCoord = float2(CoordX.r, CoordY.r); |
| 139 | | float4 C = tex2D(CompositeSampler, TexCoord + float2(0.5f, 0.0f) / SourceDims) * CRange + MinC; |
| 140 | | float4 T = (CoordX / SourceRect.x) + VPosition + BValue; |
| 154 | float4 n4 = n + NotchOffset; |
| 155 | |
| 156 | float4 Cx = Input.TexCoord.x + InvDims.x * n4 * 0.25f; |
| 157 | float4 HPosition = (Cx / SourceRect.x); |
| 158 | |
| 159 | float4 C = tex2D(CompositeSampler, float2(Cx.r, Cy.r)) * CRange + MinC; |
| 160 | |
| 161 | float4 T = HPosition + AValue * VPosition + BValueFrameOffset; |
| 141 | 162 | float4 WT = W * T + OValue; |
| 163 | |
| 142 | 164 | float4 SincKernel = 0.54f + 0.46f * cos(PI2Length * n4); |
| 143 | 165 | |
| 144 | 166 | float4 SincYIn1 = Fc_y1_pi2 * n4; |
| r253017 | r253018 | |
| 147 | 169 | float4 SincIIn = Fc_i_pi2 * n4; |
| 148 | 170 | float4 SincQIn = Fc_q_pi2 * n4; |
| 149 | 171 | |
| 150 | | float4 SincY1 = ((SincYIn1 != 0.0f) ? (sin(SincYIn1) / SincYIn1) : 1.0f); |
| 151 | | float4 SincY2 = ((SincYIn2 != 0.0f) ? (sin(SincYIn2) / SincYIn2) : 1.0f); |
| 152 | | float4 SincY3 = ((SincYIn3 != 0.0f) ? (sin(SincYIn3) / SincYIn3) : 1.0f); |
| 172 | float4 SincY1 = SincYIn1 != 0.0f ? sin(SincYIn1) / SincYIn1 : 1.0f; |
| 173 | float4 SincY2 = SincYIn2 != 0.0f ? sin(SincYIn2) / SincYIn2 : 1.0f; |
| 174 | float4 SincY3 = SincYIn3 != 0.0f ? sin(SincYIn3) / SincYIn3 : 1.0f; |
| 153 | 175 | |
| 154 | 176 | float4 IdealY = (Fc_y1_2 * SincY1 - Fc_y2_2 * SincY2) + Fc_y3_2 * SincY3; |
| 155 | | float4 IdealI = Fc_i_2 * ((SincIIn != 0.0f) ? (sin(SincIIn) / SincIIn) : 1.0f); |
| 156 | | float4 IdealQ = Fc_q_2 * ((SincQIn != 0.0f) ? (sin(SincQIn) / SincQIn) : 1.0f); |
| 177 | float4 IdealI = Fc_i_2 * (SincIIn != 0.0f ? sin(SincIIn) / SincIIn : 1.0f); |
| 178 | float4 IdealQ = Fc_q_2 * (SincQIn != 0.0f ? sin(SincQIn) / SincQIn : 1.0f); |
| 157 | 179 | |
| 158 | 180 | float4 FilterY = SincKernel * IdealY; |
| 159 | 181 | float4 FilterI = SincKernel * IdealI; |
| r253017 | r253018 | |
| 170 | 192 | |
| 171 | 193 | float3 YIQ = float3(Y, I, Q); |
| 172 | 194 | |
| 173 | | float3 OutRGB = float3(dot(YIQ, float3(1.0f, 0.956f, 0.621f)), dot(YIQ, float3(1.0f, -0.272f, -0.647f)), dot(YIQ, float3(1.0f, -1.106f, 1.703f))); |
| 174 | | |
| 175 | | return float4(OutRGB, BaseTexel.a); |
| 195 | float3 Decode = float3( |
| 196 | dot(YIQ, float3(1.0f, 0.956f, 0.621f)), |
| 197 | dot(YIQ, float3(1.0f, -0.272f, -0.647f)), |
| 198 | dot(YIQ, float3(1.0f, -1.106f, 1.703f))); |
| 199 | return float4(Decode, BaseTexel.a); |
| 176 | 200 | } |
| 177 | 201 | |
| 178 | 202 | //----------------------------------------------------------------------------- |
trunk/hlsl/yiq_encode.fx
| r253017 | r253018 | |
| 1 | 1 | // license:BSD-3-Clause |
| 2 | | // copyright-holders:Ryan Holtz |
| 2 | // copyright-holders:Ryan Holtz,ImJezze |
| 3 | 3 | //----------------------------------------------------------------------------- |
| 4 | 4 | // YIQ Encode Effect |
| 5 | 5 | //----------------------------------------------------------------------------- |
| r253017 | r253018 | |
| 37 | 37 | float4 Position : POSITION; |
| 38 | 38 | float4 Color : COLOR0; |
| 39 | 39 | float2 TexCoord : TEXCOORD0; |
| 40 | | float2 Unused : TEXCOORD1; |
| 41 | 40 | }; |
| 42 | 41 | |
| 43 | 42 | struct PS_INPUT |
| r253017 | r253018 | |
| 51 | 50 | //----------------------------------------------------------------------------- |
| 52 | 51 | |
| 53 | 52 | uniform float2 ScreenDims; |
| 53 | uniform float2 SourceDims; |
| 54 | uniform float2 SourceRect; |
| 54 | 55 | |
| 55 | 56 | VS_OUTPUT vs_main(VS_INPUT Input) |
| 56 | 57 | { |
| r253017 | r253018 | |
| 58 | 59 | |
| 59 | 60 | Output.Position = float4(Input.Position.xyz, 1.0f); |
| 60 | 61 | Output.Position.xy /= ScreenDims; |
| 61 | | Output.Position.y = 1.0f - Output.Position.y; |
| 62 | | Output.Position.xy -= 0.5f; |
| 63 | | Output.Position *= float4(2.0f, 2.0f, 1.0f, 1.0f); |
| 64 | | Output.Color = Input.Color; |
| 62 | Output.Position.y = 1.0f - Output.Position.y; // flip y |
| 63 | Output.Position.xy -= 0.5f; // center |
| 64 | Output.Position.xy *= 2.0f; // zoom |
| 65 | |
| 65 | 66 | Output.TexCoord = Input.TexCoord; |
| 67 | Output.TexCoord += 0.5f / SourceDims; // half texel offset correction (DX9) |
| 66 | 68 | |
| 69 | Output.Color = Input.Color; |
| 70 | |
| 67 | 71 | return Output; |
| 68 | 72 | } |
| 69 | 73 | |
| r253017 | r253018 | |
| 71 | 75 | // YIQ Encode Pixel Shader |
| 72 | 76 | //----------------------------------------------------------------------------- |
| 73 | 77 | |
| 74 | | uniform float AValue = 0.0f; |
| 75 | | uniform float BValue = 0.0f; |
| 76 | | uniform float CCValue = 3.04183f; |
| 78 | uniform float AValue = 0.5f; |
| 79 | uniform float BValue = 0.5f; |
| 80 | uniform float CCValue = 3.5975454f; |
| 81 | uniform float OValue = 0.0f; |
| 77 | 82 | uniform float PValue = 1.0f; |
| 83 | |
| 78 | 84 | uniform float ScanTime = 52.6f; |
| 85 | uniform float FrameOffset = 0.0f; |
| 79 | 86 | |
| 80 | | uniform float2 SourceDims; |
| 81 | | uniform float2 SourceRect; |
| 82 | | |
| 83 | | uniform float4 YDot = float4(0.299f, 0.587f, 0.114f, 0.0f); |
| 84 | | uniform float4 IDot = float4(0.595716f, -0.274453f, -0.321263f, 0.0f); |
| 85 | | uniform float4 QDot = float4(0.211456f, -0.522591f, 0.311135f, 0.0f); |
| 86 | | uniform float4 OffsetX = float4(0.00f, 0.25f, 0.50f, 0.75f); |
| 87 | | |
| 88 | | uniform float PI = 3.1415926535f; |
| 89 | | uniform float PI2 = 6.2831853072f; |
| 90 | | |
| 91 | 87 | uniform float MaxC = 2.1183f; |
| 92 | 88 | uniform float MinC = -1.1183f; |
| 93 | 89 | uniform float CRange = 3.2366f; |
| 94 | 90 | |
| 91 | //----------------------------------------------------------------------------- |
| 92 | // Constants |
| 93 | //----------------------------------------------------------------------------- |
| 94 | |
| 95 | static const float4 YDot = float4(0.299f, 0.587f, 0.114f, 0.0f); |
| 96 | static const float4 IDot = float4(0.595716f, -0.274453f, -0.321263f, 0.0f); |
| 97 | static const float4 QDot = float4(0.211456f, -0.522591f, 0.311135f, 0.0f); |
| 98 | static const float4 OffsetX = float4(0.0f, 0.25f, 0.50f, 0.75f); |
| 99 | |
| 100 | static const float PI = 3.1415927f; |
| 101 | static const float PI2 = 6.2831855f; |
| 102 | |
| 95 | 103 | float4 ps_main(PS_INPUT Input) : COLOR |
| 96 | | { |
| 104 | { |
| 97 | 105 | float2 InvDims = 1.0f / SourceDims; |
| 98 | | float4 CoordX = float4(Input.TexCoord.x + OffsetX * InvDims.x); |
| 99 | | float4 CoordY = Input.TexCoord.y; |
| 100 | 106 | |
| 101 | | float2 TexelOffset = InvDims * 0.5f; |
| 102 | | float4 Texel0 = tex2D(DiffuseSampler, float2(CoordX.x, CoordY.x) + TexelOffset); |
| 103 | | float4 Texel1 = tex2D(DiffuseSampler, float2(CoordX.y, CoordY.y) + TexelOffset); |
| 104 | | float4 Texel2 = tex2D(DiffuseSampler, float2(CoordX.z, CoordY.z) + TexelOffset); |
| 105 | | float4 Texel3 = tex2D(DiffuseSampler, float2(CoordX.w, CoordY.w) + TexelOffset); |
| 107 | float2 InvPValue = float2(PValue, 0.0f) * InvDims; |
| 106 | 108 | |
| 109 | float2 C0 = Input.TexCoord + InvPValue * OffsetX.x; |
| 110 | float2 C1 = Input.TexCoord + InvPValue * OffsetX.y; |
| 111 | float2 C2 = Input.TexCoord + InvPValue * OffsetX.z; |
| 112 | float2 C3 = Input.TexCoord + InvPValue * OffsetX.w; |
| 113 | float4 Cx = float4(C0.x, C1.x, C2.x, C3.x); |
| 114 | float4 Cy = float4(C0.y, C1.y, C2.y, C3.y); |
| 115 | float4 Texel0 = tex2D(DiffuseSampler, C0); |
| 116 | float4 Texel1 = tex2D(DiffuseSampler, C1); |
| 117 | float4 Texel2 = tex2D(DiffuseSampler, C2); |
| 118 | float4 Texel3 = tex2D(DiffuseSampler, C3); |
| 119 | |
| 107 | 120 | float4 Y = float4(dot(Texel0, YDot), dot(Texel1, YDot), dot(Texel2, YDot), dot(Texel3, YDot)); |
| 108 | 121 | float4 I = float4(dot(Texel0, IDot), dot(Texel1, IDot), dot(Texel2, IDot), dot(Texel3, IDot)); |
| 109 | 122 | float4 Q = float4(dot(Texel0, QDot), dot(Texel1, QDot), dot(Texel2, QDot), dot(Texel3, QDot)); |
| 123 | |
| 124 | float BValueFrameOffset = BValue * FrameOffset; |
| 110 | 125 | |
| 126 | float4 HPosition = Cx / SourceRect.x; |
| 127 | float4 VPosition = Cy * (SourceDims.y * SourceRect.y) * 2.0f; |
| 128 | |
| 111 | 129 | float4 W = PI2 * CCValue * ScanTime; |
| 112 | | float4 VPosition = (CoordY * SourceRect.y) * (SourceDims.x / SourceRect.x); |
| 113 | | float4 T = CoordX / SourceRect.x + VPosition + BValue; |
| 130 | float4 T = HPosition + AValue * VPosition + BValueFrameOffset; |
| 131 | float4 TW = T * W + OValue; |
| 114 | 132 | |
| 115 | | float4 C = Y + I * cos(T * W) + Q * sin(T * W); |
| 116 | | C = (C - MinC) / CRange; |
| 133 | float4 Encoded = Y + I * cos(TW) + Q * sin(TW); |
| 117 | 134 | |
| 118 | | return C; |
| 135 | return (Encoded - MinC) / CRange;; |
| 119 | 136 | } |
| 120 | 137 | |
| 121 | 138 | //----------------------------------------------------------------------------- |
trunk/src/osd/modules/render/d3d/d3dhlsl.cpp
| r253017 | r253018 | |
| 970 | 970 | yiq_encode_effect->add_uniform("CCValue", uniform::UT_FLOAT, uniform::CU_NTSC_CCFREQ); |
| 971 | 971 | yiq_encode_effect->add_uniform("AValue", uniform::UT_FLOAT, uniform::CU_NTSC_A); |
| 972 | 972 | yiq_encode_effect->add_uniform("BValue", uniform::UT_FLOAT, uniform::CU_NTSC_B); |
| 973 | yiq_decode_effect->add_uniform("OValue", uniform::UT_FLOAT, uniform::CU_NTSC_O); |
| 973 | 974 | yiq_encode_effect->add_uniform("PValue", uniform::UT_FLOAT, uniform::CU_NTSC_P); |
| 974 | 975 | yiq_encode_effect->add_uniform("NotchHalfWidth", uniform::UT_FLOAT, uniform::CU_NTSC_NOTCH); |
| 975 | 976 | yiq_encode_effect->add_uniform("YFreqResponse", uniform::UT_FLOAT, uniform::CU_NTSC_YFREQ); |
| r253017 | r253018 | |
| 1244 | 1245 | return next_index; |
| 1245 | 1246 | } |
| 1246 | 1247 | |
| 1248 | float frame_offset = curr_texture->get_cur_frame() == 0 |
| 1249 | ? 0.0f |
| 1250 | : (float)curr_texture->get_cur_frame(); |
| 1251 | |
| 1247 | 1252 | // Convert our signal into YIQ |
| 1248 | 1253 | curr_effect = yiq_encode_effect; |
| 1249 | 1254 | curr_effect->update_uniforms(); |
| 1250 | | |
| 1255 | curr_effect->set_float("FrameOffset", frame_offset); |
| 1256 | |
| 1251 | 1257 | // initial "Diffuse" texture is set in shaders::set_texture() |
| 1252 | 1258 | |
| 1253 | 1259 | next_index = rt->next_index(next_index); |
| r253017 | r253018 | |
| 1258 | 1264 | curr_effect->update_uniforms(); |
| 1259 | 1265 | curr_effect->set_texture("Composite", rt->native_texture[next_index]); |
| 1260 | 1266 | curr_effect->set_texture("Diffuse", curr_texture->get_finaltex()); |
| 1261 | | |
| 1267 | curr_effect->set_float("FrameOffset", frame_offset); |
| 1268 | |
| 1262 | 1269 | next_index = rt->next_index(next_index); |
| 1263 | 1270 | blit(rt->native_target[next_index], true, D3DPT_TRIANGLELIST, 0, 2); |
| 1264 | 1271 | |
trunk/src/osd/windows/winmain.cpp
| r253017 | r253018 | |
| 330 | 330 | { WINOPTION_YIQ_CCVALUE";yiqcc", "3.59754545", OPTION_FLOAT, "Color Carrier frequency for NTSC signal processing" }, |
| 331 | 331 | { WINOPTION_YIQ_AVALUE";yiqa", "0.5", OPTION_FLOAT, "A value for NTSC signal processing" }, |
| 332 | 332 | { WINOPTION_YIQ_BVALUE";yiqb", "0.5", OPTION_FLOAT, "B value for NTSC signal processing" }, |
| 333 | | { WINOPTION_YIQ_OVALUE";yiqo", "1.570796325", OPTION_FLOAT, "Outgoing Color Carrier phase offset for NTSC signal processing" }, |
| 333 | { WINOPTION_YIQ_OVALUE";yiqo", "1.0", OPTION_FLOAT, "Outgoing Color Carrier phase offset for NTSC signal processing" }, |
| 334 | 334 | { WINOPTION_YIQ_PVALUE";yiqp", "1.0", OPTION_FLOAT, "Incoming Pixel Clock scaling value for NTSC signal processing" }, |
| 335 | 335 | { WINOPTION_YIQ_NVALUE";yiqn", "1.0", OPTION_FLOAT, "Y filter notch width for NTSC signal processing" }, |
| 336 | 336 | { WINOPTION_YIQ_YVALUE";yiqy", "6.0", OPTION_FLOAT, "Y filter cutoff frequency for NTSC signal processing" }, |
| r253017 | r253018 | |
| 338 | 338 | { WINOPTION_YIQ_QVALUE";yiqq", "0.6", OPTION_FLOAT, "Q filter cutoff frequency for NTSC signal processing" }, |
| 339 | 339 | { WINOPTION_YIQ_SCAN_TIME";yiqsc", "52.6", OPTION_FLOAT, "Horizontal scanline duration for NTSC signal processing (in usec)" }, |
| 340 | 340 | { WINOPTION_YIQ_PHASE_COUNT";yiqp", "2", OPTION_INTEGER, "Phase Count value for NTSC signal processing" }, |
| 341 | | { WINOPTION_YIQ_SCAN_TIME";yiqsc", "52.6", OPTION_FLOAT, "Horizontal scanline duration for NTSC signal processing (in usec)" }, |
| 342 | | { WINOPTION_YIQ_PHASE_COUNT";yiqp", "2", OPTION_INTEGER, "Phase Count value for NTSC signal processing" }, |
| 343 | 341 | /* Vector simulation below this line */ |
| 344 | 342 | { NULL, NULL, OPTION_HEADER, "VECTOR POST-PROCESSING OPTIONS" }, |
| 345 | 343 | { WINOPTION_VECTOR_LENGTH_SCALE";veclength", "0.5", OPTION_FLOAT, "How much length affects vector fade" }, |