51 int plane,
int x,
int y,
int ilace,
52 int16_t *block0, int16_t *
block1)
56 c->hqhqadsp.idct_put(p + y * pic->
linesize[plane],
57 pic->
linesize[plane] << ilace, block0);
58 c->hqhqadsp.idct_put(p + (y + (ilace ? 1 : 8)) * pic->
linesize[plane],
63 int qsel,
int is_chroma,
int is_hqa)
102 for (
i = 0;
i < 8;
i++) {
117 int prof_num,
size_t data_size)
122 uint32_t slice_off[21];
123 int slice, start_off, next_off,
i, ret;
137 ctx->avctx->bits_per_raw_sample = 8;
146 slice_off[
i] = bytestream2_get_be24(&
ctx->gbc) - 4;
149 for (slice = 0; slice <
profile->num_slices; slice++) {
150 start_off = next_off;
154 if (slice_off[slice] < (
profile->num_slices + 1) * 3 ||
155 slice_off[slice] >= slice_off[slice + 1] ||
156 slice_off[slice + 1] > data_size) {
162 (slice_off[slice + 1] - slice_off[slice]) * 8);
164 for (
i = 0;
i < (next_off - start_off) *
profile->tab_w;
i++) {
168 "Error decoding macroblock %d at slice %d.\n",
i, slice);
187 cbp =
get_vlc2(gb,
c->hqa_cbp_vlc.table, 5, 1);
189 for (
i = 0;
i < 12;
i++)
190 memset(
c->block[
i], 0,
sizeof(*
c->block));
191 for (
i = 0;
i < 12;
i++)
192 c->block[
i][0] = -128 * (1 << 6);
202 for (
i = 0;
i < 12;
i++) {
203 if (!(cbp & (1 <<
i)))
222 int quant,
int slice_no,
int w,
int h)
227 for (
i = 0;
i <
h;
i += 16) {
228 off = (slice_no * 16 +
i * 3) & 0x70;
229 for (j = off; j <
w; j += 128) {
233 "Error decoding macroblock at %dx%d.\n",
i, j);
245 const int num_slices = 8;
246 uint32_t slice_off[9];
254 width = bytestream2_get_be16(&
ctx->gbc);
255 height = bytestream2_get_be16(&
ctx->gbc);
263 ctx->avctx->bits_per_raw_sample = 8;
268 quant = bytestream2_get_byte(&
ctx->gbc);
272 "Invalid quantization matrix %d.\n",
quant);
281 for (
i = 0;
i < num_slices + 1;
i++)
282 slice_off[
i] = bytestream2_get_be32(&
ctx->gbc) - 4;
284 for (slice = 0; slice < num_slices; slice++) {
285 if (slice_off[slice] < (num_slices + 1) * 3 ||
286 slice_off[slice] >= slice_off[slice + 1] ||
287 slice_off[slice + 1] > data_size) {
293 (slice_off[slice + 1] - slice_off[slice]) * 8);
309 unsigned int data_size;
319 info_tag = bytestream2_peek_le32(&
ctx->gbc);
320 if (info_tag ==
MKTAG(
'I',
'N',
'F',
'O')) {
323 info_size = bytestream2_get_le32(&
ctx->gbc);
342 tag = bytestream2_get_le32(&
ctx->gbc);
343 if ((
tag & 0x00FFFFFF) == (
MKTAG(
'U',
'V',
'C',
' ') & 0x00FFFFFF)) {
345 }
else if (
tag ==
MKTAG(
'H',
'Q',
'A',
'1')) {
static double val(void *priv, double ch)
Macro definitions for various function/variable attributes.
Libavcodec external API header.
static av_cold int init(AVCodecContext *avctx)
void ff_free_vlc(VLC *vlc)
static av_always_inline int bytestream2_get_bytes_left(GetByteContext *g)
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
static av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
int ff_canopus_parse_info_tag(AVCodecContext *avctx, const uint8_t *src, size_t size)
#define MKTAG(a, b, c, d)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
bitstream reader API header.
static int get_sbits(GetBitContext *s, int n)
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
static int get_bits_left(GetBitContext *gb)
static unsigned int get_bits1(GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_VERBOSE
Detailed information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
@ AV_PICTURE_TYPE_I
Intra.
static int hq_decode_mb(HQContext *c, AVFrame *pic, GetBitContext *gb, int x, int y)
static int hq_decode_block(HQContext *c, GetBitContext *gb, int16_t block[64], int qsel, int is_chroma, int is_hqa)
AVCodec ff_hq_hqa_decoder
static int hq_decode_frame(HQContext *ctx, AVFrame *pic, int prof_num, size_t data_size)
static av_cold int hq_hqa_decode_close(AVCodecContext *avctx)
static int hqa_decode_frame(HQContext *ctx, AVFrame *pic, size_t data_size)
static void put_blocks(HQContext *c, AVFrame *pic, int plane, int x, int y, int ilace, int16_t *block0, int16_t *block1)
static int hqa_decode_mb(HQContext *c, AVFrame *pic, int qgroup, GetBitContext *gb, int x, int y)
static int hqa_decode_slice(HQContext *ctx, AVFrame *pic, GetBitContext *gb, int quant, int slice_no, int w, int h)
static int hq_hqa_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
static av_cold int hq_hqa_decode_init(AVCodecContext *avctx)
const HQProfile ff_hq_profile[NUM_HQ_PROFILES]
const int32_t *const ff_hq_quants[16][2][4]
const uint8_t ff_hq_ac_skips[NUM_HQ_AC_ENTRIES]
int ff_hq_init_vlcs(HQContext *c)
const int16_t ff_hq_ac_syms[NUM_HQ_AC_ENTRIES]
av_cold void ff_hqdsp_init(HQDSPContext *c)
HQ/HQA variant of AAN IDCT It differs from the standard AAN IDCT in precision and in the second stage...
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context.
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
const uint8_t ff_zigzag_direct[64]
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
@ AV_PIX_FMT_YUVA422P
planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
main external API structure.
const char * name
Name of the codec implementation.
This structure describes decoded (raw) audio or video data.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int key_frame
1 -> keyframe, 0-> not
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
enum AVPictureType pict_type
Picture type of the frame.
This structure stores compressed data.
#define avpriv_request_sample(...)
static int16_t block1[64]