FFmpeg  4.4
Data Structures | Macros | Enumerations | Functions | Variables
on2avc.c File Reference
#include "libavutil/channel_layout.h"
#include "libavutil/ffmath.h"
#include "libavutil/float_dsp.h"
#include "libavutil/mem_internal.h"
#include "avcodec.h"
#include "bytestream.h"
#include "fft.h"
#include "get_bits.h"
#include "internal.h"
#include "on2avcdata.h"

Go to the source code of this file.

Data Structures

struct  On2AVCContext
 

Macros

#define ON2AVC_SUBFRAME_SIZE   1024
 
#define CMUL1_R(s, t, is, it)    s[is + 0] * t[it + 0] - s[is + 1] * t[it + 1]
 
#define CMUL1_I(s, t, is, it)    s[is + 0] * t[it + 1] + s[is + 1] * t[it + 0]
 
#define CMUL2_R(s, t, is, it)    s[is + 0] * t[it + 0] + s[is + 1] * t[it + 1]
 
#define CMUL2_I(s, t, is, it)    s[is + 0] * t[it + 1] - s[is + 1] * t[it + 0]
 
#define CMUL0(dst, id, s0, s1, s2, s3, t0, t1, t2, t3, is, it)
 
#define CMUL1(dst, s0, s1, s2, s3, t0, t1, t2, t3, is, it)
 
#define CMUL2(dst, s0, s1, s2, s3, t0, t1, t2, t3, is, it)
 

Enumerations

enum  WindowTypes {
  WINDOW_TYPE_LONG = 0 , WINDOW_TYPE_LONG_STOP , WINDOW_TYPE_LONG_START , WINDOW_TYPE_8SHORT = 3 ,
  WINDOW_TYPE_EXT4 , WINDOW_TYPE_EXT5 , WINDOW_TYPE_EXT6 , WINDOW_TYPE_EXT7
}
 

Functions

static void on2avc_read_ms_info (On2AVCContext *c, GetBitContext *gb)
 
static int on2avc_decode_band_types (On2AVCContext *c, GetBitContext *gb)
 
static int on2avc_decode_band_scales (On2AVCContext *c, GetBitContext *gb)
 
static float on2avc_scale (int v, float scale)
 
static int on2avc_decode_quads (On2AVCContext *c, GetBitContext *gb, float *dst, int dst_size, int type, float band_scale)
 
static int get_egolomb (GetBitContext *gb)
 
static int on2avc_decode_pairs (On2AVCContext *c, GetBitContext *gb, float *dst, int dst_size, int type, float band_scale)
 
static int on2avc_read_channel_data (On2AVCContext *c, GetBitContext *gb, int ch)
 
static int on2avc_apply_ms (On2AVCContext *c)
 
static void zero_head_and_tail (float *src, int len, int order0, int order1)
 
static void pretwiddle (float *src, float *dst, int dst_len, int tab_step, int step, int order0, int order1, const double *const *tabs)
 
static void twiddle (float *src1, float *src2, int src2_len, const double *tab, int tab_len, int step, int order0, int order1, const double *const *tabs)
 
static void combine_fft (float *s0, float *s1, float *s2, float *s3, float *dst, const float *t0, const float *t1, const float *t2, const float *t3, int len, int step)
 
static void wtf_end_512 (On2AVCContext *c, float *out, float *src, float *tmp0, float *tmp1)
 
static void wtf_end_1024 (On2AVCContext *c, float *out, float *src, float *tmp0, float *tmp1)
 
static void wtf_40 (On2AVCContext *c, float *out, float *src, int size)
 
static void wtf_44 (On2AVCContext *c, float *out, float *src, int size)
 
static int on2avc_reconstruct_channel_ext (On2AVCContext *c, AVFrame *dst, int offset)
 
static int on2avc_reconstruct_channel (On2AVCContext *c, int channel, AVFrame *dst, int offset)
 
static int on2avc_decode_subframe (On2AVCContext *c, const uint8_t *buf, int buf_size, AVFrame *dst, int offset)
 
static int on2avc_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
 
static av_cold void on2avc_free_vlcs (On2AVCContext *c)
 
static av_cold int on2avc_decode_init (AVCodecContext *avctx)
 
static av_cold int on2avc_decode_close (AVCodecContext *avctx)
 

Variables

AVCodec ff_on2avc_decoder
 

Macro Definition Documentation

◆ ON2AVC_SUBFRAME_SIZE

#define ON2AVC_SUBFRAME_SIZE   1024

Definition at line 36 of file on2avc.c.

◆ CMUL1_R

#define CMUL1_R (   s,
  t,
  is,
  it 
)     s[is + 0] * t[it + 0] - s[is + 1] * t[it + 1]

Definition at line 380 of file on2avc.c.

◆ CMUL1_I

#define CMUL1_I (   s,
  t,
  is,
  it 
)     s[is + 0] * t[it + 1] + s[is + 1] * t[it + 0]

Definition at line 382 of file on2avc.c.

◆ CMUL2_R

#define CMUL2_R (   s,
  t,
  is,
  it 
)     s[is + 0] * t[it + 0] + s[is + 1] * t[it + 1]

Definition at line 384 of file on2avc.c.

◆ CMUL2_I

#define CMUL2_I (   s,
  t,
  is,
  it 
)     s[is + 0] * t[it + 1] - s[is + 1] * t[it + 0]

Definition at line 386 of file on2avc.c.

◆ CMUL0

#define CMUL0 (   dst,
  id,
  s0,
  s1,
  s2,
  s3,
  t0,
  t1,
  t2,
  t3,
  is,
  it 
)
Value:
dst[id] = s0[is] * t0[it] + s1[is] * t1[it] \
+ s2[is] * t2[it] + s3[is] * t3[it]; \
dst[id + 1] = s0[is] * t0[it + 1] + s1[is] * t1[it + 1] \
+ s2[is] * t2[it + 1] + s3[is] * t3[it + 1];
#define is(width, name, range_min, range_max, subs,...)
Definition: cbs_h2645.c:286
enum AVCodecID id
#define s1
Definition: regdef.h:38
#define s3
Definition: regdef.h:40
#define t0
Definition: regdef.h:28
#define s2
Definition: regdef.h:39
#define t1
Definition: regdef.h:29
#define t3
Definition: regdef.h:31
#define s0
Definition: regdef.h:37
#define t2
Definition: regdef.h:30

Definition at line 389 of file on2avc.c.

◆ CMUL1

#define CMUL1 (   dst,
  s0,
  s1,
  s2,
  s3,
  t0,
  t1,
  t2,
  t3,
  is,
  it 
)
Value:
*dst++ = CMUL1_R(s0, t0, is, it) \
+ CMUL1_R(s1, t1, is, it) \
+ CMUL1_R(s2, t2, is, it) \
+ CMUL1_R(s3, t3, is, it); \
*dst++ = CMUL1_I(s0, t0, is, it) \
+ CMUL1_I(s1, t1, is, it) \
+ CMUL1_I(s2, t2, is, it) \
+ CMUL1_I(s3, t3, is, it);
#define CMUL1_R(s, t, is, it)
Definition: on2avc.c:380
#define CMUL1_I(s, t, is, it)
Definition: on2avc.c:382

Definition at line 395 of file on2avc.c.

◆ CMUL2

#define CMUL2 (   dst,
  s0,
  s1,
  s2,
  s3,
  t0,
  t1,
  t2,
  t3,
  is,
  it 
)
Value:
*dst++ = CMUL2_R(s0, t0, is, it) \
+ CMUL2_R(s1, t1, is, it) \
+ CMUL2_R(s2, t2, is, it) \
+ CMUL2_R(s3, t3, is, it); \
*dst++ = CMUL2_I(s0, t0, is, it) \
+ CMUL2_I(s1, t1, is, it) \
+ CMUL2_I(s2, t2, is, it) \
+ CMUL2_I(s3, t3, is, it);
#define CMUL2_I(s, t, is, it)
Definition: on2avc.c:386
#define CMUL2_R(s, t, is, it)
Definition: on2avc.c:384

Definition at line 405 of file on2avc.c.

Enumeration Type Documentation

◆ WindowTypes

Enumerator
WINDOW_TYPE_LONG 
WINDOW_TYPE_LONG_STOP 
WINDOW_TYPE_LONG_START 
WINDOW_TYPE_8SHORT 
WINDOW_TYPE_EXT4 
WINDOW_TYPE_EXT5 
WINDOW_TYPE_EXT6 
WINDOW_TYPE_EXT7 

Definition at line 38 of file on2avc.c.

Function Documentation

◆ on2avc_read_ms_info()

static void on2avc_read_ms_info ( On2AVCContext c,
GetBitContext gb 
)
static

Definition at line 90 of file on2avc.c.

Referenced by on2avc_decode_subframe().

◆ on2avc_decode_band_types()

static int on2avc_decode_band_types ( On2AVCContext c,
GetBitContext gb 
)
static

Definition at line 111 of file on2avc.c.

Referenced by on2avc_read_channel_data().

◆ on2avc_decode_band_scales()

static int on2avc_decode_band_scales ( On2AVCContext c,
GetBitContext gb 
)
static

Definition at line 141 of file on2avc.c.

Referenced by on2avc_read_channel_data().

◆ on2avc_scale()

static float on2avc_scale ( int  v,
float  scale 
)
inlinestatic

Definition at line 188 of file on2avc.c.

Referenced by on2avc_decode_pairs(), and on2avc_decode_quads().

◆ on2avc_decode_quads()

static int on2avc_decode_quads ( On2AVCContext c,
GetBitContext gb,
float *  dst,
int  dst_size,
int  type,
float  band_scale 
)
static

Definition at line 194 of file on2avc.c.

Referenced by on2avc_read_channel_data().

◆ get_egolomb()

static int get_egolomb ( GetBitContext gb)
inlinestatic

Definition at line 211 of file on2avc.c.

Referenced by on2avc_decode_pairs().

◆ on2avc_decode_pairs()

static int on2avc_decode_pairs ( On2AVCContext c,
GetBitContext gb,
float *  dst,
int  dst_size,
int  type,
float  band_scale 
)
static

Definition at line 227 of file on2avc.c.

Referenced by on2avc_read_channel_data().

◆ on2avc_read_channel_data()

static int on2avc_read_channel_data ( On2AVCContext c,
GetBitContext gb,
int  ch 
)
static

Definition at line 255 of file on2avc.c.

Referenced by on2avc_decode_subframe().

◆ on2avc_apply_ms()

static int on2avc_apply_ms ( On2AVCContext c)
static

Definition at line 292 of file on2avc.c.

Referenced by on2avc_decode_subframe().

◆ zero_head_and_tail()

static void zero_head_and_tail ( float *  src,
int  len,
int  order0,
int  order1 
)
static

Definition at line 317 of file on2avc.c.

Referenced by wtf_end_1024(), and wtf_end_512().

◆ pretwiddle()

static void pretwiddle ( float *  src,
float *  dst,
int  dst_len,
int  tab_step,
int  step,
int  order0,
int  order1,
const double *const *  tabs 
)
static

Definition at line 323 of file on2avc.c.

Referenced by twiddle(), wtf_end_1024(), and wtf_end_512().

◆ twiddle()

static void twiddle ( float *  src1,
float *  src2,
int  src2_len,
const double *  tab,
int  tab_len,
int  step,
int  order0,
int  order1,
const double *const *  tabs 
)
static

Definition at line 350 of file on2avc.c.

Referenced by wtf_40(), and wtf_44().

◆ combine_fft()

static void combine_fft ( float *  s0,
float *  s1,
float *  s2,
float *  s3,
float *  dst,
const float *  t0,
const float *  t1,
const float *  t2,
const float *  t3,
int  len,
int  step 
)
static

Definition at line 415 of file on2avc.c.

Referenced by wtf_end_1024(), and wtf_end_512().

◆ wtf_end_512()

static void wtf_end_512 ( On2AVCContext c,
float *  out,
float *  src,
float *  tmp0,
float *  tmp1 
)
static

Definition at line 464 of file on2avc.c.

Referenced by wtf_40(), and wtf_44().

◆ wtf_end_1024()

static void wtf_end_1024 ( On2AVCContext c,
float *  out,
float *  src,
float *  tmp0,
float *  tmp1 
)
static

Definition at line 497 of file on2avc.c.

Referenced by wtf_40(), and wtf_44().

◆ wtf_40()

static void wtf_40 ( On2AVCContext c,
float *  out,
float *  src,
int  size 
)
static

Definition at line 530 of file on2avc.c.

Referenced by on2avc_decode_init().

◆ wtf_44()

static void wtf_44 ( On2AVCContext c,
float *  out,
float *  src,
int  size 
)
static

Definition at line 616 of file on2avc.c.

Referenced by on2avc_decode_init().

◆ on2avc_reconstruct_channel_ext()

static int on2avc_reconstruct_channel_ext ( On2AVCContext c,
AVFrame dst,
int  offset 
)
static

Definition at line 690 of file on2avc.c.

Referenced by on2avc_decode_subframe().

◆ on2avc_reconstruct_channel()

static int on2avc_reconstruct_channel ( On2AVCContext c,
int  channel,
AVFrame dst,
int  offset 
)
static

Definition at line 735 of file on2avc.c.

Referenced by on2avc_decode_subframe().

◆ on2avc_decode_subframe()

static int on2avc_decode_subframe ( On2AVCContext c,
const uint8_t buf,
int  buf_size,
AVFrame dst,
int  offset 
)
static

Definition at line 800 of file on2avc.c.

Referenced by on2avc_decode_frame().

◆ on2avc_decode_frame()

static int on2avc_decode_frame ( AVCodecContext avctx,
void data,
int got_frame_ptr,
AVPacket avpkt 
)
static

Definition at line 841 of file on2avc.c.

◆ on2avc_free_vlcs()

static av_cold void on2avc_free_vlcs ( On2AVCContext c)
static

Definition at line 899 of file on2avc.c.

Referenced by on2avc_decode_close().

◆ on2avc_decode_init()

static av_cold int on2avc_decode_init ( AVCodecContext avctx)
static

Definition at line 908 of file on2avc.c.

◆ on2avc_decode_close()

static av_cold int on2avc_decode_close ( AVCodecContext avctx)
static

Definition at line 985 of file on2avc.c.

Variable Documentation

◆ ff_on2avc_decoder

AVCodec ff_on2avc_decoder
Initial value:
= {
.name = "on2avc",
.long_name = NULL_IF_CONFIG_SMALL("On2 Audio for Video Codec"),
.priv_data_size = sizeof(On2AVCContext),
.capabilities = AV_CODEC_CAP_DR1,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
}
static enum AVSampleFormat sample_fmts[]
Definition: adpcmenc.c:925
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:31
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:71
#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_ID_ON2AVC
Definition: codec_id.h:489
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
AVSampleFormat
Audio sample formats.
Definition: samplefmt.h:58
@ AV_SAMPLE_FMT_FLTP
float, planar
Definition: samplefmt.h:69
@ AV_SAMPLE_FMT_NONE
Definition: samplefmt.h:59
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: internal.h:49
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:117
static av_cold int on2avc_decode_close(AVCodecContext *avctx)
Definition: on2avc.c:985
static int on2avc_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Definition: on2avc.c:841
static av_cold int on2avc_decode_init(AVCodecContext *avctx)
Definition: on2avc.c:908

Definition at line 1005 of file on2avc.c.