1

JPEG 画像 (サイズ 10*10 など) があり、この JPEG 画像の一部の色を変換したいと考えています。

たとえば、列「1から10」までの画像幅の色変換を実行したいとします。

この場合、変換後の色は元の画像と同じではなく、歪んでいます。

デフォルトでは、jpeg 画像の色変換の .c 実装はピクセルごとに行われるため、(0-10 ではなく) 1-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
4

0 に答える 0