aboutsummaryrefslogtreecommitdiff
path: root/src/output/oss_output_plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/output/oss_output_plugin.c')
-rw-r--r--src/output/oss_output_plugin.c105
1 files changed, 30 insertions, 75 deletions
diff --git a/src/output/oss_output_plugin.c b/src/output/oss_output_plugin.c
index aa9c00fc..84b1b485 100644
--- a/src/output/oss_output_plugin.c
+++ b/src/output/oss_output_plugin.c
@@ -26,6 +26,8 @@
#include <glib.h>
+#include <libavutil/samplefmt.h>
+
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
@@ -427,85 +429,57 @@ oss_setup_sample_rate(int fd, struct audio_format *audio_format,
* AFMT_QUERY if there is no direct counterpart.
*/
static int
-sample_format_to_oss(enum sample_format format)
+sample_format_to_oss(enum AVSampleFormat format)
{
switch (format) {
- case SAMPLE_FORMAT_UNDEFINED:
- case SAMPLE_FORMAT_FLOAT:
- return AFMT_QUERY;
-
- case SAMPLE_FORMAT_S8:
- return AFMT_S8;
-
- case SAMPLE_FORMAT_S16:
+ case AV_SAMPLE_FMT_U8:
+ return AFMT_U8;
+ case AV_SAMPLE_FMT_S16:
return AFMT_S16_NE;
-
- case SAMPLE_FORMAT_S24_P32:
-#ifdef AFMT_S24_NE
- return AFMT_S24_NE;
-#else
- return AFMT_QUERY;
-#endif
-
- case SAMPLE_FORMAT_S32:
+ case AV_SAMPLE_FMT_S32:
#ifdef AFMT_S32_NE
return AFMT_S32_NE;
#else
return AFMT_QUERY;
#endif
+ default:
+ return AFMT_QUERY;
}
return AFMT_QUERY;
}
/**
- * Convert an OSS sample format to its MPD counterpart. Returns
- * SAMPLE_FORMAT_UNDEFINED if there is no direct counterpart.
+ * Convert an OSS sample format to its libav counterpart. Returns
+ * AV_SAMPLE_FMT_NONE if there is no direct counterpart.
*/
-static enum sample_format
+static enum AVSampleFormat
sample_format_from_oss(int format)
{
switch (format) {
- case AFMT_S8:
- return SAMPLE_FORMAT_S8;
-
+ case AFMT_U8:
+ return AV_SAMPLE_FMT_U8;
case AFMT_S16_NE:
- return SAMPLE_FORMAT_S16;
-
-#ifdef AFMT_S24_PACKED
- case AFMT_S24_PACKED:
- return SAMPLE_FORMAT_S24_P32;
-#endif
-
-#ifdef AFMT_S24_NE
- case AFMT_S24_NE:
- return SAMPLE_FORMAT_S24_P32;
-#endif
-
+ return AV_SAMPLE_FMT_S16;
#ifdef AFMT_S32_NE
case AFMT_S32_NE:
- return SAMPLE_FORMAT_S32;
+ return AV_SAMPLE_FMT_S32;
#endif
-
default:
- return SAMPLE_FORMAT_UNDEFINED;
+ return AV_SAMPLE_FMT_NONE;
}
}
/**
* Probe one sample format.
- *
- * @return the selected sample format or SAMPLE_FORMAT_UNDEFINED on
- * error
*/
-static enum oss_setup_result
-oss_probe_sample_format(int fd, enum sample_format sample_format,
- enum sample_format *sample_format_r,
- int *oss_format_r,
+static enum oss_setup_result oss_probe_sample_format(int fd, enum AVSampleFormat sample_format,
+ enum AVSampleFormat *sample_format_r,
+ int *oss_format_r,
#ifdef AFMT_S24_PACKED
- struct pcm_export_state *export,
+ struct pcm_export_state *export,
#endif
- GError **error_r)
+ GError **error_r)
{
int oss_format = sample_format_to_oss(sample_format);
if (oss_format == AFMT_QUERY)
@@ -516,34 +490,16 @@ oss_probe_sample_format(int fd, enum sample_format sample_format,
&oss_format,
"Failed to set sample format", error_r);
-#ifdef AFMT_S24_PACKED
- if (result == UNSUPPORTED && sample_format == SAMPLE_FORMAT_S24_P32) {
- /* if the driver doesn't support padded 24 bit, try
- packed 24 bit */
- oss_format = AFMT_S24_PACKED;
- result = oss_try_ioctl_r(fd, SNDCTL_DSP_SAMPLESIZE,
- &oss_format,
- "Failed to set sample format", error_r);
- }
-#endif
-
if (result != SUCCESS)
return result;
sample_format = sample_format_from_oss(oss_format);
- if (sample_format == SAMPLE_FORMAT_UNDEFINED)
+ if (sample_format == AV_SAMPLE_FMT_NONE)
return UNSUPPORTED;
*sample_format_r = sample_format;
*oss_format_r = oss_format;
-#ifdef AFMT_S24_PACKED
- pcm_export_open(export, sample_format, false,
- oss_format == AFMT_S24_PACKED,
- oss_format == AFMT_S24_PACKED &&
- G_BYTE_ORDER != G_LITTLE_ENDIAN);
-#endif
-
return SUCCESS;
}
@@ -559,7 +515,7 @@ oss_setup_sample_format(int fd, struct audio_format *audio_format,
#endif
GError **error_r)
{
- enum sample_format mpd_format;
+ enum AVSampleFormat mpd_format;
enum oss_setup_result result =
oss_probe_sample_format(fd, audio_format->format,
&mpd_format, oss_format_r,
@@ -585,15 +541,14 @@ oss_setup_sample_format(int fd, struct audio_format *audio_format,
/* the requested sample format is not available - probe for
other formats supported by MPD */
- static const enum sample_format sample_formats[] = {
- SAMPLE_FORMAT_S24_P32,
- SAMPLE_FORMAT_S32,
- SAMPLE_FORMAT_S16,
- SAMPLE_FORMAT_S8,
- SAMPLE_FORMAT_UNDEFINED /* sentinel */
+ static const enum AVSampleFormat sample_formats[] = {
+ AV_SAMPLE_FMT_S32,
+ AV_SAMPLE_FMT_S16,
+ AV_SAMPLE_FMT_U8,
+ AV_SAMPLE_FMT_NONE /* sentinel */
};
- for (unsigned i = 0; sample_formats[i] != SAMPLE_FORMAT_UNDEFINED; ++i) {
+ for (unsigned i = 0; sample_formats[i] != AV_SAMPLE_FMT_NONE; ++i) {
mpd_format = sample_formats[i];
if (mpd_format == audio_format->format)
/* don't try that again */