forked from luck/tmp_suning_uos_patched
ALSA: line6: Allow different channel numbers for in/out
Changes bytes_per_frame to bytes_per_channel. Signed-off-by: Andrej Krutak <dev@andree.sk> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
7a0f55aeeb
commit
97d78acfb8
|
@ -90,7 +90,9 @@ void line6_capture_copy(struct snd_line6_pcm *line6pcm, char *fbuf, int fsize)
|
|||
struct snd_pcm_substream *substream =
|
||||
get_substream(line6pcm, SNDRV_PCM_STREAM_CAPTURE);
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
const int bytes_per_frame = line6pcm->properties->bytes_per_frame;
|
||||
const int bytes_per_frame =
|
||||
line6pcm->properties->bytes_per_channel *
|
||||
line6pcm->properties->capture_hw.channels_max;
|
||||
int frames = fsize / bytes_per_frame;
|
||||
|
||||
if (runtime == NULL)
|
||||
|
@ -191,7 +193,9 @@ static void audio_in_callback(struct urb *urb)
|
|||
*/
|
||||
|
||||
line6pcm->prev_fbuf = fbuf;
|
||||
line6pcm->prev_fsize = fsize;
|
||||
line6pcm->prev_fsize = fsize /
|
||||
(line6pcm->properties->bytes_per_channel *
|
||||
line6pcm->properties->capture_hw.channels_max);
|
||||
|
||||
if (!test_bit(LINE6_STREAM_IMPULSE, &line6pcm->in.running) &&
|
||||
test_bit(LINE6_STREAM_PCM, &line6pcm->in.running) &&
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#define LINE6_FALLBACK_MAXPACKETSIZE 16
|
||||
|
||||
#define LINE6_TIMEOUT 1
|
||||
#define LINE6_BUFSIZE_LISTEN 32
|
||||
#define LINE6_BUFSIZE_LISTEN 64
|
||||
#define LINE6_MESSAGE_MAXLEN 256
|
||||
|
||||
/*
|
||||
|
|
|
@ -84,7 +84,7 @@ enum {
|
|||
struct line6_pcm_properties {
|
||||
struct snd_pcm_hardware playback_hw, capture_hw;
|
||||
struct snd_pcm_hw_constraint_ratdens rates;
|
||||
int bytes_per_frame;
|
||||
int bytes_per_channel;
|
||||
};
|
||||
|
||||
struct line6_pcm_stream {
|
||||
|
|
|
@ -146,7 +146,9 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
|
|||
int index;
|
||||
int i, urb_size, urb_frames;
|
||||
int ret;
|
||||
const int bytes_per_frame = line6pcm->properties->bytes_per_frame;
|
||||
const int bytes_per_frame =
|
||||
line6pcm->properties->bytes_per_channel *
|
||||
line6pcm->properties->playback_hw.channels_max;
|
||||
const int frame_increment =
|
||||
line6pcm->properties->rates.rats[0].num_min;
|
||||
const int frame_factor =
|
||||
|
@ -165,6 +167,7 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
|
|||
urb_out = line6pcm->out.urbs[index];
|
||||
urb_size = 0;
|
||||
|
||||
/* TODO: this may not work for LINE6_ISO_PACKETS != 1 */
|
||||
for (i = 0; i < LINE6_ISO_PACKETS; ++i) {
|
||||
/* compute frame size for given sampling rate */
|
||||
int fsize = 0;
|
||||
|
@ -178,9 +181,11 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
|
|||
line6pcm->out.count += frame_increment;
|
||||
n = line6pcm->out.count / frame_factor;
|
||||
line6pcm->out.count -= n * frame_factor;
|
||||
fsize = n * bytes_per_frame;
|
||||
fsize = n;
|
||||
}
|
||||
|
||||
fsize *= bytes_per_frame;
|
||||
|
||||
fout->offset = urb_size;
|
||||
fout->length = fsize;
|
||||
urb_size += fsize;
|
||||
|
@ -305,6 +310,9 @@ static void audio_out_callback(struct urb *urb)
|
|||
struct snd_line6_pcm *line6pcm = (struct snd_line6_pcm *)urb->context;
|
||||
struct snd_pcm_substream *substream =
|
||||
get_substream(line6pcm, SNDRV_PCM_STREAM_PLAYBACK);
|
||||
const int bytes_per_frame =
|
||||
line6pcm->properties->bytes_per_channel *
|
||||
line6pcm->properties->playback_hw.channels_max;
|
||||
|
||||
#if USE_CLEAR_BUFFER_WORKAROUND
|
||||
memset(urb->transfer_buffer, 0, urb->transfer_buffer_length);
|
||||
|
@ -329,7 +337,7 @@ static void audio_out_callback(struct urb *urb)
|
|||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
|
||||
line6pcm->out.pos_done +=
|
||||
length / line6pcm->properties->bytes_per_frame;
|
||||
length / bytes_per_frame;
|
||||
|
||||
if (line6pcm->out.pos_done >= runtime->buffer_size)
|
||||
line6pcm->out.pos_done -= runtime->buffer_size;
|
||||
|
|
|
@ -83,7 +83,6 @@ struct usb_line6_pod {
|
|||
};
|
||||
|
||||
#define POD_SYSEX_CODE 3
|
||||
#define POD_BYTES_PER_FRAME 6 /* 24bit audio (stereo) */
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
|
||||
|
@ -167,7 +166,7 @@ static struct line6_pcm_properties pod_pcm_properties = {
|
|||
.rates = {
|
||||
.nrats = 1,
|
||||
.rats = &pod_ratden},
|
||||
.bytes_per_frame = POD_BYTES_PER_FRAME
|
||||
.bytes_per_channel = 3 /* SNDRV_PCM_FMTBIT_S24_3LE */
|
||||
};
|
||||
|
||||
static const char pod_version_header[] = {
|
||||
|
|
|
@ -25,8 +25,6 @@ enum {
|
|||
LINE6_PODHD500_1,
|
||||
};
|
||||
|
||||
#define PODHD_BYTES_PER_FRAME 6 /* 24bit audio (stereo) */
|
||||
|
||||
static struct snd_ratden podhd_ratden = {
|
||||
.num_min = 48000,
|
||||
.num_max = 48000,
|
||||
|
@ -73,7 +71,7 @@ static struct line6_pcm_properties podhd_pcm_properties = {
|
|||
.rates = {
|
||||
.nrats = 1,
|
||||
.rats = &podhd_ratden},
|
||||
.bytes_per_frame = PODHD_BYTES_PER_FRAME
|
||||
.bytes_per_channel = 3 /* 24bit audio (stereo) */
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -114,7 +114,7 @@ static struct line6_pcm_properties toneport_pcm_properties = {
|
|||
.rates = {
|
||||
.nrats = 1,
|
||||
.rats = &toneport_ratden},
|
||||
.bytes_per_frame = 4
|
||||
.bytes_per_channel = 2
|
||||
};
|
||||
|
||||
static const struct {
|
||||
|
|
Loading…
Reference in New Issue
Block a user