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 187 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 203 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 267 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 213 of file pngdec.c.

Referenced by png_handle_row().

static void png_handle_row ( PNGDecContext s)
static

Definition at line 282 of file pngdec.c.

Referenced by png_decode_idat().

static int png_decode_idat ( PNGDecContext s,
int  length 
)
static

Definition at line 363 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 392 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 436 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 460 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 508 of file pngdec.c.

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

Definition at line 877 of file pngdec.c.

static av_cold int png_dec_init ( AVCodecContext avctx)
static

Definition at line 892 of file pngdec.c.

static av_cold int png_dec_end ( AVCodecContext avctx)
static

Definition at line 910 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 928 of file pngdec.c.