FFmpeg
Loading...
Searching...
No Matches
proresdec.c File Reference

Known FOURCCs: 'apch' (HQ), 'apcn' (SD), 'apcs' (LT), 'apco' (Proxy), 'ap4h' (4444), 'ap4x' (4444 XQ) More...

#include "config_components.h"
#include "libavutil/internal.h"
#include "libavutil/mem.h"
#include "libavutil/mem_internal.h"
#include "avcodec.h"
#include "codec_internal.h"
#include "decode.h"
#include "get_bits.h"
#include "hwaccel_internal.h"
#include "hwconfig.h"
#include "idctdsp.h"
#include "profiles.h"
#include "proresdec.h"
#include "proresdata.h"
#include "thread.h"

Go to the source code of this file.

Macros

#define ALPHA_SHIFT_16_TO_10(alpha_val)
 
#define ALPHA_SHIFT_8_TO_10(alpha_val)
 
#define ALPHA_SHIFT_16_TO_12(alpha_val)
 
#define ALPHA_SHIFT_8_TO_12(alpha_val)
 
#define HWACCEL_MAX   (CONFIG_PRORES_VIDEOTOOLBOX_HWACCEL + CONFIG_PRORES_VULKAN_HWACCEL)
 
#define DECODE_CODEWORD(val, codebook, SKIP)
 
#define TOSIGNED(x)
 
#define FIRST_DC_CB   0xB8
 

Functions

static void unpack_alpha (GetBitContext *gb, uint16_t *dst, int num_coeffs, const int num_bits, const int decode_precision)
 
static void unpack_alpha_10 (GetBitContext *gb, uint16_t *dst, int num_coeffs, const int num_bits)
 
static void unpack_alpha_12 (GetBitContext *gb, uint16_t *dst, int num_coeffs, const int num_bits)
 
static av_cold int decode_init (AVCodecContext *avctx)
 
static int decode_frame_header (ProresContext *ctx, const uint8_t *buf, const int data_size, AVCodecContext *avctx)
 
static int decode_picture_header (AVCodecContext *avctx, const uint8_t *buf, const int buf_size)
 
static av_always_inline int decode_dc_coeffs (GetBitContext *gb, int16_t *out, int blocks_per_slice)
 
static av_always_inline int decode_ac_coeffs (AVCodecContext *avctx, GetBitContext *gb, int16_t *out, int blocks_per_slice)
 
static int decode_slice_luma (AVCodecContext *avctx, SliceContext *slice, uint16_t *dst, int dst_stride, const uint8_t *buf, unsigned buf_size, const int16_t *qmat)
 
static int decode_slice_chroma (AVCodecContext *avctx, SliceContext *slice, uint16_t *dst, int dst_stride, const uint8_t *buf, unsigned buf_size, const int16_t *qmat, int log2_blocks_per_mb)
 
static void decode_slice_alpha (const ProresContext *ctx, uint16_t *dst, int dst_stride, const uint8_t *buf, int buf_size, int blocks_per_slice)
 Decode alpha slice plane.
 
static int decode_slice_thread (AVCodecContext *avctx, void *arg, int jobnr, int threadnr)
 
static int decode_picture (AVCodecContext *avctx)
 
static int decode_frame (AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *avpkt)
 
static av_cold int decode_close (AVCodecContext *avctx)
 

Variables

static const uint8_t dc_codebook [7] = { 0x04, 0x28, 0x28, 0x4D, 0x4D, 0x70, 0x70}
 
static const uint8_t run_to_cb [16] = { 0x06, 0x06, 0x05, 0x05, 0x04, 0x29, 0x29, 0x29, 0x29, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x4C }
 
static const uint8_t lev_to_cb [10] = { 0x04, 0x0A, 0x05, 0x06, 0x04, 0x28, 0x28, 0x28, 0x28, 0x4C }
 
const FFCodec ff_prores_decoder
 

Detailed Description

Known FOURCCs: 'apch' (HQ), 'apcn' (SD), 'apcs' (LT), 'apco' (Proxy), 'ap4h' (4444), 'ap4x' (4444 XQ)

Definition in file proresdec.c.

Macro Definition Documentation

◆ ALPHA_SHIFT_16_TO_10

#define ALPHA_SHIFT_16_TO_10 ( alpha_val)
Value:
(alpha_val >> 6)

Definition at line 47 of file proresdec.c.

Referenced by unpack_alpha().

◆ ALPHA_SHIFT_8_TO_10

#define ALPHA_SHIFT_8_TO_10 ( alpha_val)
Value:
((alpha_val << 2) | (alpha_val >> 6))

Definition at line 48 of file proresdec.c.

Referenced by unpack_alpha().

◆ ALPHA_SHIFT_16_TO_12

#define ALPHA_SHIFT_16_TO_12 ( alpha_val)
Value:
(alpha_val >> 4)

Definition at line 49 of file proresdec.c.

Referenced by unpack_alpha().

◆ ALPHA_SHIFT_8_TO_12

#define ALPHA_SHIFT_8_TO_12 ( alpha_val)
Value:
((alpha_val << 4) | (alpha_val >> 4))

Definition at line 50 of file proresdec.c.

Referenced by unpack_alpha().

◆ HWACCEL_MAX

#define HWACCEL_MAX   (CONFIG_PRORES_VIDEOTOOLBOX_HWACCEL + CONFIG_PRORES_VULKAN_HWACCEL)

◆ DECODE_CODEWORD

#define DECODE_CODEWORD ( val,
codebook,
SKIP )
Value:
do { \
unsigned int rice_order, exp_order, switch_bits; \
unsigned int q, buf, bits; \
\
UPDATE_CACHE_32(re, gb); /* We really need 32 bits */ \
buf = GET_CACHE(re, gb); \
\
/* number of bits to switch between rice and exp golomb */ \
switch_bits = codebook & 3; \
rice_order = codebook >> 5; \
exp_order = (codebook >> 2) & 7; \
\
q = 31 - av_log2(buf); \
\
if (q > switch_bits) { /* exp golomb */ \
bits = exp_order - switch_bits + (q<<1); \
if (bits > 31) \
val = SHOW_UBITS(re, gb, bits) - (1 << exp_order) + \
((switch_bits + 1) << rice_order); \
SKIP(re, gb, bits); \
} else if (rice_order) { \
SKIP_BITS(re, gb, q+1); \
val = (q << rice_order) + SHOW_UBITS(re, gb, rice_order); \
SKIP(re, gb, rice_order); \
} else { \
val = q; \
SKIP(re, gb, q+1); \
} \
} while (0)
static double val(void *priv, double ch)
Definition aeval.c:77
static const unsigned codebook[256][2]
Definition cfhdenc.c:41
static const uint8_t bits[8]
Definition fastaudio.c:100
#define GET_CACHE(name, gb)
Definition get_bits.h:251
#define SHOW_UBITS(name, gb, num)
Definition get_bits.h:247
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition error.h:61
#define av_log2
Definition intmath.h:84

Definition at line 423 of file proresdec.c.

Referenced by decode_ac_coeffs(), and decode_dc_coeffs().

◆ TOSIGNED

#define TOSIGNED ( x)
Value:
(((x) >> 1) ^ (-((x) & 1)))

Definition at line 455 of file proresdec.c.

Referenced by decode_dc_coeffs().

◆ FIRST_DC_CB

#define FIRST_DC_CB   0xB8

Definition at line 457 of file proresdec.c.

Function Documentation

◆ unpack_alpha()

static void unpack_alpha ( GetBitContext * gb,
uint16_t * dst,
int num_coeffs,
const int num_bits,
const int decode_precision )
inlinestatic

Definition at line 52 of file proresdec.c.

Referenced by unpack_alpha_10(), and unpack_alpha_12().

◆ unpack_alpha_10()

static void unpack_alpha_10 ( GetBitContext * gb,
uint16_t * dst,
int num_coeffs,
const int num_bits )
static

Definition at line 113 of file proresdec.c.

Referenced by decode_init().

◆ unpack_alpha_12()

static void unpack_alpha_12 ( GetBitContext * gb,
uint16_t * dst,
int num_coeffs,
const int num_bits )
static

Definition at line 123 of file proresdec.c.

Referenced by decode_init().

◆ decode_init()

static av_cold int decode_init ( AVCodecContext * avctx)
static

Definition at line 133 of file proresdec.c.

◆ decode_frame_header()

static int decode_frame_header ( ProresContext * ctx,
const uint8_t * buf,
const int data_size,
AVCodecContext * avctx )
static

Definition at line 185 of file proresdec.c.

Referenced by decode_frame().

◆ decode_picture_header()

static int decode_picture_header ( AVCodecContext * avctx,
const uint8_t * buf,
const int buf_size )
static

Definition at line 315 of file proresdec.c.

Referenced by decode_frame().

◆ decode_dc_coeffs()

static av_always_inline int decode_dc_coeffs ( GetBitContext * gb,
int16_t * out,
int blocks_per_slice )
static

Definition at line 461 of file proresdec.c.

Referenced by decode_slice_chroma(), and decode_slice_luma().

◆ decode_ac_coeffs()

static av_always_inline int decode_ac_coeffs ( AVCodecContext * avctx,
GetBitContext * gb,
int16_t * out,
int blocks_per_slice )
static

Definition at line 492 of file proresdec.c.

Referenced by decode_slice_chroma(), and decode_slice_luma().

◆ decode_slice_luma()

static int decode_slice_luma ( AVCodecContext * avctx,
SliceContext * slice,
uint16_t * dst,
int dst_stride,
const uint8_t * buf,
unsigned buf_size,
const int16_t * qmat )
static

Definition at line 535 of file proresdec.c.

Referenced by decode_slice_thread().

◆ decode_slice_chroma()

static int decode_slice_chroma ( AVCodecContext * avctx,
SliceContext * slice,
uint16_t * dst,
int dst_stride,
const uint8_t * buf,
unsigned buf_size,
const int16_t * qmat,
int log2_blocks_per_mb )
static

Definition at line 569 of file proresdec.c.

Referenced by decode_slice_thread().

◆ decode_slice_alpha()

static void decode_slice_alpha ( const ProresContext * ctx,
uint16_t * dst,
int dst_stride,
const uint8_t * buf,
int buf_size,
int blocks_per_slice )
static

Decode alpha slice plane.

Definition at line 609 of file proresdec.c.

Referenced by decode_slice_thread().

◆ decode_slice_thread()

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

Definition at line 639 of file proresdec.c.

◆ decode_picture()

static int decode_picture ( AVCodecContext * avctx)
static

Definition at line 742 of file proresdec.c.

Referenced by decode_frame().

◆ decode_frame()

static int decode_frame ( AVCodecContext * avctx,
AVFrame * frame,
int * got_frame,
AVPacket * avpkt )
static

Definition at line 761 of file proresdec.c.

◆ decode_close()

static av_cold int decode_close ( AVCodecContext * avctx)
static

Definition at line 844 of file proresdec.c.

Variable Documentation

◆ dc_codebook

const uint8_t dc_codebook[7] = { 0x04, 0x28, 0x28, 0x4D, 0x4D, 0x70, 0x70}
static

Definition at line 459 of file proresdec.c.

Referenced by decode_comp(), and decode_dc_coeffs().

◆ run_to_cb

const uint8_t run_to_cb[16] = { 0x06, 0x06, 0x05, 0x05, 0x04, 0x29, 0x29, 0x29, 0x29, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x4C }
static

Definition at line 489 of file proresdec.c.

Referenced by decode_ac_coeffs().

◆ lev_to_cb

const uint8_t lev_to_cb[10] = { 0x04, 0x0A, 0x05, 0x06, 0x04, 0x28, 0x28, 0x28, 0x28, 0x4C }
static

Definition at line 490 of file proresdec.c.

Referenced by decode_ac_coeffs().

◆ ff_prores_decoder

const FFCodec ff_prores_decoder
Initial value:
= {
.p.name = "prores",
CODEC_LONG_NAME("Apple ProRes (iCodec Pro)"),
.p.type = AVMEDIA_TYPE_VIDEO,
.priv_data_size = sizeof(ProresContext),
UPDATE_THREAD_CONTEXT(update_thread_context),
}
static av_cold void close(AVCodecParserContext *s)
Definition apv_parser.c:197
#define UPDATE_THREAD_CONTEXT(func)
#define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM
The decoder extracts and fills its parameters even if the frame is skipped due to the skip_frame sett...
#define FF_CODEC_DECODE_CB(func)
#define CODEC_LONG_NAME(str)
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition codec.h:49
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition codec.h:102
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition codec.h:98
@ AV_CODEC_ID_PRORES
Definition codec_id.h:198
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
static av_cold int decode_init(AVCodecContext *avctx)
Definition 4xm.c:998
static int decode_frame(AVCodecContext *avctx, AVFrame *picture, int *got_frame, AVPacket *avpkt)
Definition 4xm.c:837
static av_cold int decode_close(AVCodecContext *avctx)
Definition aacdec.c:1220
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88
const AVProfile ff_prores_profiles[]
Definition profiles.c:175

Definition at line 867 of file proresdec.c.