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"
Include dependency graph for sbgdec.c:

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 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().

#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);
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
initialize output if(nPeaks >3)%at least 3 peaks in spectrum for trying to find f0 nf0peaks
static double c[64]
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame This method is called when a frame is wanted on an output For an it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return it should return

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 SBG_SCALE   (1 << 16)

Definition at line 31 of file sbgdec.c.

Referenced by scale_double().

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 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 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 void* alloc_array_elem ( void **  array,
size_t  elsize,
int *  size,
int *  max_size 
)
static
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 int expand_script ( void log,
struct sbg_script s 
)
static

Definition at line 984 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 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 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_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 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 is_space ( char  c)
inlinestatic

Definition at line 203 of file sbgdec.c.

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

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_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_space ( struct sbg_parser p)
static
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 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 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_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_immediate ( struct sbg_parser p)
static

Definition at line 321 of file sbgdec.c.

Referenced by parse_options().

static int parse_named_def ( struct sbg_parser p)
static

Definition at line 754 of file sbgdec.c.

Referenced by parse_script().

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.

Referenced by parse_script().

static int parse_preprogrammed ( struct sbg_parser p)
static

Definition at line 328 of file sbgdec.c.

Referenced by parse_options().

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 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_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_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_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_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_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_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_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_volume ( struct sbg_parser p,
int *  vol 
)
static
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 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 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 av_cold int sbg_read_probe ( AVProbeData p)
static

Definition at line 1369 of file sbgdec.c.

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

Definition at line 1476 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 scale_double ( void log,
double  d,
double  m,
int *  r 
)
inlinestatic
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().

Variable Documentation

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:1381
static av_cold int sbg_read_probe(AVProbeData *p)
Definition: sbgdec.c:1369
static int sbg_read_seek(AVFormatContext *avf, int stream_index, int64_t ts, int flags)
Definition: sbgdec.c:1476
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static int read_probe(AVProbeData *pd)
static int sbg_read_packet(AVFormatContext *avf, AVPacket *packet)
Definition: sbgdec.c:1445
static const AVClass sbg_demuxer_class
Definition: sbgdec.c:1495
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:1465

Definition at line 1502 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,
}
av_default_item_name
static const AVOption sbg_options[]
Definition: sbgdec.c:1482
LIBAVUTIL_VERSION_INT
Definition: eval.c:55

Definition at line 1495 of file sbgdec.c.

const AVOption sbg_options[]
static
Initial value:
= {
{ "sample_rate", "", offsetof(struct sbg_demuxer, sample_rate),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX,
{ "frame_size", "", offsetof(struct sbg_demuxer, frame_size),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX,
AV_OPT_FLAG_DECODING_PARAM },
{ "max_file_size", "", offsetof(struct sbg_demuxer, max_file_size),
AV_OPT_TYPE_INT, { .i64 = 5000000 }, 0, INT_MAX,
AV_OPT_FLAG_DECODING_PARAM },
{ NULL },
}
static const uint8_t frame_size[4]
Definition: g723_1_data.h:58
NULL
Definition: eval.c:55
sample_rate
int max_file_size
Definition: sbgdec.c:39
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding
Definition: opt.h:282

Definition at line 1482 of file sbgdec.c.