FFmpeg
Macros | Enumerations | Functions | Variables
hqx.c File Reference
#include <inttypes.h>
#include "libavutil/imgutils.h"
#include "libavutil/intreadwrite.h"
#include "avcodec.h"
#include "canopus.h"
#include "codec_internal.h"
#include "get_bits.h"
#include "thread.h"
#include "hqx.h"
#include "hqxdsp.h"

Go to the source code of this file.

Macros

#define HQX_HEADER_SIZE   59
 

Enumerations

enum  HQXFormat { HQX_422 = 0, HQX_444, HQX_422A, HQX_444A }
 

Functions

static void put_blocks (HQXContext *ctx, int plane, int x, int y, int ilace, int16_t *block0, int16_t *block1, const uint8_t *quant)
 
static void hqx_get_ac (GetBitContext *gb, const HQXAC *ac, int *run, int *lev)
 
static int decode_block (GetBitContext *gb, VLC *vlc, const int *quants, int dcb, int16_t block[64], int *last_dc)
 
static int hqx_decode_422 (HQXContext *ctx, int slice_no, int x, int y)
 
static int hqx_decode_422a (HQXContext *ctx, int slice_no, int x, int y)
 
static int hqx_decode_444 (HQXContext *ctx, int slice_no, int x, int y)
 
static int hqx_decode_444a (HQXContext *ctx, int slice_no, int x, int y)
 
static int decode_slice (HQXContext *ctx, int slice_no)
 
static int decode_slice_thread (AVCodecContext *avctx, void *arg, int slice_no, int threadnr)
 
static int hqx_decode_frame (AVCodecContext *avctx, AVFrame *frame, int *got_picture_ptr, AVPacket *avpkt)
 
static av_cold int hqx_decode_close (AVCodecContext *avctx)
 
static av_cold int hqx_decode_init (AVCodecContext *avctx)
 

Variables

static const int hqx_quants [16][4]
 
static const uint8_t hqx_quant_luma [64]
 
static const uint8_t hqx_quant_chroma [64]
 
static const int shuffle_16 [16]
 
const FFCodec ff_hqx_decoder
 

Macro Definition Documentation

◆ HQX_HEADER_SIZE

#define HQX_HEADER_SIZE   59

Definition at line 43 of file hqx.c.

Enumeration Type Documentation

◆ HQXFormat

enum HQXFormat
Enumerator
HQX_422 
HQX_444 
HQX_422A 
HQX_444A 

Definition at line 36 of file hqx.c.

Function Documentation

◆ put_blocks()

static void put_blocks ( HQXContext ctx,
int  plane,
int  x,
int  y,
int  ilace,
int16_t *  block0,
int16_t *  block1,
const uint8_t *  quant 
)
inlinestatic

Definition at line 84 of file hqx.c.

Referenced by hqx_decode_422(), hqx_decode_422a(), hqx_decode_444(), and hqx_decode_444a().

◆ hqx_get_ac()

static void hqx_get_ac ( GetBitContext gb,
const HQXAC ac,
int run,
int lev 
)
inlinestatic

Definition at line 99 of file hqx.c.

Referenced by decode_block().

◆ decode_block()

static int decode_block ( GetBitContext gb,
VLC vlc,
const int quants,
int  dcb,
int16_t  block[64],
int last_dc 
)
static

Definition at line 115 of file hqx.c.

Referenced by hqx_decode_422(), hqx_decode_422a(), hqx_decode_444(), and hqx_decode_444a().

◆ hqx_decode_422()

static int hqx_decode_422 ( HQXContext ctx,
int  slice_no,
int  x,
int  y 
)
static

Definition at line 154 of file hqx.c.

Referenced by hqx_decode_frame().

◆ hqx_decode_422a()

static int hqx_decode_422a ( HQXContext ctx,
int  slice_no,
int  x,
int  y 
)
static

Definition at line 188 of file hqx.c.

Referenced by hqx_decode_frame().

◆ hqx_decode_444()

static int hqx_decode_444 ( HQXContext ctx,
int  slice_no,
int  x,
int  y 
)
static

Definition at line 238 of file hqx.c.

Referenced by hqx_decode_frame().

◆ hqx_decode_444a()

static int hqx_decode_444a ( HQXContext ctx,
int  slice_no,
int  x,
int  y 
)
static

Definition at line 274 of file hqx.c.

Referenced by hqx_decode_frame().

◆ decode_slice()

static int decode_slice ( HQXContext ctx,
int  slice_no 
)
static

Definition at line 327 of file hqx.c.

Referenced by decode_slice_thread().

◆ decode_slice_thread()

static int decode_slice_thread ( AVCodecContext avctx,
void *  arg,
int  slice_no,
int  threadnr 
)
static

Definition at line 380 of file hqx.c.

Referenced by hqx_decode_frame().

◆ hqx_decode_frame()

static int hqx_decode_frame ( AVCodecContext avctx,
AVFrame frame,
int got_picture_ptr,
AVPacket avpkt 
)
static

Definition at line 403 of file hqx.c.

◆ hqx_decode_close()

static av_cold int hqx_decode_close ( AVCodecContext avctx)
static

Definition at line 515 of file hqx.c.

◆ hqx_decode_init()

static av_cold int hqx_decode_init ( AVCodecContext avctx)
static

Definition at line 528 of file hqx.c.

Variable Documentation

◆ hqx_quants

const int hqx_quants[16][4]
static
Initial value:
= {
{ 0x1, 0x2, 0x4, 0x8 }, { 0x1, 0x3, 0x6, 0xC },
{ 0x2, 0x4, 0x8, 0x10 }, { 0x3, 0x6, 0xC, 0x18 },
{ 0x4, 0x8, 0x10, 0x20 }, { 0x6, 0xC, 0x18, 0x30 },
{ 0x8, 0x10, 0x20, 0x40 },
{ 0xA, 0x14, 0x28, 0x50 },
{ 0xC, 0x18, 0x30, 0x60 },
{ 0x10, 0x20, 0x40, 0x80 }, { 0x18, 0x30, 0x60, 0xC0 },
{ 0x20, 0x40, 0x80, 0x100 }, { 0x30, 0x60, 0xC0, 0x180 },
{ 0x40, 0x80, 0x100, 0x200 }, { 0x60, 0xC0, 0x180, 0x300 },
{ 0x80, 0x100, 0x200, 0x400 }
}

Definition at line 49 of file hqx.c.

Referenced by hqx_decode_422(), hqx_decode_422a(), hqx_decode_444(), and hqx_decode_444a().

◆ hqx_quant_luma

const uint8_t hqx_quant_luma[64]
static
Initial value:
= {
16, 16, 16, 19, 19, 19, 42, 44,
16, 16, 19, 19, 19, 38, 43, 45,
16, 19, 19, 19, 40, 41, 45, 48,
19, 19, 19, 40, 41, 42, 46, 49,
19, 19, 40, 41, 42, 43, 48, 101,
19, 38, 41, 42, 43, 44, 98, 104,
42, 43, 45, 46, 48, 98, 109, 116,
44, 45, 48, 49, 101, 104, 116, 123,
}

Definition at line 62 of file hqx.c.

Referenced by hqx_decode_422(), hqx_decode_422a(), hqx_decode_444(), and hqx_decode_444a().

◆ hqx_quant_chroma

const uint8_t hqx_quant_chroma[64]
static
Initial value:
= {
16, 16, 19, 25, 26, 26, 42, 44,
16, 19, 25, 25, 26, 38, 43, 91,
19, 25, 26, 27, 40, 41, 91, 96,
25, 25, 27, 40, 41, 84, 93, 197,
26, 26, 40, 41, 84, 86, 191, 203,
26, 38, 41, 84, 86, 177, 197, 209,
42, 43, 91, 93, 191, 197, 219, 232,
44, 91, 96, 197, 203, 209, 232, 246,
}

Definition at line 73 of file hqx.c.

Referenced by hqx_decode_422(), hqx_decode_422a(), hqx_decode_444(), and hqx_decode_444a().

◆ shuffle_16

const int shuffle_16[16]
static
Initial value:
= {
0, 5, 11, 14, 2, 7, 9, 13, 1, 4, 10, 15, 3, 6, 8, 12
}

Definition at line 323 of file hqx.c.

Referenced by decode_slice().

◆ ff_hqx_decoder

const FFCodec ff_hqx_decoder
Initial value:
= {
.p.name = "hqx",
CODEC_LONG_NAME("Canopus HQX"),
.p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_HQX,
.priv_data_size = sizeof(HQXContext),
.close = hqx_decode_close,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
}

Definition at line 537 of file hqx.c.

hqx_decode_init
static av_cold int hqx_decode_init(AVCodecContext *avctx)
Definition: hqx.c:528
FF_CODEC_CAP_INIT_CLEANUP
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: codec_internal.h:42
hqx_decode_close
static av_cold int hqx_decode_close(AVCodecContext *avctx)
Definition: hqx.c:515
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:306
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts_bsf.c:365
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:272
AV_CODEC_CAP_FRAME_THREADS
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: codec.h:110
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
AV_CODEC_CAP_SLICE_THREADS
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: codec.h:114
HQXContext
Definition: hqx.h:63
AV_CODEC_ID_HQX
@ AV_CODEC_ID_HQX
Definition: codec_id.h:238
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
hqx_decode_frame
static int hqx_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_picture_ptr, AVPacket *avpkt)
Definition: hqx.c:403