LibGfx/JPEGLoader: Extract inverse_dct_8x8() function

No behavior change.
This commit is contained in:
Nico Weber 2024-01-26 21:15:48 -05:00 committed by Sam Atkins
parent 494fc1234e
commit d89e42902e

View file

@ -1412,7 +1412,7 @@ static ErrorOr<void> dequantize(JPEGLoadingContext& context, Vector<Macroblock>&
return {};
}
static void inverse_dct(JPEGLoadingContext const& context, Vector<Macroblock>& macroblocks)
static void inverse_dct_8x8(i16* block_component)
{
static float const m0 = 2.0f * AK::cos(1.0f / 16.0f * 2.0f * AK::Pi<float>);
static float const m1 = 2.0f * AK::cos(2.0f / 16.0f * 2.0f * AK::Pi<float>);
@ -1429,15 +1429,6 @@ static void inverse_dct(JPEGLoadingContext const& context, Vector<Macroblock>& m
static float const s6 = AK::cos(6.0f / 16.0f * AK::Pi<float>) / 2.0f;
static float const s7 = AK::cos(7.0f / 16.0f * AK::Pi<float>) / 2.0f;
for (u32 vcursor = 0; vcursor < context.mblock_meta.vcount; vcursor += context.sampling_factors.vertical) {
for (u32 hcursor = 0; hcursor < context.mblock_meta.hcount; hcursor += context.sampling_factors.horizontal) {
for (u32 component_i = 0; component_i < context.components.size(); component_i++) {
auto& component = context.components[component_i];
for (u8 vfactor_i = 0; vfactor_i < component.sampling_factors.vertical; vfactor_i++) {
for (u8 hfactor_i = 0; hfactor_i < component.sampling_factors.horizontal; hfactor_i++) {
u32 macroblock_index = (vcursor + vfactor_i) * context.mblock_meta.hpadded_count + (hfactor_i + hcursor);
Macroblock& block = macroblocks[macroblock_index];
auto* block_component = get_component(block, component_i);
for (u32 k = 0; k < 8; ++k) {
float const g0 = block_component[0 * 8 + k] * s0;
float const g1 = block_component[4 * 8 + k] * s4;
@ -1573,6 +1564,20 @@ static void inverse_dct(JPEGLoadingContext const& context, Vector<Macroblock>& m
block_component[l * 8 + 7] = b0 - b7;
}
}
static void inverse_dct(JPEGLoadingContext const& context, Vector<Macroblock>& macroblocks)
{
for (u32 vcursor = 0; vcursor < context.mblock_meta.vcount; vcursor += context.sampling_factors.vertical) {
for (u32 hcursor = 0; hcursor < context.mblock_meta.hcount; hcursor += context.sampling_factors.horizontal) {
for (u32 component_i = 0; component_i < context.components.size(); component_i++) {
auto& component = context.components[component_i];
for (u8 vfactor_i = 0; vfactor_i < component.sampling_factors.vertical; vfactor_i++) {
for (u8 hfactor_i = 0; hfactor_i < component.sampling_factors.horizontal; hfactor_i++) {
u32 macroblock_index = (vcursor + vfactor_i) * context.mblock_meta.hpadded_count + (hfactor_i + hcursor);
Macroblock& block = macroblocks[macroblock_index];
auto* block_component = get_component(block, component_i);
inverse_dct_8x8(block_component);
}
}
}
}