pcm_export: support DSD to DSD-over-USB conversion
Prepare for removing SAMPLE_FORMAT_DSD_OVER_USB.
This commit is contained in:
@@ -633,8 +633,9 @@ alsa_setup_or_dsd(struct alsa_data *ad, struct audio_format *audio_format,
|
||||
if (!success)
|
||||
return false;
|
||||
|
||||
pcm_export_open(&ad->export, audio_format->format,
|
||||
packed, reverse_endian);
|
||||
pcm_export_open(&ad->export,
|
||||
audio_format->format, audio_format->channels,
|
||||
false, packed, reverse_endian);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -777,7 +778,8 @@ alsa_play(struct audio_output *ao, const void *chunk, size_t size,
|
||||
if (ret > 0) {
|
||||
ad->period_position = (ad->period_position + ret)
|
||||
% ad->period_frames;
|
||||
return ret * ad->in_frame_size;
|
||||
return pcm_export_source_size(&ad->export,
|
||||
ret * ad->in_frame_size);
|
||||
}
|
||||
|
||||
if (ret < 0 && ret != -EAGAIN && ret != -EINTR &&
|
||||
|
||||
@@ -540,7 +540,7 @@ oss_probe_sample_format(int fd, enum sample_format sample_format,
|
||||
*oss_format_r = oss_format;
|
||||
|
||||
#ifdef AFMT_S24_PACKED
|
||||
pcm_export_open(export, sample_format,
|
||||
pcm_export_open(export, sample_format, 0, false,
|
||||
oss_format == AFMT_S24_PACKED,
|
||||
oss_format == AFMT_S24_PACKED &&
|
||||
G_BYTE_ORDER != G_LITTLE_ENDIAN);
|
||||
@@ -755,8 +755,12 @@ oss_output_play(struct audio_output *ao, const void *chunk, size_t size,
|
||||
|
||||
while (true) {
|
||||
ret = write(od->fd, chunk, size);
|
||||
if (ret > 0)
|
||||
return (size_t)ret;
|
||||
if (ret > 0) {
|
||||
#ifdef AFMT_S24_PACKED
|
||||
ret = pcm_export_source_size(&od->export, ret);
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (ret < 0 && errno != EINTR) {
|
||||
g_set_error(error, oss_output_quark(), errno,
|
||||
|
||||
Reference in New Issue
Block a user