Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenoit Fouet <benoit.fouet@free.fr>2014-11-14 12:17:35 +0300
committerMichael Niedermayer <michaelni@gmx.at>2014-11-14 18:58:37 +0300
commit6499e63f7b9e73d5b6b601f25803f9244de99bf6 (patch)
tree4f870a5046a48fe208e1b9530befff8a5600af91 /libavcodec/pngdec.c
parent4f313a50ee786fdcf01d094b3d0455906aaa4aa3 (diff)
avcodec/pngdec: create a function to decode tRNS chunk.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/pngdec.c')
-rw-r--r--libavcodec/pngdec.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
index 9b5d5dd574..92ed59d94d 100644
--- a/libavcodec/pngdec.c
+++ b/libavcodec/pngdec.c
@@ -694,6 +694,25 @@ static int decode_plte_chunk(AVCodecContext *avctx, PNGDecContext *s,
return 0;
}
+static int decode_trns_chunk(AVCodecContext *avctx, PNGDecContext *s,
+ uint32_t length)
+{
+ int v, i;
+
+ /* read the transparency. XXX: Only palette mode supported */
+ if (s->color_type != PNG_COLOR_TYPE_PALETTE ||
+ length > 256 ||
+ !(s->state & PNG_PLTE))
+ return AVERROR_INVALIDDATA;
+ for (i = 0; i < length; i++) {
+ v = bytestream2_get_byte(&s->gb);
+ s->palette[i] = (s->palette[i] & 0x00ffffff) | (v << 24);
+ }
+ bytestream2_skip(&s->gb, 4); /* crc */
+
+ return 0;
+}
+
static int decode_frame_png(AVCodecContext *avctx,
void *data, int *got_frame,
AVPacket *avpkt)
@@ -771,20 +790,8 @@ static int decode_frame_png(AVCodecContext *avctx,
goto skip_tag;
break;
case MKTAG('t', 'R', 'N', 'S'):
- {
- int v, i;
-
- /* read the transparency. XXX: Only palette mode supported */
- if (s->color_type != PNG_COLOR_TYPE_PALETTE ||
- length > 256 ||
- !(s->state & PNG_PLTE))
+ if (decode_trns_chunk(avctx, s, length) < 0)
goto skip_tag;
- for (i = 0; i < length; i++) {
- v = bytestream2_get_byte(&s->gb);
- s->palette[i] = (s->palette[i] & 0x00ffffff) | (v << 24);
- }
- bytestream2_skip(&s->gb, 4); /* crc */
- }
break;
case MKTAG('t', 'E', 'X', 't'):
if (decode_text_chunk(s, length, 0, &metadata) < 0)