JPEG图像颜色转换问题

时间:2014-04-01 05:31:04

标签: assembly arm jpeg libjpeg libjpeg-turbo

我有一张JPEG图片(大小为10 * 10),我想对这张JPEG图像的某些部分进行颜色转换。

例如,我想对从" 1到10"列开始的图像宽度执行颜色转换。

在这种情况下,转换后的颜色与原始图像不同,而是将其去除。

虽然默认情况下jpeg图像的颜色转换的.c实现是按像素方式完成的,因此从1-10(而不是0-10)执行颜色转换没有问题,

但是当我采用颜色转换的程序集实现(它一次执行8个像素)并执行相同的任务时图像变形...(图像的最大部分看起来是绿色的)

颜色转换的汇编代码如下:

add             Y,  Y, START_X
add             U,  U, START_X
add             V,  V, START_X

只有以上代码才是我的补充

asm_function jsimd_ycc_\colorid\()_convert_neon
/* Outer loop over scanlines */
cmp             NUM_ROWS, #1
blt             9f

0:
ldr             Y, [INPUT_BUF0, INPUT_ROW, lsl #2]
ldr             U, [INPUT_BUF1, INPUT_ROW, lsl #2]

mov             N, OUTPUT_WIDTH
ldr             V, [INPUT_BUF2, INPUT_ROW, lsl #2]

add             Y,  Y, START_X
add             U,  U, START_X
add             V,  V, START_X

add             INPUT_ROW, INPUT_ROW, #1
ldr             RGB, [OUTPUT_BUF], #4

/* Inner loop over pixels */
subs            N, N, #8

blt             3f
do_load         8
do_yuv_to_rgb_stage1
subs            N, N, #8
blt             2f
1:
do_yuv_to_rgb_stage2_store_load_stage1
subs            N, N, #8
bge             1b
2:
do_yuv_to_rgb_stage2
do_store        \bpp, 8
tst             N, #7
beq             8f
3:
tst             N, #4
beq             3f
do_load         4
3:
tst             N, #2
beq             4f
do_load         2
4:
tst             N, #1
beq                5f
do_load         1
.endfunc

0 个答案:

没有答案