FreeBSD kernel sound device code
feeder_volume.c File Reference
#include <dev/sound/pcm/sound.h>
#include <dev/sound/pcm/pcm.h>
#include "feeder_if.h"
#include "snd_fxdiv_gen.h"
Include dependency graph for feeder_volume.c:

Go to the source code of this file.

Data Structures

struct  feed_volume_info
 

Macros

#define SND_USE_FXDIV
 
#define FEEDVOLUME_CALC8(s, v)
 
#define FEEDVOLUME_CALC16(s, v)   SND_VOL_CALC_SAMPLE((intpcm_t)(s), v)
 
#define FEEDVOLUME_CALC24(s, v)   SND_VOL_CALC_SAMPLE((intpcm64_t)(s), v)
 
#define FEEDVOLUME_CALC32(s, v)   SND_VOL_CALC_SAMPLE((intpcm64_t)(s), v)
 
#define FEEDVOLUME_DECLARE(SIGN, BIT, ENDIAN)
 
#define FEEDVOLUME_ENTRY(SIGN, BIT, ENDIAN)
 
#define FEEDVOLUME_TAB_SIZE
 

Typedefs

typedef void(* feed_volume_t) (int *, int *, uint32_t, uint8_t *, uint32_t)
 

Functions

 SND_DECLARE_FILE ("$FreeBSD$")
 
static int feed_volume_init (struct pcm_feeder *f)
 
static int feed_volume_free (struct pcm_feeder *f)
 
static int feed_volume_set (struct pcm_feeder *f, int what, int value)
 
static int feed_volume_feed (struct pcm_feeder *f, struct pcm_channel *c, uint8_t *b, uint32_t count, void *source)
 
 FEEDER_DECLARE (feeder_volume, NULL)
 
int feeder_volume_apply_matrix (struct pcm_feeder *f, struct pcmchan_matrix *m)
 

Variables

struct {
   uint32_t   format
 
   feed_volume_t   apply
 
feed_volume_info_tab []
 
static struct pcm_feederdesc feeder_volume_desc []
 
static kobj_method_t feeder_volume_methods []
 

Macro Definition Documentation

◆ FEEDVOLUME_CALC16

#define FEEDVOLUME_CALC16 (   s,
 
)    SND_VOL_CALC_SAMPLE((intpcm_t)(s), v)

Definition at line 49 of file feeder_volume.c.

◆ FEEDVOLUME_CALC24

#define FEEDVOLUME_CALC24 (   s,
 
)    SND_VOL_CALC_SAMPLE((intpcm64_t)(s), v)

Definition at line 50 of file feeder_volume.c.

◆ FEEDVOLUME_CALC32

#define FEEDVOLUME_CALC32 (   s,
 
)    SND_VOL_CALC_SAMPLE((intpcm64_t)(s), v)

Definition at line 51 of file feeder_volume.c.

◆ FEEDVOLUME_CALC8

#define FEEDVOLUME_CALC8 (   s,
 
)
Value:
(s) << 8, v) >> 8)
#define SND_VOL_CALC_SAMPLE(x, y)
Definition: matrix.h:214
int32_t intpcm_t
Definition: pcm.h:54

Definition at line 47 of file feeder_volume.c.

◆ FEEDVOLUME_DECLARE

#define FEEDVOLUME_DECLARE (   SIGN,
  BIT,
  ENDIAN 
)
Value:
static void \
feed_volume_##SIGN##BIT##ENDIAN(int *vol, int *matrix, \
uint32_t channels, uint8_t *dst, uint32_t count) \
{ \
intpcm##BIT##_t v; \
intpcm_t x; \
uint32_t i; \
\
dst += count * PCM_##BIT##_BPS * channels; \
do { \
i = channels; \
do { \
dst -= PCM_##BIT##_BPS; \
i--; \
x = PCM_READ_##SIGN##BIT##_##ENDIAN(dst); \
v = FEEDVOLUME_CALC##BIT(x, vol[matrix[i]]); \
x = PCM_CLAMP_##SIGN##BIT(v); \
_PCM_WRITE_##SIGN##BIT##_##ENDIAN(dst, x); \
} while (i != 0); \
} while (--count != 0); \
}
u_int32_t count
Definition: feeder_if.m:86
Definition: hdaa.c:240

Definition at line 53 of file feeder_volume.c.

◆ FEEDVOLUME_ENTRY

#define FEEDVOLUME_ENTRY (   SIGN,
  BIT,
  ENDIAN 
)
Value:
{ \
AFMT_##SIGN##BIT##_##ENDIAN, \
feed_volume_##SIGN##BIT##ENDIAN \
}

Definition at line 105 of file feeder_volume.c.

◆ FEEDVOLUME_TAB_SIZE

#define FEEDVOLUME_TAB_SIZE
Value:
((int32_t) \
(sizeof(feed_volume_info_tab) / \
sizeof(feed_volume_info_tab[0])))
static const struct @48 feed_volume_info_tab[]

Definition at line 137 of file feeder_volume.c.

◆ SND_USE_FXDIV

#define SND_USE_FXDIV

Definition at line 39 of file feeder_volume.c.

Typedef Documentation

◆ feed_volume_t

typedef void(* feed_volume_t) (int *, int *, uint32_t, uint8_t *, uint32_t)

Definition at line 45 of file feeder_volume.c.

Function Documentation

◆ feed_volume_feed()

◆ feed_volume_free()

static int feed_volume_free ( struct pcm_feeder f)
static

Definition at line 186 of file feeder_volume.c.

References pcm_feeder::data, and free.

◆ feed_volume_init()

◆ feed_volume_set()

static int feed_volume_set ( struct pcm_feeder f,
int  what,
int  value 
)
static

◆ FEEDER_DECLARE()

FEEDER_DECLARE ( feeder_volume  ,
NULL   
)

◆ feeder_volume_apply_matrix()

◆ SND_DECLARE_FILE()

SND_DECLARE_FILE ( "$FreeBSD$"  )

Variable Documentation

◆ apply

Definition at line 113 of file feeder_volume.c.

◆ 

const struct { ... } feed_volume_info_tab[]
Initial value:
= {
FEEDVOLUME_ENTRY(S, 16, LE),
FEEDVOLUME_ENTRY(S, 32, LE),
FEEDVOLUME_ENTRY(S, 16, BE),
FEEDVOLUME_ENTRY(S, 32, BE),
}
#define FEEDVOLUME_ENTRY(SIGN, BIT, ENDIAN)

Referenced by feed_volume_init().

◆ feeder_volume_desc

struct pcm_feederdesc feeder_volume_desc[]
static
Initial value:
= {
{ FEEDER_VOLUME, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 }
}
@ FEEDER_VOLUME
Definition: feeder.h:87

Definition at line 304 of file feeder_volume.c.

◆ feeder_volume_methods

kobj_method_t feeder_volume_methods[]
static
Initial value:
= {
KOBJMETHOD(feeder_init, feed_volume_init),
KOBJMETHOD(feeder_free, feed_volume_free),
KOBJMETHOD(feeder_set, feed_volume_set),
KOBJMETHOD(feeder_feed, feed_volume_feed),
}
static int feed_volume_init(struct pcm_feeder *f)
static int feed_volume_free(struct pcm_feeder *f)
static int feed_volume_set(struct pcm_feeder *f, int what, int value)
static int feed_volume_feed(struct pcm_feeder *f, struct pcm_channel *c, uint8_t *b, uint32_t count, void *source)
#define KOBJMETHOD_END
Definition: midi.c:76

Definition at line 309 of file feeder_volume.c.

◆ format

uint32_t format

Definition at line 112 of file feeder_volume.c.