Audio: halplay support wma/flag/ogg [2/2]
PD#OTT-20966
Problem:
halplay should support multi-type codec decode.
Solution:
add flac decode get info function
Verify:
yocto-ap222
Change-Id: Iabb71075bc9919ed6613f102bd734b4d1d8f09ef
Signed-off-by: shu.zhang <shu.zhang@amlogic.com>
diff --git a/src/halplay.c b/src/halplay.c
index e7fa855..e35f028 100644
--- a/src/halplay.c
+++ b/src/halplay.c
@@ -25,17 +25,44 @@
#define min(a, b) ((a) < (b) ? (a) : (b))
#define WRITE_UNIT 4096
-#define FORMAT_PCM16 0
-#define FORMAT_PCM32 1
-#define FORMAT_DD 2
-#define FORMAT_MAT 3
-#define FORMAT_IEC61937 4
-#define FORMAT_AC4 5
-#define FORMAT_MAX 6
+enum audio_format {
+ FORMAT_PCM16 = 0,
+ FORMAT_PCM32,
+ FORMAT_DD,
+ FORMAT_MAT,
+ FORMAT_IEC61937,
+ FORMAT_AC4 = 5,
+ FORMAT_MP3,
+ FORMAT_AAC,
+ FORMAT_OGG,
+ FORMAT_FLAC,
+ FORMAT_MAX
+};
-static int format_tab[] = {AUDIO_FORMAT_PCM_16_BIT, AUDIO_FORMAT_PCM_32_BIT, AUDIO_FORMAT_AC3, AUDIO_FORMAT_MAT, AUDIO_FORMAT_IEC61937, AUDIO_FORMAT_AC4};
+static int format_tab[] = {
+ AUDIO_FORMAT_PCM_16_BIT,
+ AUDIO_FORMAT_PCM_32_BIT,
+ AUDIO_FORMAT_AC3,
+ AUDIO_FORMAT_MAT,
+ AUDIO_FORMAT_IEC61937,
+ AUDIO_FORMAT_AC4,
+ AUDIO_FORMAT_MP3,
+ AUDIO_FORMAT_AAC,
+ AUDIO_FORMAT_VORBIS,
+ AUDIO_FORMAT_FLAC
+};
+
static const char *format_str[] = {
- "PCM_16", "PCM_32", "DOLBY DD/DD+", "DOLBY MAT", "IEC_61937", "AC4"
+ "PCM_16",
+ "PCM_32",
+ "DOLBY DD/DD+",
+ "DOLBY MAT",
+ "IEC_61937",
+ "AC4",
+ "MP3",
+ "AAC",
+ "OGG",
+ "FLAC"
};
static int format_is_pcm(int format)
@@ -221,29 +248,49 @@
/* set audio config */
memset(&config, 0, sizeof(config));
- if (format_is_pcm(format)) {
- config.sample_rate = sr;
- switch (ch) {
- case 1:
- config.channel_mask = AUDIO_CHANNEL_OUT_MONO;
- break;
- case 2:
- config.channel_mask = AUDIO_CHANNEL_OUT_STEREO;
- break;
- case 6:
- config.channel_mask = AUDIO_CHANNEL_OUT_5POINT1;
- break;
- case 8:
- config.channel_mask = AUDIO_CHANNEL_OUT_7POINT1;
- break;
- default:
- config.channel_mask = AUDIO_CHANNEL_OUT_STEREO;
- break;
- }
- } else {
- config.sample_rate = 48000;
- config.channel_mask = AUDIO_CHANNEL_OUT_5POINT1;
+ switch (format) {
+ case FORMAT_PCM16:
+ case FORMAT_PCM32:
+ config.sample_rate = sr;
+ switch (ch) {
+ case 1:
+ config.channel_mask = AUDIO_CHANNEL_OUT_MONO;
+ break;
+ case 2:
+ config.channel_mask = AUDIO_CHANNEL_OUT_STEREO;
+ break;
+ case 6:
+ config.channel_mask = AUDIO_CHANNEL_OUT_5POINT1;
+ break;
+ case 8:
+ config.channel_mask = AUDIO_CHANNEL_OUT_7POINT1;
+ break;
+ default:
+ config.channel_mask = AUDIO_CHANNEL_OUT_STEREO;
+ break;
+ }
+ break;
+
+ case FORMAT_DD:
+ case FORMAT_MAT:
+ case FORMAT_IEC61937:
+ case FORMAT_AC4:
+ config.sample_rate = 48000;
+ config.channel_mask = AUDIO_CHANNEL_OUT_5POINT1;
+ break;
+
+ case FORMAT_MP3:
+ case FORMAT_AAC:
+ case FORMAT_OGG:
+ case FORMAT_FLAC:
+ config.sample_rate = sr;
+ config.channel_mask = AUDIO_CHANNEL_OUT_STEREO;
+ break;
+
+ default:
+ break;
}
+
config.format = format_tab[format];
test_output_stream(device, buf, size, &config);