Commit 5e2ece0f authored by Takashi Sakamoto's avatar Takashi Sakamoto Committed by Takashi Iwai

ALSA: firewire-lib: code refactoring to process PCM substream

This is code refactoring to separate PCM substream processing from packet
queueing.
Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 753e7179
...@@ -776,16 +776,24 @@ static void out_stream_callback(struct fw_iso_context *context, u32 tstamp, ...@@ -776,16 +776,24 @@ static void out_stream_callback(struct fw_iso_context *context, u32 tstamp,
for (i = 0; i < packets; ++i) { for (i = 0; i < packets; ++i) {
const struct pkt_desc *desc = s->pkt_descs + i; const struct pkt_desc *desc = s->pkt_descs + i;
struct snd_pcm_substream *pcm;
unsigned int pcm_frames; unsigned int pcm_frames;
pcm_frames = s->process_data_blocks(s, desc->ctx_payload,
desc->data_blocks, desc->data_block_counter);
pcm = READ_ONCE(s->pcm);
if (pcm && pcm_frames > 0)
update_pcm_pointers(s, pcm, pcm_frames);
}
for (i = 0; i < packets; ++i) {
const struct pkt_desc *desc = s->pkt_descs + i;
unsigned int syt; unsigned int syt;
struct { struct {
struct fw_iso_packet params; struct fw_iso_packet params;
__be32 header[IT_PKT_HEADER_SIZE_CIP / sizeof(__be32)]; __be32 header[IT_PKT_HEADER_SIZE_CIP / sizeof(__be32)];
} template = { {0}, {0} }; } template = { {0}, {0} };
struct snd_pcm_substream *pcm;
pcm_frames = s->process_data_blocks(s, desc->ctx_payload,
desc->data_blocks, desc->data_block_counter);
if (s->ctx_data.rx.syt_override < 0) if (s->ctx_data.rx.syt_override < 0)
syt = desc->syt; syt = desc->syt;
...@@ -800,10 +808,6 @@ static void out_stream_callback(struct fw_iso_context *context, u32 tstamp, ...@@ -800,10 +808,6 @@ static void out_stream_callback(struct fw_iso_context *context, u32 tstamp,
cancel_stream(s); cancel_stream(s);
return; return;
} }
pcm = READ_ONCE(s->pcm);
if (pcm && pcm_frames > 0)
update_pcm_pointers(s, pcm, pcm_frames);
} }
fw_iso_context_queue_flush(s->context); fw_iso_context_queue_flush(s->context);
...@@ -831,28 +835,29 @@ static void in_stream_callback(struct fw_iso_context *context, u32 tstamp, ...@@ -831,28 +835,29 @@ static void in_stream_callback(struct fw_iso_context *context, u32 tstamp,
cancel_stream(s); cancel_stream(s);
return; return;
} }
} } else {
for (i = 0; i < packets; ++i) {
for (i = 0; i < packets; i++) {
const struct pkt_desc *desc = s->pkt_descs; const struct pkt_desc *desc = s->pkt_descs;
unsigned int pcm_frames = 0;
struct fw_iso_packet params = {0};
struct snd_pcm_substream *pcm; struct snd_pcm_substream *pcm;
unsigned int pcm_frames;
if (err >= 0) {
pcm_frames = s->process_data_blocks(s, pcm_frames = s->process_data_blocks(s,
desc->ctx_payload, desc->data_blocks, desc->ctx_payload, desc->data_blocks,
desc->data_block_counter); desc->data_block_counter);
pcm = READ_ONCE(s->pcm);
if (pcm && pcm_frames > 0)
update_pcm_pointers(s, pcm, pcm_frames);
}
} }
for (i = 0; i < packets; ++i) {
struct fw_iso_packet params = {0};
if (queue_in_packet(s, &params) < 0) { if (queue_in_packet(s, &params) < 0) {
cancel_stream(s); cancel_stream(s);
return; return;
} }
pcm = READ_ONCE(s->pcm);
if (pcm && pcm_frames > 0)
update_pcm_pointers(s, pcm, pcm_frames);
} }
fw_iso_context_queue_flush(s->context); fw_iso_context_queue_flush(s->context);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment