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

Go to the source code of this file.

Data Structures

struct  feed_mixer_info
 

Macros

#define SND_USE_FXDIV
 
#define SND_FEEDER_MULTIFORMAT   1
 
#define FEEDMIXER_DECLARE(SIGN, BIT, ENDIAN)
 
#define FEEDMIXER_ENTRY(SIGN, BIT, ENDIAN)
 
#define FEEDMIXER_TAB_SIZE
 
#define FEEDMIXER_DATA(i, c)
 
#define FEEDMIXER_INFOIDX(d)   ((uint32_t)((uintptr_t)(d) >> 7) & 0x1f)
 
#define FEEDMIXER_CHANNELS(d)   ((uint32_t)((uintptr_t)(d)) & 0x7f)
 

Typedefs

typedef void(* feed_mixer_t) (uint8_t *, uint8_t *, uint32_t)
 

Functions

 SND_DECLARE_FILE ("$FreeBSD$")
 
static int feed_mixer_init (struct pcm_feeder *f)
 
static int feed_mixer_set (struct pcm_feeder *f, int what, int value)
 
static __inline int feed_mixer_rec (struct pcm_channel *c)
 
static int feed_mixer_feed (struct pcm_feeder *f, struct pcm_channel *c, uint8_t *b, uint32_t count, void *source)
 
 FEEDER_DECLARE (feeder_mixer, NULL)
 

Variables

static struct feed_mixer_info feed_mixer_info_tab []
 
static struct pcm_feederdesc feeder_mixer_desc []
 
static kobj_method_t feeder_mixer_methods []
 

Macro Definition Documentation

◆ FEEDMIXER_CHANNELS

#define FEEDMIXER_CHANNELS (   d)    ((uint32_t)((uintptr_t)(d)) & 0x7f)

Definition at line 139 of file feeder_mixer.c.

◆ FEEDMIXER_DATA

#define FEEDMIXER_DATA (   i,
  c 
)
Value:
((void *) \
((uintptr_t)((((i) & 0x1f) << 7) | \
((c) & 0x7f))))
struct pcm_channel * c
Definition: channel_if.m:106

Definition at line 135 of file feeder_mixer.c.

◆ FEEDMIXER_DECLARE

#define FEEDMIXER_DECLARE (   SIGN,
  BIT,
  ENDIAN 
)
Value:
static void \
feed_mixer_##SIGN##BIT##ENDIAN(uint8_t *src, uint8_t *dst, \
uint32_t count) \
{ \
intpcm##BIT##_t z; \
intpcm_t x, y; \
\
src += count; \
dst += count; \
\
do { \
src -= PCM_##BIT##_BPS; \
dst -= PCM_##BIT##_BPS; \
count -= PCM_##BIT##_BPS; \
x = PCM_READ_##SIGN##BIT##_##ENDIAN(src); \
y = PCM_READ_##SIGN##BIT##_##ENDIAN(dst); \
z = INTPCM##BIT##_T(x) + y; \
x = PCM_CLAMP_##SIGN##BIT(z); \
_PCM_WRITE_##SIGN##BIT##_##ENDIAN(dst, x); \
} while (count != 0); \
}
u_int32_t count
Definition: feeder_if.m:86
u_int32_t src
Definition: mixer_if.m:66

Definition at line 49 of file feeder_mixer.c.

◆ FEEDMIXER_ENTRY

#define FEEDMIXER_ENTRY (   SIGN,
  BIT,
  ENDIAN 
)
Value:
{ \
AFMT_##SIGN##BIT##_##ENDIAN, PCM_##BIT##_BPS, \
feed_mixer_##SIGN##BIT##ENDIAN \
}

Definition at line 99 of file feeder_mixer.c.

◆ FEEDMIXER_INFOIDX

#define FEEDMIXER_INFOIDX (   d)    ((uint32_t)((uintptr_t)(d) >> 7) & 0x1f)

Definition at line 138 of file feeder_mixer.c.

◆ FEEDMIXER_TAB_SIZE

#define FEEDMIXER_TAB_SIZE
Value:
((int32_t) \
(sizeof(feed_mixer_info_tab) / \
sizeof(feed_mixer_info_tab[0])))
static struct feed_mixer_info feed_mixer_info_tab[]
Definition: feeder_mixer.c:105

Definition at line 131 of file feeder_mixer.c.

◆ SND_FEEDER_MULTIFORMAT

#define SND_FEEDER_MULTIFORMAT   1

Definition at line 45 of file feeder_mixer.c.

◆ SND_USE_FXDIV

#define SND_USE_FXDIV

Definition at line 38 of file feeder_mixer.c.

Typedef Documentation

◆ feed_mixer_t

typedef void(* feed_mixer_t) (uint8_t *, uint8_t *, uint32_t)

Definition at line 47 of file feeder_mixer.c.

Function Documentation

◆ feed_mixer_feed()

◆ feed_mixer_init()

◆ feed_mixer_rec()

◆ feed_mixer_set()

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

◆ FEEDER_DECLARE()

FEEDER_DECLARE ( feeder_mixer  ,
NULL   
)

◆ SND_DECLARE_FILE()

SND_DECLARE_FILE ( "$FreeBSD$"  )

Variable Documentation

◆ feed_mixer_info_tab

struct feed_mixer_info feed_mixer_info_tab[]
static
Initial value:
= {
FEEDMIXER_ENTRY(S, 8, NE),
FEEDMIXER_ENTRY(S, 16, LE),
FEEDMIXER_ENTRY(S, 32, LE),
FEEDMIXER_ENTRY(S, 16, BE),
FEEDMIXER_ENTRY(S, 32, BE),
FEEDMIXER_ENTRY(S, 24, LE),
FEEDMIXER_ENTRY(S, 24, BE),
FEEDMIXER_ENTRY(U, 8, NE),
FEEDMIXER_ENTRY(U, 16, LE),
FEEDMIXER_ENTRY(U, 24, LE),
FEEDMIXER_ENTRY(U, 32, LE),
FEEDMIXER_ENTRY(U, 16, BE),
FEEDMIXER_ENTRY(U, 24, BE),
FEEDMIXER_ENTRY(U, 32, BE),
{ AFMT_AC3, PCM_16_BPS, NULL },
{ AFMT_MU_LAW, PCM_8_BPS, feed_mixer_U8NE },
{ AFMT_A_LAW, PCM_8_BPS, feed_mixer_U8NE }
}
#define FEEDMIXER_ENTRY(SIGN, BIT, ENDIAN)
Definition: feeder_mixer.c:99
#define PCM_8_BPS
Definition: pcm.h:100
#define PCM_16_BPS
Definition: pcm.h:101

Definition at line 105 of file feeder_mixer.c.

Referenced by feed_mixer_feed(), and feed_mixer_init().

◆ feeder_mixer_desc

struct pcm_feederdesc feeder_mixer_desc[]
static
Initial value:
= {
{ FEEDER_MIXER, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 }
}
@ FEEDER_MIXER
Definition: feeder.h:84

Definition at line 392 of file feeder_mixer.c.

◆ feeder_mixer_methods

kobj_method_t feeder_mixer_methods[]
static
Initial value:
= {
KOBJMETHOD(feeder_init, feed_mixer_init),
KOBJMETHOD(feeder_set, feed_mixer_set),
KOBJMETHOD(feeder_feed, feed_mixer_feed),
}
static int feed_mixer_feed(struct pcm_feeder *f, struct pcm_channel *c, uint8_t *b, uint32_t count, void *source)
Definition: feeder_mixer.c:282
static int feed_mixer_init(struct pcm_feeder *f)
Definition: feeder_mixer.c:142
static int feed_mixer_set(struct pcm_feeder *f, int what, int value)
Definition: feeder_mixer.c:162
#define KOBJMETHOD_END
Definition: midi.c:76

Definition at line 397 of file feeder_mixer.c.