[alsa-devel] [PATCH 05/39] firewire-lib: Add support for AMDTP in-stream and PCM capture
Clemens Ladisch
clemens at ladisch.de
Sun Mar 9 21:37:14 CET 2014
Takashi Sakamoto wrote:
> For capturing PCM, this commit adds the functionality to handle in-stream.
> This is also applied for dual-wire mode.
> +++ b/sound/firewire/amdtp.c
> @@ -200,16 +208,26 @@ void amdtp_stream_set_pcm_format(struct amdtp_stream *s,
> + if (s->direction == AMDTP_OUT_STREAM) {
> + if (s->dual_wire)
> + s->transfer_samples = amdtp_write_s32_dualwire;
> + else
> + s->transfer_samples = amdtp_write_s32;
> + } else if (s->dual_wire) {
> + s->transfer_samples = amdtp_read_s32_dualwire;
> + } else {
> + s->transfer_samples = amdtp_read_s32;
> + }
Please format the if/else branches in the same way.
> +static void handle_in_packet(struct amdtp_stream *s,
> ...
> + /* ignore empty CIP packet or NO-DATA AMDTP packet */
> + if ((payload_quadlets < 3) ||
> + (((cip_header[1] & CIP_FDF_MASK) >> CIP_FDF_SFC_SHIFT) ==
> + AMDTP_FDF_NO_DATA))
(AMDTP_FDF_NO_DATA << CIP_FDF_SFC_SHIFT) would be a constant that could
be computed at compile time.
> + /* check packet continuity */
> + s->data_block_counter = (s->data_block_counter + data_blocks) & 0xff;
> + if (s->data_block_counter != data_block_counter) {
> + dev_info_ratelimited(&s->unit->device,
> + "Detect uncontinuity of CIP packets\n");
> + s->data_block_counter = data_block_counter;
> + return;
In practice, this error means that a packet was dropped. I guess this
doesn't actually happen too often, but eventually, we should handle
this either by inserting some samples or by stopping the stream.
Regards,
Clemens
More information about the Alsa-devel
mailing list