FFmpeg  4.0
Data Structures | Macros | Enumerations | Functions | Variables
sbgdec.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "libavutil/intreadwrite.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "libavutil/time_internal.h"
#include "avformat.h"
#include "internal.h"

Go to the source code of this file.

Data Structures

struct  sbg_demuxer
 
struct  sbg_string
 
struct  sbg_fade
 
struct  sbg_timestamp
 
struct  sbg_script_definition
 
struct  sbg_script_synth
 
struct  sbg_script_tseq
 
struct  sbg_script_event
 
struct  sbg_script
 
struct  sbg_parser
 
struct  ws_interval
 
struct  ws_intervals
 

Macros

#define SBG_SCALE   (1 << 16)
 
#define DAY   (24 * 60 * 60)
 
#define DAY_TS   ((int64_t)DAY * AV_TIME_BASE)
 
#define FORWARD_ERROR(c)
 
#define ADD_EDATA32(v)   do { AV_WL32(edata, (v)); edata += 4; } while(0)
 
#define ADD_EDATA64(v)   do { AV_WL64(edata, (v)); edata += 8; } while(0)
 

Enumerations

enum  sbg_fade_type { SBG_FADE_SILENCE = 0, SBG_FADE_SAME = 1, SBG_FADE_ADAPT = 3 }
 
enum  sbg_synth_type {
  SBG_TYPE_NONE, SBG_TYPE_SINE, SBG_TYPE_NOISE, SBG_TYPE_BELL,
  SBG_TYPE_MIX, SBG_TYPE_SPIN
}
 
enum  ws_interval_type { WS_SINE = MKTAG('S','I','N','E'), WS_NOISE = MKTAG('N','O','I','S'), WS_SINE = MKTAG('S','I','N','E'), WS_NOISE = MKTAG('N','O','I','S') }
 

Functions

static voidalloc_array_elem (void **array, size_t elsize, int *size, int *max_size)
 
static int str_to_time (const char *str, int64_t *rtime)
 
static int is_space (char c)
 
static int scale_double (void *log, double d, double m, int *r)
 
static int lex_space (struct sbg_parser *p)
 
static int lex_char (struct sbg_parser *p, char c)
 
static int lex_double (struct sbg_parser *p, double *r)
 
static int lex_fixed (struct sbg_parser *p, const char *t, int l)
 
static int lex_line_end (struct sbg_parser *p)
 
static int lex_wsword (struct sbg_parser *p, struct sbg_string *rs)
 
static int lex_name (struct sbg_parser *p, struct sbg_string *rs)
 
static int lex_time (struct sbg_parser *p, int64_t *rt)
 
static int parse_immediate (struct sbg_parser *p)
 
static int parse_preprogrammed (struct sbg_parser *p)
 
static int parse_optarg (struct sbg_parser *p, char o, struct sbg_string *r)
 
static int parse_options (struct sbg_parser *p)
 
static int parse_timestamp (struct sbg_parser *p, struct sbg_timestamp *rts, int64_t *rrel)
 
static int parse_fade (struct sbg_parser *p, struct sbg_fade *fr)
 
static int parse_time_sequence (struct sbg_parser *p, int inblock)
 
static int parse_wave_def (struct sbg_parser *p, int wavenum)
 
static int parse_block_def (struct sbg_parser *p, struct sbg_script_definition *def)
 
static int parse_volume (struct sbg_parser *p, int *vol)
 
static int parse_synth_channel_sine (struct sbg_parser *p, struct sbg_script_synth *synth)
 
static int parse_synth_channel_pink (struct sbg_parser *p, struct sbg_script_synth *synth)
 
static int parse_synth_channel_bell (struct sbg_parser *p, struct sbg_script_synth *synth)
 
static int parse_synth_channel_mix (struct sbg_parser *p, struct sbg_script_synth *synth)
 
static int parse_synth_channel_spin (struct sbg_parser *p, struct sbg_script_synth *synth)
 
static int parse_synth_channel (struct sbg_parser *p)
 
static int parse_synth_def (struct sbg_parser *p, struct sbg_script_definition *def)
 
static int parse_named_def (struct sbg_parser *p)
 
static void free_script (struct sbg_script *s)
 
static int parse_script (void *log, char *script, int script_len, struct sbg_script *rscript)
 
static int read_whole_file (AVIOContext *io, int max_size, char **rbuf)
 
static void expand_timestamps (void *log, struct sbg_script *s)
 
static int expand_tseq (void *log, struct sbg_script *s, int *nb_ev_max, int64_t t0, struct sbg_script_tseq *tseq)
 
static int expand_script (void *log, struct sbg_script *s)
 
static int add_interval (struct ws_intervals *inter, enum ws_interval_type type, uint32_t channels, int ref, int64_t ts1, int32_t f1, int32_t a1, int64_t ts2, int32_t f2, int32_t a2)
 
static int add_bell (struct ws_intervals *inter, struct sbg_script *s, int64_t ts1, int64_t ts2, int32_t f, int32_t a)
 
static int generate_interval (void *log, struct sbg_script *s, struct ws_intervals *inter, int64_t ts1, int64_t ts2, struct sbg_script_synth *s1, struct sbg_script_synth *s2, int transition)
 
static int generate_plateau (void *log, struct sbg_script *s, struct ws_intervals *inter, struct sbg_script_event *ev1)
 
static int generate_transition (void *log, struct sbg_script *s, struct ws_intervals *inter, struct sbg_script_event *ev1, struct sbg_script_event *ev2)
 
static int generate_intervals (void *log, struct sbg_script *s, int sample_rate, struct ws_intervals *inter)
 
static int encode_intervals (struct sbg_script *s, AVCodecParameters *par, struct ws_intervals *inter)
 
static av_cold int sbg_read_probe (AVProbeData *p)
 
static av_cold int sbg_read_header (AVFormatContext *avf)
 
static int sbg_read_packet (AVFormatContext *avf, AVPacket *packet)
 
static int sbg_read_seek2 (AVFormatContext *avf, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
 
static int sbg_read_seek (AVFormatContext *avf, int stream_index, int64_t ts, int flags)
 

Variables

static const AVOption sbg_options []
 
static const AVClass sbg_demuxer_class
 
AVInputFormat ff_sbg_demuxer
 

Macro Definition Documentation

◆ SBG_SCALE

#define SBG_SCALE   (1 << 16)

Definition at line 32 of file sbgdec.c.

Referenced by scale_double().

◆ DAY

#define DAY   (24 * 60 * 60)

Definition at line 33 of file sbgdec.c.

Referenced by expand_timestamps().

◆ DAY_TS

#define DAY_TS   ((int64_t)DAY * AV_TIME_BASE)

Definition at line 34 of file sbgdec.c.

Referenced by expand_timestamps(), and generate_intervals().

◆ FORWARD_ERROR

#define FORWARD_ERROR (   c)
Value:
do { \
int errcode = c; \
if (errcode <= 0) \
return errcode ? errcode : AVERROR_INVALIDDATA; \
} while (0)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
static double c[64]

Definition at line 315 of file sbgdec.c.

Referenced by parse_options(), parse_synth_channel_bell(), parse_synth_channel_mix(), parse_synth_channel_pink(), parse_synth_channel_sine(), and parse_synth_channel_spin().

◆ ADD_EDATA32

#define ADD_EDATA32 (   v)    do { AV_WL32(edata, (v)); edata += 4; } while(0)

Referenced by encode_intervals().

◆ ADD_EDATA64

#define ADD_EDATA64 (   v)    do { AV_WL64(edata, (v)); edata += 8; } while(0)

Referenced by encode_intervals().

Enumeration Type Documentation

◆ sbg_fade_type

Enumerator
SBG_FADE_SILENCE 
SBG_FADE_SAME 
SBG_FADE_ADAPT 

Definition at line 48 of file sbgdec.c.

◆ sbg_synth_type

Enumerator
SBG_TYPE_NONE 
SBG_TYPE_SINE 
SBG_TYPE_NOISE 
SBG_TYPE_BELL 
SBG_TYPE_MIX 
SBG_TYPE_SPIN 

Definition at line 58 of file sbgdec.c.

◆ ws_interval_type

Enumerator
WS_SINE 
WS_NOISE 
WS_SINE 
WS_NOISE 

Definition at line 138 of file sbgdec.c.

Function Documentation

◆ alloc_array_elem()

static void* alloc_array_elem ( void **  array,
size_t  elsize,
int size,
int max_size 
)
static

◆ str_to_time()

static int str_to_time ( const char *  str,
int64_t *  rtime 
)
static

Definition at line 178 of file sbgdec.c.

Referenced by lex_time(), and parse_options().

◆ is_space()

static int is_space ( char  c)
inlinestatic

Definition at line 204 of file sbgdec.c.

Referenced by lex_double(), lex_space(), and lex_wsword().

◆ scale_double()

static int scale_double ( void log,
double  d,
double  m,
int r 
)
inlinestatic

◆ lex_space()

static int lex_space ( struct sbg_parser p)
static

◆ lex_char()

static int lex_char ( struct sbg_parser p,
char  c 
)
static

◆ lex_double()

static int lex_double ( struct sbg_parser p,
double *  r 
)
static

◆ lex_fixed()

static int lex_fixed ( struct sbg_parser p,
const char *  t,
int  l 
)
static

◆ lex_line_end()

static int lex_line_end ( struct sbg_parser p)
static

◆ lex_wsword()

static int lex_wsword ( struct sbg_parser p,
struct sbg_string rs 
)
static

Definition at line 280 of file sbgdec.c.

Referenced by parse_optarg(), and parse_options().

◆ lex_name()

static int lex_name ( struct sbg_parser p,
struct sbg_string rs 
)
static

Definition at line 294 of file sbgdec.c.

Referenced by parse_named_def(), and parse_time_sequence().

◆ lex_time()

static int lex_time ( struct sbg_parser p,
int64_t *  rt 
)
static

Definition at line 308 of file sbgdec.c.

Referenced by parse_timestamp().

◆ parse_immediate()

static int parse_immediate ( struct sbg_parser p)
static

Definition at line 322 of file sbgdec.c.

Referenced by parse_options().

◆ parse_preprogrammed()

static int parse_preprogrammed ( struct sbg_parser p)
static

Definition at line 329 of file sbgdec.c.

Referenced by parse_options().

◆ parse_optarg()

static int parse_optarg ( struct sbg_parser p,
char  o,
struct sbg_string r 
)
static

Definition at line 336 of file sbgdec.c.

Referenced by parse_options().

◆ parse_options()

static int parse_options ( struct sbg_parser p)
static

Definition at line 346 of file sbgdec.c.

Referenced by parse_script().

◆ parse_timestamp()

static int parse_timestamp ( struct sbg_parser p,
struct sbg_timestamp rts,
int64_t *  rrel 
)
static

Definition at line 459 of file sbgdec.c.

Referenced by parse_time_sequence().

◆ parse_fade()

static int parse_fade ( struct sbg_parser p,
struct sbg_fade fr 
)
static

Definition at line 490 of file sbgdec.c.

Referenced by parse_time_sequence().

◆ parse_time_sequence()

static int parse_time_sequence ( struct sbg_parser p,
int  inblock 
)
static

Definition at line 514 of file sbgdec.c.

Referenced by parse_block_def(), and parse_script().

◆ parse_wave_def()

static int parse_wave_def ( struct sbg_parser p,
int  wavenum 
)
static

Definition at line 567 of file sbgdec.c.

Referenced by parse_named_def().

◆ parse_block_def()

static int parse_block_def ( struct sbg_parser p,
struct sbg_script_definition def 
)
static

Definition at line 574 of file sbgdec.c.

Referenced by parse_named_def().

◆ parse_volume()

static int parse_volume ( struct sbg_parser p,
int vol 
)
static

◆ parse_synth_channel_sine()

static int parse_synth_channel_sine ( struct sbg_parser p,
struct sbg_script_synth synth 
)
static

Definition at line 616 of file sbgdec.c.

Referenced by parse_synth_channel().

◆ parse_synth_channel_pink()

static int parse_synth_channel_pink ( struct sbg_parser p,
struct sbg_script_synth synth 
)
static

Definition at line 637 of file sbgdec.c.

Referenced by parse_synth_channel().

◆ parse_synth_channel_bell()

static int parse_synth_channel_bell ( struct sbg_parser p,
struct sbg_script_synth synth 
)
static

Definition at line 650 of file sbgdec.c.

Referenced by parse_synth_channel().

◆ parse_synth_channel_mix()

static int parse_synth_channel_mix ( struct sbg_parser p,
struct sbg_script_synth synth 
)
static

Definition at line 669 of file sbgdec.c.

Referenced by parse_synth_channel().

◆ parse_synth_channel_spin()

static int parse_synth_channel_spin ( struct sbg_parser p,
struct sbg_script_synth synth 
)
static

Definition at line 682 of file sbgdec.c.

Referenced by parse_synth_channel().

◆ parse_synth_channel()

static int parse_synth_channel ( struct sbg_parser p)
static

Definition at line 705 of file sbgdec.c.

Referenced by parse_synth_def().

◆ parse_synth_def()

static int parse_synth_def ( struct sbg_parser p,
struct sbg_script_definition def 
)
static

Definition at line 731 of file sbgdec.c.

Referenced by parse_named_def().

◆ parse_named_def()

static int parse_named_def ( struct sbg_parser p)
static

Definition at line 755 of file sbgdec.c.

Referenced by parse_script().

◆ free_script()

static void free_script ( struct sbg_script s)
static

Definition at line 782 of file sbgdec.c.

Referenced by parse_script(), sbg_read_header(), and sbg_read_probe().

◆ parse_script()

static int parse_script ( void log,
char *  script,
int  script_len,
struct sbg_script rscript 
)
static

Definition at line 792 of file sbgdec.c.

Referenced by sbg_read_header(), and sbg_read_probe().

◆ read_whole_file()

static int read_whole_file ( AVIOContext io,
int  max_size,
char **  rbuf 
)
static

Definition at line 854 of file sbgdec.c.

Referenced by sbg_read_header().

◆ expand_timestamps()

static void expand_timestamps ( void log,
struct sbg_script s 
)
static

Definition at line 887 of file sbgdec.c.

Referenced by expand_script().

◆ expand_tseq()

static int expand_tseq ( void log,
struct sbg_script s,
int nb_ev_max,
int64_t  t0,
struct sbg_script_tseq tseq 
)
static

Definition at line 941 of file sbgdec.c.

Referenced by expand_script().

◆ expand_script()

static int expand_script ( void log,
struct sbg_script s 
)
static

Definition at line 987 of file sbgdec.c.

Referenced by sbg_read_header().

◆ add_interval()

static int add_interval ( struct ws_intervals inter,
enum ws_interval_type  type,
uint32_t  channels,
int  ref,
int64_t  ts1,
int32_t  f1,
int32_t  a1,
int64_t  ts2,
int32_t  f2,
int32_t  a2 
)
static

Definition at line 1006 of file sbgdec.c.

Referenced by add_bell(), and generate_interval().

◆ add_bell()

static int add_bell ( struct ws_intervals inter,
struct sbg_script s,
int64_t  ts1,
int64_t  ts2,
int32_t  f,
int32_t  a 
)
static

Definition at line 1040 of file sbgdec.c.

Referenced by generate_interval().

◆ generate_interval()

static int generate_interval ( void log,
struct sbg_script s,
struct ws_intervals inter,
int64_t  ts1,
int64_t  ts2,
struct sbg_script_synth s1,
struct sbg_script_synth s2,
int  transition 
)
static

Definition at line 1068 of file sbgdec.c.

Referenced by generate_plateau(), and generate_transition().

◆ generate_plateau()

static int generate_plateau ( void log,
struct sbg_script s,
struct ws_intervals inter,
struct sbg_script_event ev1 
)
static

Definition at line 1147 of file sbgdec.c.

Referenced by generate_intervals().

◆ generate_transition()

static int generate_transition ( void log,
struct sbg_script s,
struct ws_intervals inter,
struct sbg_script_event ev1,
struct sbg_script_event ev2 
)
static

Definition at line 1176 of file sbgdec.c.

Referenced by generate_intervals().

◆ generate_intervals()

static int generate_intervals ( void log,
struct sbg_script s,
int  sample_rate,
struct ws_intervals inter 
)
static

Definition at line 1262 of file sbgdec.c.

Referenced by sbg_read_header().

◆ encode_intervals()

static int encode_intervals ( struct sbg_script s,
AVCodecParameters par,
struct ws_intervals inter 
)
static

Definition at line 1327 of file sbgdec.c.

Referenced by sbg_read_header().

◆ sbg_read_probe()

static av_cold int sbg_read_probe ( AVProbeData p)
static

Definition at line 1370 of file sbgdec.c.

◆ sbg_read_header()

static av_cold int sbg_read_header ( AVFormatContext avf)
static

Definition at line 1382 of file sbgdec.c.

◆ sbg_read_packet()

static int sbg_read_packet ( AVFormatContext avf,
AVPacket packet 
)
static

Definition at line 1446 of file sbgdec.c.

◆ sbg_read_seek2()

static int sbg_read_seek2 ( AVFormatContext avf,
int  stream_index,
int64_t  min_ts,
int64_t  ts,
int64_t  max_ts,
int  flags 
)
static

Definition at line 1466 of file sbgdec.c.

Referenced by sbg_read_seek().

◆ sbg_read_seek()

static int sbg_read_seek ( AVFormatContext avf,
int  stream_index,
int64_t  ts,
int  flags 
)
static

Definition at line 1477 of file sbgdec.c.

Variable Documentation

◆ sbg_options

const AVOption sbg_options[]
static
Initial value:
= {
{ "sample_rate", "", 0x42,
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX,
{ "frame_size", "", 0x42,
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX,
AV_OPT_FLAG_DECODING_PARAM },
{ "max_file_size", "", 0x42,
AV_OPT_TYPE_INT, { .i64 = 5000000 }, 0, INT_MAX,
AV_OPT_FLAG_DECODING_PARAM },
{ NULL },
}
#define NULL
Definition: coverity.c:32
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding
Definition: opt.h:277

Definition at line 1483 of file sbgdec.c.

◆ sbg_demuxer_class

const AVClass sbg_demuxer_class
static
Initial value:
= {
.class_name = "sbg_demuxer",
.item_name = av_default_item_name,
.option = sbg_options,
}
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191
static const AVOption sbg_options[]
Definition: sbgdec.c:1483

Definition at line 1496 of file sbgdec.c.

◆ ff_sbg_demuxer

AVInputFormat ff_sbg_demuxer
Initial value:
= {
.name = "sbg",
.long_name = NULL_IF_CONFIG_SMALL("SBaGen binaural beats script"),
.priv_data_size = sizeof(struct sbg_demuxer),
.read_header = sbg_read_header,
.read_packet = sbg_read_packet,
.read_seek = sbg_read_seek,
.read_seek2 = sbg_read_seek2,
.extensions = "sbg",
.priv_class = &sbg_demuxer_class,
}
static av_cold int sbg_read_header(AVFormatContext *avf)
Definition: sbgdec.c:1382
static av_cold int sbg_read_probe(AVProbeData *p)
Definition: sbgdec.c:1370
static int sbg_read_seek(AVFormatContext *avf, int stream_index, int64_t ts, int flags)
Definition: sbgdec.c:1477
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
static int read_probe(AVProbeData *pd)
Definition: jvdec.c:55
static int sbg_read_packet(AVFormatContext *avf, AVPacket *packet)
Definition: sbgdec.c:1446
static const AVClass sbg_demuxer_class
Definition: sbgdec.c:1496
static int sbg_read_seek2(AVFormatContext *avf, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
Definition: sbgdec.c:1466

Definition at line 1503 of file sbgdec.c.