FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions | Variables
pngdec.c File Reference
#include "libavutil/bprint.h"
#include "libavutil/imgutils.h"
#include "avcodec.h"
#include "bytestream.h"
#include "internal.h"
#include "png.h"
#include "pngdsp.h"
#include "thread.h"
#include <zlib.h>

Go to the source code of this file.

Data Structures

struct  PNGDecContext
 

Macros

#define UNROLL1(bpp, op)
 
#define UNROLL_FILTER(op)
 
#define OP_SUB(x, s, l)   ((x) + (s))
 
#define OP_AVG(x, s, l)   (((((x) + (l)) >> 1) + (s)) & 0xff)
 
#define YUV2RGB(NAME, TYPE)
 

Functions

static void png_put_interlaced_row (uint8_t *dst, int width, int bits_per_pixel, int pass, int color_type, const uint8_t *src)
 
void ff_add_png_paeth_prediction (uint8_t *dst, uint8_t *src, uint8_t *top, int w, int bpp)
 
static void png_filter_row (PNGDSPContext *dsp, uint8_t *dst, int filter_type, uint8_t *src, uint8_t *last, int size, int bpp)
 
static void png_handle_row (PNGDecContext *s)
 
static int png_decode_idat (PNGDecContext *s, int length)
 
static int decode_zbuf (AVBPrint *bp, const uint8_t *data, const uint8_t *data_end)
 
static uint8_tiso88591_to_utf8 (const uint8_t *in, size_t size_in)
 
static int decode_text_chunk (PNGDecContext *s, uint32_t length, int compressed, AVDictionary **dict)
 
static int decode_frame (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 
static int update_thread_context (AVCodecContext *dst, const AVCodecContext *src)
 
static av_cold int png_dec_init (AVCodecContext *avctx)
 
static av_cold int png_dec_end (AVCodecContext *avctx)
 

Variables

static const uint8_t png_pass_mask [NB_PASSES]
 
static const uint8_t png_pass_dsp_ymask [NB_PASSES]
 
static const uint8_t png_pass_dsp_mask [NB_PASSES]
 
AVCodec ff_png_decoder
 

Macro Definition Documentation

#define UNROLL1 (   bpp,
  op 
)
Value:
{ \
r = dst[0]; \
if (bpp >= 2) \
g = dst[1]; \
if (bpp >= 3) \
b = dst[2]; \
if (bpp >= 4) \
a = dst[3]; \
for (; i <= size - bpp; i += bpp) { \
dst[i + 0] = r = op(r, src[i + 0], last[i + 0]); \
if (bpp == 1) \
continue; \
dst[i + 1] = g = op(g, src[i + 1], last[i + 1]); \
if (bpp == 2) \
continue; \
dst[i + 2] = b = op(b, src[i + 2], last[i + 2]); \
if (bpp == 3) \
continue; \
dst[i + 3] = a = op(a, src[i + 3], last[i + 3]); \
} \
}

Definition at line 188 of file pngdec.c.

#define UNROLL_FILTER (   op)
Value:
if (bpp == 1) UNROLL1(1, op)\
else if (bpp == 2) UNROLL1(2, op)\
else if (bpp == 3) UNROLL1(3, op)\
else if (bpp == 4) UNROLL1(4, op)\
for (; i < size; i++) {\
dst[i] = op(dst[i - bpp], src[i], last[i]);\
}\

Definition at line 210 of file pngdec.c.

Referenced by png_filter_row().

#define OP_SUB (   x,
  s,
 
)    ((x) + (s))

Referenced by png_filter_row().

#define OP_AVG (   x,
  s,
 
)    (((((x) + (l)) >> 1) + (s)) & 0xff)
#define YUV2RGB (   NAME,
  TYPE 
)
Value:
static void deloco_ ## NAME(TYPE *dst, int size, int alpha) \
{ \
int i; \
for (i = 0; i < size; i += 3 + alpha) { \
int g = dst [i + 1]; \
dst[i + 0] += g; \
dst[i + 2] += g; \
} \
}

Definition at line 274 of file pngdec.c.

Function Documentation

static void png_put_interlaced_row ( uint8_t dst,
int  width,
int  bits_per_pixel,
int  pass,
int  color_type,
const uint8_t src 
)
static

Definition at line 90 of file pngdec.c.

Referenced by png_handle_row().

void ff_add_png_paeth_prediction ( uint8_t dst,
uint8_t src,
uint8_t top,
int  w,
int  bpp 
)

Definition at line 160 of file pngdec.c.

Referenced by ff_pngdsp_init(), and png_filter_row().

static void png_filter_row ( PNGDSPContext dsp,
uint8_t dst,
int  filter_type,
uint8_t src,
uint8_t last,
int  size,
int  bpp 
)
static

Definition at line 220 of file pngdec.c.

Referenced by png_handle_row().

static void png_handle_row ( PNGDecContext s)
static

Definition at line 289 of file pngdec.c.

Referenced by png_decode_idat().

static int png_decode_idat ( PNGDecContext s,
int  length 
)
static

Definition at line 370 of file pngdec.c.

Referenced by decode_frame().

static int decode_zbuf ( AVBPrint bp,
const uint8_t data,
const uint8_t data_end 
)
static

Definition at line 400 of file pngdec.c.

Referenced by decode_text_chunk().

static uint8_t* iso88591_to_utf8 ( const uint8_t in,
size_t  size_in 
)
static

Definition at line 444 of file pngdec.c.

Referenced by decode_text_chunk().

static int decode_text_chunk ( PNGDecContext s,
uint32_t  length,
int  compressed,
AVDictionary **  dict 
)
static

Definition at line 468 of file pngdec.c.

Referenced by decode_frame().

static int decode_frame ( AVCodecContext avctx,
void data,
int *  got_frame,
AVPacket avpkt 
)
static

Definition at line 516 of file pngdec.c.

static int update_thread_context ( AVCodecContext dst,
const AVCodecContext src 
)
static

Definition at line 886 of file pngdec.c.

static av_cold int png_dec_init ( AVCodecContext avctx)
static

Definition at line 901 of file pngdec.c.

static av_cold int png_dec_end ( AVCodecContext avctx)
static

Definition at line 919 of file pngdec.c.

Variable Documentation

const uint8_t png_pass_mask[NB_PASSES]
static
Initial value:
= {
0x01, 0x01, 0x11, 0x11, 0x55, 0x55, 0xff,
}

Definition at line 73 of file pngdec.c.

Referenced by png_put_interlaced_row().

const uint8_t png_pass_dsp_ymask[NB_PASSES]
static
Initial value:
= {
0xff, 0xff, 0x0f, 0xff, 0x33, 0xff, 0x55,
}

Definition at line 78 of file pngdec.c.

Referenced by png_handle_row().

const uint8_t png_pass_dsp_mask[NB_PASSES]
static
Initial value:
= {
0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff
}

Definition at line 83 of file pngdec.c.

Referenced by png_put_interlaced_row().

AVCodec ff_png_decoder
Initial value:
= {
.name = "png",
.long_name = NULL_IF_CONFIG_SMALL("PNG (Portable Network Graphics) image"),
.priv_data_size = sizeof(PNGDecContext),
}

Definition at line 937 of file pngdec.c.