Skip to content
Snippets Groups Projects
Commit e209a377 authored by Carl Eugen Hoyos's avatar Carl Eugen Hoyos
Browse files

Simplify 32bit png decoding.

parent 21a10061
No related branches found
No related tags found
No related merge requests found
...@@ -101,17 +101,6 @@ static void png_put_interlaced_row(uint8_t *dst, int width, ...@@ -101,17 +101,6 @@ static void png_put_interlaced_row(uint8_t *dst, int width,
bpp = bits_per_pixel >> 3; bpp = bits_per_pixel >> 3;
d = dst; d = dst;
s = src; s = src;
if (color_type == PNG_COLOR_TYPE_RGB_ALPHA) {
for(x = 0; x < width; x++) {
j = x & 7;
if ((dsp_mask << j) & 0x80) {
*(uint32_t *)d = (s[3] << 24) | (s[0] << 16) | (s[1] << 8) | s[2];
}
d += bpp;
if ((mask << j) & 0x80)
s += bpp;
}
} else {
for(x = 0; x < width; x++) { for(x = 0; x < width; x++) {
j = x & 7; j = x & 7;
if ((dsp_mask << j) & 0x80) { if ((dsp_mask << j) & 0x80) {
...@@ -121,7 +110,6 @@ static void png_put_interlaced_row(uint8_t *dst, int width, ...@@ -121,7 +110,6 @@ static void png_put_interlaced_row(uint8_t *dst, int width,
if ((mask << j) & 0x80) if ((mask << j) & 0x80)
s += bpp; s += bpp;
} }
}
break; break;
} }
} }
...@@ -265,7 +253,10 @@ static av_always_inline void convert_to_rgb32_loco(uint8_t *dst, const uint8_t * ...@@ -265,7 +253,10 @@ static av_always_inline void convert_to_rgb32_loco(uint8_t *dst, const uint8_t *
r = (r+g)&0xff; r = (r+g)&0xff;
b = (b+g)&0xff; b = (b+g)&0xff;
} }
*(uint32_t *)dst = (a << 24) | (r << 16) | (g << 8) | b; dst[0] = r;
dst[1] = g;
dst[2] = b;
dst[3] = a;
dst += 4; dst += 4;
src += 4; src += 4;
} }
...@@ -276,7 +267,7 @@ static void convert_to_rgb32(uint8_t *dst, const uint8_t *src, int width, int lo ...@@ -276,7 +267,7 @@ static void convert_to_rgb32(uint8_t *dst, const uint8_t *src, int width, int lo
if(loco) if(loco)
convert_to_rgb32_loco(dst, src, width, 1); convert_to_rgb32_loco(dst, src, width, 1);
else else
convert_to_rgb32_loco(dst, src, width, 0); memcpy(dst, src, width * 4);
} }
static void deloco_rgb24(uint8_t *dst, int size) static void deloco_rgb24(uint8_t *dst, int size)
...@@ -339,7 +330,6 @@ static void png_handle_row(PNGDecContext *s) ...@@ -339,7 +330,6 @@ static void png_handle_row(PNGDecContext *s)
got_line = 1; got_line = 1;
} }
if ((png_pass_dsp_ymask[s->pass] << (s->y & 7)) & 0x80) { if ((png_pass_dsp_ymask[s->pass] << (s->y & 7)) & 0x80) {
/* NOTE: RGB32 is handled directly in png_put_interlaced_row */
png_put_interlaced_row(ptr, s->width, s->bits_per_pixel, s->pass, png_put_interlaced_row(ptr, s->width, s->bits_per_pixel, s->pass,
s->color_type, s->last_row); s->color_type, s->last_row);
} }
...@@ -484,7 +474,7 @@ static int decode_frame(AVCodecContext *avctx, ...@@ -484,7 +474,7 @@ static int decode_frame(AVCodecContext *avctx,
avctx->pix_fmt = PIX_FMT_RGB24; avctx->pix_fmt = PIX_FMT_RGB24;
} else if (s->bit_depth == 8 && } else if (s->bit_depth == 8 &&
s->color_type == PNG_COLOR_TYPE_RGB_ALPHA) { s->color_type == PNG_COLOR_TYPE_RGB_ALPHA) {
avctx->pix_fmt = PIX_FMT_RGB32; avctx->pix_fmt = PIX_FMT_RGBA;
} else if (s->bit_depth == 8 && } else if (s->bit_depth == 8 &&
s->color_type == PNG_COLOR_TYPE_GRAY) { s->color_type == PNG_COLOR_TYPE_GRAY) {
avctx->pix_fmt = PIX_FMT_GRAY8; avctx->pix_fmt = PIX_FMT_GRAY8;
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#define LIBAVCODEC_VERSION_MAJOR 53 #define LIBAVCODEC_VERSION_MAJOR 53
#define LIBAVCODEC_VERSION_MINOR 57 #define LIBAVCODEC_VERSION_MINOR 57
#define LIBAVCODEC_VERSION_MICRO 103 #define LIBAVCODEC_VERSION_MICRO 104
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MINOR, \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment