Changeset 5022:b2a2e896974d in roaraudio for roarclients
- Timestamp:
- 05/27/11 17:13:54 (13 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- roarclients
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
roarclients/roarbidir.c
r4997 r5022 50 50 char * server = NULL; 51 51 char * k; 52 int fh;53 52 int i; 54 int in = -1; 55 int out = -1; 53 struct roar_vio_defaults def; 54 struct roar_vio_calls in_store; 55 struct roar_vio_calls * in = NULL, * out = NULL; 56 struct roar_vio_calls * vss_vio = NULL; 57 roar_vs_t * vss; 58 struct roar_vio_select vios[2]; 56 59 char buf[BUFSIZE]; 57 fd_set sl; 58 struct timeval tv; 59 int max_fh; 60 int err; 61 ssize_t ret; 62 63 if ( roar_vio_dstr_init_defaults(&def, ROAR_VIO_DEF_TYPE_NONE, O_RDONLY, 0644) == -1 ) 64 return 1; 60 65 61 66 for (i = 1; i < argc; i++) { … … 75 80 usage(); 76 81 return 0; 77 } else if ( in == -1) {78 if ( (in = open(k, O_RDONLY, 0644)) == -1 ) {79 fprintf(stderr, "Error: can not open file: %s: %s\n", k, strerror(errno));82 } else if ( in == NULL ) { 83 if ( roar_vio_open_dstr(&in_store, k, &def, 1) == -1 ) { 84 fprintf(stderr, "Error: can not open file: %s: %s\n", k, roar_error2str(roar_error)); 80 85 return 1; 81 86 } 87 in = &in_store; 82 88 } else { 83 89 fprintf(stderr, "Error: unknown argument: %s\n", k); … … 87 93 } 88 94 89 if ( ( fh = roar_simple_stream(rate, channels, bits, codec, server, ROAR_DIR_BIDIR, "roarbidir")) == -1) {90 fprintf(stderr, "Error: can not start playback: %s\n", roar_error2str( roar_error));91 if ( in != -1)92 close(in);95 if ( (vss = roar_vs_new_simple(server, "roarbidir", rate, channels, codec, bits, ROAR_DIR_BIDIR, &err)) == NULL ) { 96 fprintf(stderr, "Error: can not start playback: %s\n", roar_error2str(err)); 97 if ( in != NULL ) 98 roar_vio_close(in); 93 99 return 1; 94 100 } 95 101 96 if ( in == -1)97 in = ROAR_STDIN;98 if ( out == -1)99 out = ROAR_STDOUT;102 if ( in == NULL ) 103 in = roar_stdin; 104 if ( out == NULL ) 105 out = roar_stdout; 100 106 101 max_fh = (in > fh ? in : fh) + 1; 102 i = 1; 107 vss_vio = roar_vs_vio_obj(vss, NULL); 103 108 104 while (i > 0) { 105 FD_ZERO(&sl); 106 FD_SET(in, &sl); 107 FD_SET(fh, &sl); 109 while (1) { 110 memset(vios, 0, sizeof(vios)); 108 111 109 tv.tv_sec = 0;110 tv.tv_usec = 50000;112 ROAR_VIO_SELECT_SETVIO(&(vios[0]), vss_vio, ROAR_VIO_SELECT_READ); 113 ROAR_VIO_SELECT_SETVIO(&(vios[1]), in, ROAR_VIO_SELECT_READ); 111 114 112 if (select(max_fh, &sl, NULL, NULL, &tv) > 0) { 113 if ( FD_ISSET(fh, &sl) ) { 114 if ( (i = read(fh, buf, BUFSIZE)) == -1 ) 115 return -1; 116 if ( write(out, buf, i) != i ) 117 return -1; 118 } 119 if ( FD_ISSET(in, &sl) ) { 120 if ( (i = read(in, buf, BUFSIZE)) == -1 ) 121 return -1; 122 if ( write(fh, buf, i) != i ) 123 return -1; 124 } 115 if ( (ret = roar_vio_select(vios, 2, NULL, NULL)) == -1 ) 116 break; 117 118 if ( ret < 0 ) 119 continue; 120 121 if ( vios[0].eventsa & ROAR_VIO_SELECT_READ ) { 122 if ( (ret = roar_vs_read(vss, buf, sizeof(buf), NULL)) == -1 ) 123 break; 124 if ( roar_vio_write(out, buf, ret) != ret ) 125 break; 126 } 127 if ( vios[1].eventsa & ROAR_VIO_SELECT_READ ) { 128 if ( (ret = roar_vio_read(in, buf, sizeof(buf))) == -1 ) 129 break; 130 if ( roar_vs_write(vss, buf, ret, NULL) != ret ) 131 break; 125 132 } 126 133 } 127 134 128 roar_ simple_close(fh);135 roar_vs_close(vss, ROAR_VS_TRUE, NULL); 129 136 130 close(in);137 roar_vio_close(in); 131 138 132 139 return 0; -
roarclients/roarcatplay.c
r4914 r5022 54 54 int bg = 0; 55 55 int verbose = 0; 56 roar_vs_t * vss; 57 int err; 56 58 #ifdef ROAR_HAVE_UNIX 57 59 struct roar_connection con[1]; … … 121 123 } else { // MODE_SIMPLE 122 124 #endif 123 if ( roar_simple_play_file(file, server, "roarcatplay") == -1) {124 ROAR_ERR("Can not start playback ");125 if ( (vss = roar_vs_new_from_file(server, "roarcatplay", file, &err)) == NULL ) { 126 ROAR_ERR("Can not start playback: %s", roar_error2str(err)); 125 127 return 1; 126 128 } 129 roar_vs_run(vss, NULL); 130 roar_vs_sync(vss, ROAR_VS_WAIT, NULL); 131 roar_vs_close(vss, ROAR_VS_FALSE, NULL); 127 132 #ifdef ROAR_HAVE_UNIX 128 133 } -
roarclients/roarcatvio.c
r4708 r5022 44 44 45 45 int main (int argc, char * argv[]) { 46 int rate = ROAR_RATE_DEFAULT; 47 int bits = ROAR_BITS_DEFAULT; 48 int channels = ROAR_CHANNELS_DEFAULT; 46 struct roar_audio_info info = {.rate = ROAR_RATE_DEFAULT, .bits = ROAR_BITS_DEFAULT, .channels = ROAR_CHANNELS_DEFAULT}; 49 47 int codec = -1; 48 int auinfo_changed = 0; 50 49 char * server = NULL; 51 50 char * k; 52 51 int i; 53 52 char * name = "roarcatvio"; 54 struct roar_vio_calls file, stream; 55 struct roar_vio_defaults def; 56 int file_opened = 0; 57 const char * content_type; 58 59 if ( roar_vio_open_fh(&file, ROAR_STDIN) == -1 ) 60 return 1; 61 62 if ( roar_vio_dstr_init_defaults(&def, ROAR_VIO_DEF_TYPE_NONE, O_RDONLY, 0644) == -1 ) 63 return 1; 53 roar_vs_t * vss; 54 char * filename = NULL; 55 int err; 64 56 65 57 for (i = 1; i < argc; i++) { … … 71 63 name = argv[++i]; 72 64 } else if ( !strcmp(k, "--rate") || !strcmp(k, "-r") ) { 73 rate = atoi(argv[++i]); 65 info.rate = roar_str2rate(argv[++i]); 66 auinfo_changed = 1; 74 67 } else if ( !strcmp(k, "--bits") ) { 75 bits = atoi(argv[++i]); 68 info.bits = roar_str2bits(argv[++i]); 69 auinfo_changed = 1; 76 70 } else if ( !strcmp(k, "-b") ) { 77 bits = 8; 71 info.bits = 8; 72 auinfo_changed = 1; 78 73 } else if ( !strcmp(k, "--channels") || !strcmp(k, "--chans") ) { 79 channels = atoi(argv[++i]); 74 info.channels = roar_str2channels(argv[++i]); 75 auinfo_changed = 1; 80 76 } else if ( !strcmp(k, "-m") ) { 81 channels = 1; 77 info.channels = 1; 78 auinfo_changed = 1; 82 79 } else if ( !strcmp(k, "--codec") ) { 83 80 codec = roar_str2codec(argv[++i]); 81 auinfo_changed = 1; 84 82 } else if ( !strcmp(k, "--help") ) { 85 83 usage(); 86 84 return 0; 87 } else if ( !file_opened ) { 88 file_opened = 1; 89 if ( roar_vio_open_dstr(&file, k, &def, 1) == -1 ) { 90 fprintf(stderr, "Error: can not open file: %s: %s\n", k, strerror(errno)); 91 return 1; 92 } 93 94 if ( codec == -1 ) { 95 if ( roar_vio_ctl(&file, ROAR_VIO_CTL_GET_MIMETYPE, &content_type) != -1 ) { 96 codec = roar_mime2codec(content_type); 97 } 98 } 85 } else if ( filename == NULL ) { 86 filename = k; 99 87 } else { 100 88 fprintf(stderr, "Error: unknown argument: %s\n", k); … … 107 95 codec = ROAR_CODEC_DEFAULT; 108 96 109 if ( roar_vio_simple_stream(&stream, rate, channels, bits, codec, server, ROAR_DIR_PLAY, name) == -1 ) { 110 fprintf(stderr, "Error: can not start playback\n"); 111 return 1; 97 info.codec = codec; 98 99 if ( (vss = roar_vs_new(server, name, &err)) == NULL ) { 100 fprintf(stderr, "Error: can not connect to server: %s: %s\n", 101 server == NULL ? "(default)" : server, roar_error2str(err)); 102 return 10; 112 103 } 113 104 114 roar_vio_copy_data(&stream, &file); 105 if ( auinfo_changed ) { 106 if ( roar_vs_stream(vss, &info, ROAR_DIR_PLAY, &err) == -1 ) { 107 fprintf(stderr, "Error: can not create new stream: %s\n", roar_error2str(err)); 108 roar_vs_close(vss, ROAR_VS_TRUE, NULL); 109 return 10; 110 } 111 } 115 112 116 roar_vio_close(&file); 117 roar_vio_close(&stream); 113 if ( roar_vs_file_simple(vss, filename, &err) == -1 ) { 114 fprintf(stderr, "Error: can not open file: %s: %s\n", filename, roar_error2str(err)); 115 roar_vs_close(vss, ROAR_VS_TRUE, NULL); 116 return 10; 117 } 118 119 roar_vs_run(vss, NULL); 120 121 roar_vs_sync(vss, ROAR_VS_WAIT, NULL); 122 roar_vs_close(vss, ROAR_VS_FALSE, NULL); 118 123 119 124 return 0;
Note: See TracChangeset
for help on using the changeset viewer.