diff options
author | Kibum Kim <kb0929.kim@samsung.com> | 2012-02-27 21:15:48 +0900 |
---|---|---|
committer | Kibum Kim <kb0929.kim@samsung.com> | 2012-02-27 21:15:48 +0900 |
commit | b8e758c1624a163a988aa868fbf3da19e2612f6c (patch) | |
tree | 15744098f716f394766a5ee2947aed8946f04d2f /audiotest | |
download | avsystem-b8e758c1624a163a988aa868fbf3da19e2612f6c.tar.gz avsystem-b8e758c1624a163a988aa868fbf3da19e2612f6c.tar.bz2 avsystem-b8e758c1624a163a988aa868fbf3da19e2612f6c.zip |
tizen beta release
Diffstat (limited to 'audiotest')
-rw-r--r-- | audiotest/avsys-audio-test.c | 308 | ||||
-rw-r--r-- | audiotest/avsys-audio-volume-dump.c | 104 |
2 files changed, 412 insertions, 0 deletions
diff --git a/audiotest/avsys-audio-test.c b/audiotest/avsys-audio-test.c new file mode 100644 index 0000000..c6a53d5 --- /dev/null +++ b/audiotest/avsys-audio-test.c @@ -0,0 +1,308 @@ +/* + * avsystem + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Jonghyuk Choi <jhchoi.choi@samsung.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <stdio.h> +#include <unistd.h> +#include <alloca.h> +#include <memory.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <errno.h> +#include <signal.h> +#include <avsys-audio.h> + +#define VERSION (0001) + +void usage(char *name) +{ + printf("Usage: %s [OPTION]... [FILE]...\n\n", name); + printf("-h\t\thelp\n"); + printf("-p\t\tplay raw file (default mode 0) \n"); + printf("-c\t\tcapture audio to raw file (default mode 0)\n"); + printf("-m\t\tmode\n"); + printf("\t\tmode 0 : S16LE / Stereo / 44100Hz\n"); + printf("\t\tmode 1 : S16LE / Mono / 8000Hz\n"); + printf("\t\tmode 2 : S16LE / Mono / 22050Hz\n"); + printf("\t\tmode 3 : U8 / Mono / 8000Hz\n"); + printf("-r\t\trouting\n"); + printf("\t\trouting 0 : following policy\n"); + printf("\t\trouting 1 : forced set to alsa\n"); + printf("\n"); + return; +} + +enum { + OP_NONE = -1, + OP_PLAYBACK, + OP_CAPTURE, +}; + +#define MODE_MIN 0 +#define MODE_MAX 3 + +static struct sigaction sigterm_action; /* Backup pointer of SIGTERM signal handler */ +int g_interrupted; + +int __make_param(int op, int mode, int routing, avsys_audio_param_t *param) +{ + if (!param) + return -1; + + if (op == OP_PLAYBACK) + param->mode = AVSYS_AUDIO_MODE_OUTPUT; + else if (op == OP_CAPTURE) + param->mode = AVSYS_AUDIO_MODE_INPUT; + else + return -1; + + param->priority = AVSYS_AUDIO_PRIORITY_NORMAL; + param->vol_type = AVSYS_AUDIO_VOLUME_TYPE_SYSTEM; + param->bluetooth = routing; + + switch (mode) { + case 0: + param->format = AVSYS_AUDIO_FORMAT_16BIT; + param->samplerate = 44100; + param->channels = 2; + break; + case 1: + param->format = AVSYS_AUDIO_FORMAT_16BIT; + param->samplerate = 8000; + param->channels = 1; + break; + case 2: + param->format = AVSYS_AUDIO_FORMAT_16BIT; + param->samplerate = 22050; + param->channels = 1; + break; + case 3: + param->format = AVSYS_AUDIO_FORMAT_8BIT; + param->samplerate = 8000; + param->channels = 1; + break; + default: + return -1; + break; + } + return 0; +} +int _playback(int mode, int routing, char *filename) +{ + int res = 0; + avsys_audio_param_t param; + avsys_handle_t handle = -1; + int recommended_period_size = 0; + int fd = -1; + char *pcmbuf = NULL; + int size = 0; + + if (!filename) + return -1; + + memset(¶m, sizeof(avsys_audio_param_t), '\0'); + + if (__make_param(OP_PLAYBACK, mode, routing, ¶m)) { + printf("Can not make audio parameter\n"); + return -1; + } + + res = avsys_audio_open(¶m, &handle, &recommended_period_size); + if (res != 0) { + printf("Can not open handle 0x%x\n", res); + goto FAIL; + } + + pcmbuf = alloca(recommended_period_size); + if (!pcmbuf) + goto FAIL; + + fd = open(filename, O_RDONLY); + if (fd == -1) + goto FAIL; + + while (((size = read(fd, pcmbuf, recommended_period_size)) > 0) && !g_interrupted) { + if (AVSYS_FAIL(avsys_audio_write(handle, pcmbuf, recommended_period_size))) { + printf("Oops!! audio play fail\n"); + break; + } + } + + close(fd); + avsys_audio_close(handle); + return 0; +FAIL: + if (handle != -1) + avsys_audio_close(handle); + + if (fd != -1) + close(fd); + + return res; +} + +int _capture(int mode, int routing, char *filename) +{ + int res = 0; + avsys_audio_param_t param; + avsys_handle_t handle = -1; + int recommended_period_size = 0; + int fd = -1; + char *pcmbuf = NULL; + int size = 0; + char namebuffer[64]= {0,}; + + if (!filename) + return -1; + else + snprintf(namebuffer, sizeof(namebuffer)-1, "%s.raw_%1d", filename, mode); + + printf("[%s] real filename :%s\n", __func__, namebuffer); + + memset(¶m, sizeof(avsys_audio_param_t), '\0'); + + if (__make_param(OP_CAPTURE, mode, routing, ¶m)) { + printf("Can not make audio parameter\n"); + return -1; + } + + res = avsys_audio_open(¶m, &handle, &recommended_period_size); + if (res != 0) { + printf("Can not open handle 0x%x\n", res); + goto FAIL; + } + + pcmbuf = alloca(recommended_period_size); + if (!pcmbuf) { + printf("Can not alloca pcm buffer\n"); + goto FAIL; + } + + fd = open(namebuffer, O_WRONLY | O_CREAT); + if (fd == -1) { + printf("Can not open file %s, %s\n", namebuffer, strerror(errno)); + goto FAIL; + } + + while (((size = avsys_audio_read(handle, pcmbuf, recommended_period_size)) > 0) && !g_interrupted) { + if (-1 == write(fd, pcmbuf, size)) + break; + } + + close(fd); + avsys_audio_close(handle); + return 0; +FAIL: + printf("[%s] FAIL\n",__func__); + if (handle != -1) + avsys_audio_close(handle); + + if (fd != -1) + close(fd); + + return res; +} + +void sig_handler(int signo) +{ + g_interrupted = 1; +} + +int main(int argc, char *argv[]) +{ + int opt = 0; + int operation = OP_NONE; + int mode = 0; + int tmp = 0; + int routing = 0; + struct sigaction action; + + while ((opt = getopt(argc, argv, "hpcm:r:")) != -1) { + switch (opt) { + case 'h': + usage(argv[0]); + return 0; + break; + case 'p': + if (operation != OP_NONE) { + usage(argv[0]); + return 0; + } + operation = OP_PLAYBACK; + break; + case 'c': + if (operation != OP_NONE) { + usage(argv[0]); + return 0; + } + operation = OP_CAPTURE; + break; + case 'm': + tmp = atoi(optarg); + if (tmp < MODE_MIN || tmp > MODE_MAX) { + usage(argv[0]); + printf("MESSAGE : Unsupported mode number\n"); + return -1; + } + mode = tmp; + break; + case 'r': + tmp = atoi(optarg); + if (tmp < 0 || tmp > 1) { + usage(argv[0]); + printf("MESSAGE : Unsupported mode number\n"); + return -1; + } + routing = tmp; + break; + default: + usage(argv[0]); + break; + } + } + + action.sa_handler = sig_handler; + action.sa_flags = 0; + sigemptyset(&action.sa_mask); + sigaction(SIGINT, &action, &sigterm_action); + + if (operation == OP_NONE) { + usage(argv[0]); + printf("MESSAGE : Operation is not determined\n"); + return -1; + } else if (operation == OP_PLAYBACK) { + char *name = NULL; + name = argv[optind++]; + printf("op %u, mode %u, routing %d, name %s\n", operation, mode, routing, name); + _playback(mode, routing, name); + } else if (operation == OP_CAPTURE) { + char *name = NULL; + name = argv[optind++]; + if (strlen(name) < 2) { + printf("Insufficient filename length\n"); + return -2; + } + printf("op %u, mode %u, routing %d, name %s\n", operation, mode, routing, name); + _capture(mode, routing, name); + } + + return 0; +} diff --git a/audiotest/avsys-audio-volume-dump.c b/audiotest/avsys-audio-volume-dump.c new file mode 100644 index 0000000..76a97a5 --- /dev/null +++ b/audiotest/avsys-audio-volume-dump.c @@ -0,0 +1,104 @@ +/* + * avsystem + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Jonghyuk Choi <jhchoi.choi@samsung.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <stdio.h> +#include <alloca.h> +#include <string.h> +#include "../include/avsys-audio.h" +#include "../include/avsys-audio-logical-volume.h" + +#define VERSION_NUM 0001 + + +void usage(char *name) +{ + printf("Usage: %s [FILE]...\n\n", name); + printf("Version %04d\n", VERSION_NUM); + printf("\n"); + return; +} + +int main(int argc, char* argv[]) +{ + int i = 0; + int j = 0; + int k = 0; + int err = 0; + char filepath[256]={0,}; + FILE *fp = NULL; + + if(argc > 2) + { + usage(argv[0]); + return 0; + } + else if(argc == 2) + { + strncpy(filepath, argv[1], sizeof(filepath)-1); + } + else if(argc == 1) + { + strncpy(filepath, VOLUME_FILE_PATH, sizeof(filepath)-1); + fprintf(stderr,"Use default file path %s\n", filepath); + } + + fp = fopen(filepath, "w"); + if(!fp) + { + fprintf(stderr,"Can not open file %s\n",filepath); + return -1; + } + + for(i=AVSYS_AUDIO_LVOL_GAIN_TYPE_0; i<AVSYS_AUDIO_LVOL_GAIN_TYPE_MAX; i++) + { + for(j=AVSYS_AUDIO_LVOL_DEV_TYPE_SPK; j<=AVSYS_AUDIO_LVOL_DEV_TYPE_BTHEADSET;j++) + { + int lv = 0; + int rv = 0; + char *str_dev[] = { "SPK", "HEADSET", "BTHEADSET" }; + + for(k=0;k<LVOLUME_MAX_MULTIMEDIA;k++) + { + err = avsys_audio_get_volume_table(i, AVSYS_AUDIO_LVOL_DEV_TYPE_SPK, k, &lv, &rv); + if(err) + goto FAIL; + + fprintf(fp,"%1d:%s:%d:%d:%d\n",i,str_dev[j],k,lv,rv); + } + } + } + + if(fp != NULL) + { + fclose(fp); + } + printf("Success\n"); + return 0; + +FAIL: + if(fp != NULL) + { + fclose(fp); + } + unlink(filepath); + fprintf(stderr,"Can not dump volume table\n"); + return -1; +} |