FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
pngdec.c File Reference
#include "libavutil/avassert.h"
#include "libavutil/bprint.h"
#include "libavutil/imgutils.h"
#include "libavutil/stereo3d.h"
#include "libavutil/mastering_display_metadata.h"
#include "avcodec.h"
#include "bytestream.h"
#include "internal.h"
#include "apng.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)
 
#define FAST_DIV255(x)   ((((x) + 128) * 257) >> 16)
 

Enumerations

enum  PNGHeaderState { PNG_IHDR = 1 << 0, PNG_PLTE = 1 << 1 }
 
enum  PNGImageState { PNG_IDAT = 1 << 0, PNG_ALLIMAGE = 1 << 1 }
 

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_ihdr_chunk (AVCodecContext *avctx, PNGDecContext *s, uint32_t length)
 
static int decode_phys_chunk (AVCodecContext *avctx, PNGDecContext *s)
 
static int decode_idat_chunk (AVCodecContext *avctx, PNGDecContext *s, uint32_t length, AVFrame *p)
 
static int decode_plte_chunk (AVCodecContext *avctx, PNGDecContext *s, uint32_t length)
 
static int decode_trns_chunk (AVCodecContext *avctx, PNGDecContext *s, uint32_t length)
 
static int decode_iccp_chunk (PNGDecContext *s, int length, AVFrame *f)
 
static void handle_small_bpp (PNGDecContext *s, AVFrame *p)
 
static int decode_fctl_chunk (AVCodecContext *avctx, PNGDecContext *s, uint32_t length)
 
static void handle_p_frame_png (PNGDecContext *s, AVFrame *p)
 
static int handle_p_frame_apng (AVCodecContext *avctx, PNGDecContext *s, AVFrame *p)
 
static int decode_frame_common (AVCodecContext *avctx, PNGDecContext *s, AVFrame *p, AVPacket *avpkt)
 
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]
 

Macro Definition Documentation

◆ UNROLL1

#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 213 of file pngdec.c.

◆ UNROLL_FILTER

#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 236 of file pngdec.c.

◆ OP_SUB

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

◆ OP_AVG

#define OP_AVG (   x,
  s,
 
)    (((((x) + (l)) >> 1) + (s)) & 0xff)

◆ YUV2RGB

#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 308 of file pngdec.c.

◆ FAST_DIV255

#define FAST_DIV255 (   x)    ((((x) + 128) * 257) >> 16)

Definition at line 1059 of file pngdec.c.

Enumeration Type Documentation

◆ PNGHeaderState

Enumerator
PNG_IHDR 
PNG_PLTE 

Definition at line 40 of file pngdec.c.

◆ PNGImageState

Enumerator
PNG_IDAT 
PNG_ALLIMAGE 

Definition at line 45 of file pngdec.c.

Function Documentation

◆ png_put_interlaced_row()

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 115 of file pngdec.c.

Referenced by png_handle_row().

◆ ff_add_png_paeth_prediction()

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

Definition at line 185 of file pngdec.c.

Referenced by ff_pngdsp_init(), and png_filter_row().

◆ 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 251 of file pngdec.c.

Referenced by png_handle_row().

◆ png_handle_row()

static void png_handle_row ( PNGDecContext s)
static

Definition at line 323 of file pngdec.c.

Referenced by png_decode_idat().

◆ png_decode_idat()

static int png_decode_idat ( PNGDecContext s,
int  length 
)
static

Definition at line 404 of file pngdec.c.

Referenced by decode_idat_chunk().

◆ decode_zbuf()

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

Definition at line 434 of file pngdec.c.

Referenced by decode_iccp_chunk(), and decode_text_chunk().

◆ iso88591_to_utf8()

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

Definition at line 478 of file pngdec.c.

Referenced by decode_text_chunk().

◆ decode_text_chunk()

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

Definition at line 502 of file pngdec.c.

Referenced by decode_frame_common().

◆ decode_ihdr_chunk()

static int decode_ihdr_chunk ( AVCodecContext avctx,
PNGDecContext s,
uint32_t  length 
)
static

Definition at line 550 of file pngdec.c.

Referenced by decode_frame_common().

◆ decode_phys_chunk()

static int decode_phys_chunk ( AVCodecContext avctx,
PNGDecContext s 
)
static

Definition at line 602 of file pngdec.c.

Referenced by decode_frame_common().

◆ decode_idat_chunk()

static int decode_idat_chunk ( AVCodecContext avctx,
PNGDecContext s,
uint32_t  length,
AVFrame p 
)
static

Definition at line 618 of file pngdec.c.

Referenced by decode_frame_common().

◆ decode_plte_chunk()

static int decode_plte_chunk ( AVCodecContext avctx,
PNGDecContext s,
uint32_t  length 
)
static

Definition at line 773 of file pngdec.c.

Referenced by decode_frame_common().

◆ decode_trns_chunk()

static int decode_trns_chunk ( AVCodecContext avctx,
PNGDecContext s,
uint32_t  length 
)
static

Definition at line 796 of file pngdec.c.

Referenced by decode_frame_common().

◆ decode_iccp_chunk()

static int decode_iccp_chunk ( PNGDecContext s,
int  length,
AVFrame f 
)
static

Definition at line 844 of file pngdec.c.

Referenced by decode_frame_common().

◆ handle_small_bpp()

static void handle_small_bpp ( PNGDecContext s,
AVFrame p 
)
static

Definition at line 889 of file pngdec.c.

Referenced by decode_frame_common().

◆ decode_fctl_chunk()

static int decode_fctl_chunk ( AVCodecContext avctx,
PNGDecContext s,
uint32_t  length 
)
static

Definition at line 962 of file pngdec.c.

Referenced by decode_frame_common().

◆ handle_p_frame_png()

static void handle_p_frame_png ( PNGDecContext s,
AVFrame p 
)
static

Definition at line 1041 of file pngdec.c.

Referenced by decode_frame_common().

◆ handle_p_frame_apng()

static int handle_p_frame_apng ( AVCodecContext avctx,
PNGDecContext s,
AVFrame p 
)
static

Definition at line 1061 of file pngdec.c.

Referenced by decode_frame_common().

◆ decode_frame_common()

static int decode_frame_common ( AVCodecContext avctx,
PNGDecContext s,
AVFrame p,
AVPacket avpkt 
)
static

Definition at line 1174 of file pngdec.c.

◆ png_dec_init()

static av_cold int png_dec_init ( AVCodecContext avctx)
static

Definition at line 1726 of file pngdec.c.

◆ png_dec_end()

static av_cold int png_dec_end ( AVCodecContext avctx)
static

Definition at line 1754 of file pngdec.c.

Variable Documentation

◆ png_pass_mask

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

Definition at line 98 of file pngdec.c.

Referenced by png_put_interlaced_row().

◆ png_pass_dsp_ymask

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

Definition at line 103 of file pngdec.c.

Referenced by png_handle_row().

◆ png_pass_dsp_mask

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

Definition at line 108 of file pngdec.c.

Referenced by png_put_interlaced_row().

r
const char * r
Definition: vf_curves.c:114
b
#define b
Definition: input.c:41
src
#define src
Definition: vp8dsp.c:254
g
const char * g
Definition: vf_curves.c:115
op
static int op(uint8_t **dst, const uint8_t *dst_end, GetByteContext *gb, int pixel, int count, int *x, int width, int linesize)
Perform decode operation.
Definition: anm.c:78
TYPE
#define TYPE
Definition: ffv1.h:196
size
int size
Definition: twinvq_data.h:11134
a
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
Definition: undefined.txt:41
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:259
alpha
static const int16_t alpha[]
Definition: ilbcdata.h:55