FFmpeg
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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 "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, AVCodecContext *avc, 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

#define SBG_SCALE   (1 << 16)

Definition at line 31 of file sbgdec.c.

Referenced by scale_double().

#define DAY   (24 * 60 * 60)

Definition at line 32 of file sbgdec.c.

Referenced by expand_timestamps().

#define DAY_TS   ((int64_t)DAY * AV_TIME_BASE)

Definition at line 33 of file sbgdec.c.

Referenced by expand_timestamps(), and generate_intervals().

#define FORWARD_ERROR (   c)
Value:
do { \
int errcode = c; \
if (errcode <= 0) \
return errcode ? errcode : AVERROR_INVALIDDATA; \
} while(0);

Definition at line 314 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().

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

Referenced by encode_intervals().

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

Referenced by encode_intervals().

Enumeration Type Documentation

Enumerator:
SBG_FADE_SILENCE 
SBG_FADE_SAME 
SBG_FADE_ADAPT 

Definition at line 47 of file sbgdec.c.

Enumerator:
SBG_TYPE_NONE 
SBG_TYPE_SINE 
SBG_TYPE_NOISE 
SBG_TYPE_BELL 
SBG_TYPE_MIX 
SBG_TYPE_SPIN 

Definition at line 57 of file sbgdec.c.

Enumerator:
WS_SINE 
WS_NOISE 
WS_SINE 
WS_NOISE 

Definition at line 137 of file sbgdec.c.

Function Documentation

static void* alloc_array_elem ( void **  array,
size_t  elsize,
int *  size,
int *  max_size 
)
static
static int str_to_time ( const char *  str,
int64_t *  rtime 
)
static

Definition at line 177 of file sbgdec.c.

Referenced by lex_time(), and parse_options().

static int is_space ( char  c)
inlinestatic

Definition at line 203 of file sbgdec.c.

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

static int scale_double ( void log,
double  d,
double  m,
int *  r 
)
inlinestatic
static int lex_space ( struct sbg_parser p)
static
static int lex_char ( struct sbg_parser p,
char  c 
)
static
static int lex_double ( struct sbg_parser p,
double *  r 
)
static
static int lex_fixed ( struct sbg_parser p,
const char *  t,
int  l 
)
static
static int lex_line_end ( struct sbg_parser p)
static
static int lex_wsword ( struct sbg_parser p,
struct sbg_string rs 
)
static

Definition at line 279 of file sbgdec.c.

Referenced by parse_optarg(), and parse_options().

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

Definition at line 293 of file sbgdec.c.

Referenced by parse_named_def(), and parse_time_sequence().

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

Definition at line 307 of file sbgdec.c.

Referenced by parse_timestamp().

static int parse_immediate ( struct sbg_parser p)
static

Definition at line 321 of file sbgdec.c.

Referenced by parse_options().

static int parse_preprogrammed ( struct sbg_parser p)
static

Definition at line 328 of file sbgdec.c.

Referenced by parse_options().

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

Definition at line 335 of file sbgdec.c.

Referenced by parse_options().

static int parse_options ( struct sbg_parser p)
static

Definition at line 345 of file sbgdec.c.

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

Definition at line 458 of file sbgdec.c.

Referenced by parse_time_sequence().

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

Definition at line 489 of file sbgdec.c.

Referenced by parse_time_sequence().

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

Definition at line 513 of file sbgdec.c.

Referenced by parse_block_def(), and parse_script().

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

Definition at line 566 of file sbgdec.c.

Referenced by parse_named_def().

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

Definition at line 573 of file sbgdec.c.

Referenced by parse_named_def().

static int parse_volume ( struct sbg_parser p,
int *  vol 
)
static
static int parse_synth_channel_sine ( struct sbg_parser p,
struct sbg_script_synth synth 
)
static

Definition at line 615 of file sbgdec.c.

Referenced by parse_synth_channel().

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

Definition at line 636 of file sbgdec.c.

Referenced by parse_synth_channel().

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

Definition at line 649 of file sbgdec.c.

Referenced by parse_synth_channel().

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

Definition at line 668 of file sbgdec.c.

Referenced by parse_synth_channel().

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

Definition at line 681 of file sbgdec.c.

Referenced by parse_synth_channel().

static int parse_synth_channel ( struct sbg_parser p)
static

Definition at line 704 of file sbgdec.c.

Referenced by parse_synth_def().

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

Definition at line 730 of file sbgdec.c.

Referenced by parse_named_def().

static int parse_named_def ( struct sbg_parser p)
static

Definition at line 754 of file sbgdec.c.

Referenced by parse_script().

static void free_script ( struct sbg_script s)
static

Definition at line 781 of file sbgdec.c.

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

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

Definition at line 791 of file sbgdec.c.

Referenced by sbg_read_header(), and sbg_read_probe().

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

Definition at line 853 of file sbgdec.c.

Referenced by sbg_read_header().

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

Definition at line 886 of file sbgdec.c.

Referenced by expand_script().

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 940 of file sbgdec.c.

Referenced by expand_script().

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

Definition at line 984 of file sbgdec.c.

Referenced by sbg_read_header().

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 1003 of file sbgdec.c.

Referenced by add_bell(), and generate_interval().

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 1037 of file sbgdec.c.

Referenced by 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 1065 of file sbgdec.c.

Referenced by generate_plateau(), and generate_transition().

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

Definition at line 1144 of file sbgdec.c.

Referenced by generate_intervals().

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 1173 of file sbgdec.c.

Referenced by generate_intervals().

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

Definition at line 1259 of file sbgdec.c.

Referenced by sbg_read_header().

static int encode_intervals ( struct sbg_script s,
AVCodecContext avc,
struct ws_intervals inter 
)
static

Definition at line 1324 of file sbgdec.c.

Referenced by sbg_read_header().

static av_cold int sbg_read_probe ( AVProbeData p)
static

Definition at line 1369 of file sbgdec.c.

static av_cold int sbg_read_header ( AVFormatContext avf)
static

Definition at line 1381 of file sbgdec.c.

static int sbg_read_packet ( AVFormatContext avf,
AVPacket packet 
)
static

Definition at line 1445 of file sbgdec.c.

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 1465 of file sbgdec.c.

Referenced by sbg_read_seek().

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

Definition at line 1476 of file sbgdec.c.

Variable Documentation

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,
{ "max_file_size", "", 0x42,
AV_OPT_TYPE_INT, { .i64 = 5000000 }, 0, INT_MAX,
{ NULL },
}

Definition at line 1482 of file sbgdec.c.

const AVClass sbg_demuxer_class
static
Initial value:
= {
.class_name = "sbg_demuxer",
.item_name = av_default_item_name,
.option = sbg_options,
}

Definition at line 1495 of file sbgdec.c.

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,
}

Definition at line 1502 of file sbgdec.c.