我有一张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