|
|
|
@ -265,32 +265,33 @@ static int decode_frame(AVCodecContext *avctx, |
|
|
|
|
line = advance_line(dst, line, stride, &y, h, interleave); |
|
|
|
|
} while (line); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (flags & TGA_RIGHTTOLEFT) { // right-to-left, needs horizontal flip
|
|
|
|
|
int x; |
|
|
|
|
for (y = 0; y < h; y++) { |
|
|
|
|
void *line = &p->data[0][y * p->linesize[0]]; |
|
|
|
|
for (x = 0; x < w >> 1; x++) { |
|
|
|
|
switch (bpp) { |
|
|
|
|
case 32: |
|
|
|
|
FFSWAP(uint32_t, ((uint32_t *)line)[x], ((uint32_t *)line)[w - x - 1]); |
|
|
|
|
break; |
|
|
|
|
case 24: |
|
|
|
|
FFSWAP(uint8_t, ((uint8_t *)line)[3 * x ], ((uint8_t *)line)[3 * w - 3 * x - 3]); |
|
|
|
|
FFSWAP(uint8_t, ((uint8_t *)line)[3 * x + 1], ((uint8_t *)line)[3 * w - 3 * x - 2]); |
|
|
|
|
FFSWAP(uint8_t, ((uint8_t *)line)[3 * x + 2], ((uint8_t *)line)[3 * w - 3 * x - 1]); |
|
|
|
|
break; |
|
|
|
|
case 16: |
|
|
|
|
FFSWAP(uint16_t, ((uint16_t *)line)[x], ((uint16_t *)line)[w - x - 1]); |
|
|
|
|
break; |
|
|
|
|
case 8: |
|
|
|
|
FFSWAP(uint8_t, ((uint8_t *)line)[x], ((uint8_t *)line)[w - x - 1]); |
|
|
|
|
if (flags & TGA_RIGHTTOLEFT) { // right-to-left, needs horizontal flip
|
|
|
|
|
int x; |
|
|
|
|
for (y = 0; y < h; y++) { |
|
|
|
|
void *line = &p->data[0][y * p->linesize[0]]; |
|
|
|
|
for (x = 0; x < w >> 1; x++) { |
|
|
|
|
switch (bpp) { |
|
|
|
|
case 32: |
|
|
|
|
FFSWAP(uint32_t, ((uint32_t *)line)[x], ((uint32_t *)line)[w - x - 1]); |
|
|
|
|
break; |
|
|
|
|
case 24: |
|
|
|
|
FFSWAP(uint8_t, ((uint8_t *)line)[3 * x ], ((uint8_t *)line)[3 * w - 3 * x - 3]); |
|
|
|
|
FFSWAP(uint8_t, ((uint8_t *)line)[3 * x + 1], ((uint8_t *)line)[3 * w - 3 * x - 2]); |
|
|
|
|
FFSWAP(uint8_t, ((uint8_t *)line)[3 * x + 2], ((uint8_t *)line)[3 * w - 3 * x - 1]); |
|
|
|
|
break; |
|
|
|
|
case 16: |
|
|
|
|
FFSWAP(uint16_t, ((uint16_t *)line)[x], ((uint16_t *)line)[w - x - 1]); |
|
|
|
|
break; |
|
|
|
|
case 8: |
|
|
|
|
FFSWAP(uint8_t, ((uint8_t *)line)[x], ((uint8_t *)line)[w - x - 1]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*got_frame = 1; |
|
|
|
|
|
|
|
|
|
return avpkt->size; |
|
|
|
|