FFmpeg
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 (const 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 32 of file sbgdec.c.

Referenced by scale_double().

#define DAY   (24 * 60 * 60)

Definition at line 33 of file sbgdec.c.

Referenced by expand_timestamps().

#define DAY_TS   ((int64_t)DAY * AV_TIME_BASE)

Definition at line 34 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
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
if(ret)
int
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 For filters that do not use the this method is called when a frame is wanted on an output For a 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 or at least make progress towards producing a it should return

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

#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 48 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 58 of file sbgdec.c.

Enumerator
WS_SINE 
WS_NOISE 
WS_SINE 
WS_NOISE 

Definition at line 138 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 178 of file sbgdec.c.

Referenced by lex_time(), and parse_options().

static int is_space ( char  c)
inlinestatic

Definition at line 204 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 280 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 294 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 308 of file sbgdec.c.

Referenced by parse_timestamp().

static int parse_immediate ( struct sbg_parser p)
static

Definition at line 322 of file sbgdec.c.

Referenced by parse_options().

static int parse_preprogrammed ( struct sbg_parser p)
static

Definition at line 329 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 336 of file sbgdec.c.

Referenced by parse_options().

static int parse_options ( struct sbg_parser p)
static

Definition at line 346 of file sbgdec.c.

Referenced by parse_script().

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

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

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

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

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

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 616 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 637 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 650 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 669 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 682 of file sbgdec.c.

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

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

static int parse_named_def ( struct sbg_parser p)
static

Definition at line 755 of file sbgdec.c.

Referenced by parse_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().

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

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

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

Definition at line 887 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 941 of file sbgdec.c.

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

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

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

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

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

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

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

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

static av_cold int sbg_read_probe ( const AVProbeData p)
static

Definition at line 1370 of file sbgdec.c.

static av_cold int sbg_read_header ( AVFormatContext avf)
static

Definition at line 1382 of file sbgdec.c.

static int sbg_read_packet ( AVFormatContext avf,
AVPacket packet 
)
static

Definition at line 1446 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 1466 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 1477 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,
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.

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.

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(const 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 sbg_read_packet(AVFormatContext *avf, AVPacket *packet)
Definition: sbgdec.c:1446
static const AVClass sbg_demuxer_class
Definition: sbgdec.c:1496
static int read_probe(const AVProbeData *pd)
Definition: jvdec.c:55
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.