whitespace cleanup
Adrian Smith
9 years ago
36 | 36 | u32_t next = 0; |
37 | 37 | |
38 | 38 | while (frames--) { |
39 | if (((*lptr & 0x00FF0000) == 0x00050000 && (*rptr & 0x00FF0000) == 0x00050000) || | |
39 | if (((*lptr & 0x00FF0000) == 0x00050000 && (*rptr & 0x00FF0000) == 0x00050000) || | |
40 | 40 | ((*lptr & 0x00FF0000) == 0x00FA0000 && (*rptr & 0x00FF0000) == 0x00FA0000)) { |
41 | 41 | if (*lptr >> 24 == next) { |
42 | 42 | matched++; |
227 | 227 | |
228 | 228 | // found media data, advance to start of first chunk and return |
229 | 229 | if (!strcmp(type, "mdat")) { |
230 | _buf_inc_readp(streambuf, 8); | |
230 | _buf_inc_readp(streambuf, 8); | |
231 | 231 | a->pos += 8; |
232 | 232 | bytes -= 8; |
233 | 233 | if (play) { |
609 | 609 | ff->avcodec_alloc_frame = dlsym(handle_codec, "avcodec_alloc_frame"); |
610 | 610 | ff->avcodec_free_frame = dlsym(handle_codec, "avcodec_free_frame"); |
611 | 611 | ff->avcodec_decode_audio4 = dlsym(handle_codec, "avcodec_decode_audio4"); |
612 | ff->av_init_packet = dlsym(handle_codec, "av_init_packet"); | |
613 | ff->av_free_packet = dlsym(handle_codec, "av_free_packet"); | |
612 | ff->av_init_packet = dlsym(handle_codec, "av_init_packet"); | |
613 | ff->av_free_packet = dlsym(handle_codec, "av_free_packet"); | |
614 | 614 | |
615 | 615 | if ((err = dlerror()) != NULL) { |
616 | 616 | LOG_INFO("dlerror: %s", err); |
619 | 619 | |
620 | 620 | LOG_INFO("loaded "LIBAVCODEC" (%u.%u.%u)", LIBAVCODEC_VERSION_MAJOR, ff->avcodec_version() >> 16, (ff->avcodec_version() >> 8) & 0xff, ff->avcodec_version() & 0xff); |
621 | 621 | |
622 | ff->avformat_version = dlsym(handle_format, "avformat_version"); | |
623 | ff->avformat_alloc_context = dlsym(handle_format, "avformat_alloc_context"); | |
624 | ff->avformat_free_context = dlsym(handle_format, "avformat_free_context"); | |
625 | ff->avformat_open_input = dlsym(handle_format, "avformat_open_input"); | |
626 | ff->avformat_find_stream_info = dlsym(handle_format, "avformat_find_stream_info"); | |
627 | ff->avio_alloc_context = dlsym(handle_format, "avio_alloc_context"); | |
628 | ff->av_read_frame = dlsym(handle_format, "av_read_frame"); | |
629 | ff->av_find_input_format= dlsym(handle_format, "av_find_input_format"); | |
622 | ff->avformat_version = dlsym(handle_format, "avformat_version"); | |
623 | ff->avformat_alloc_context = dlsym(handle_format, "avformat_alloc_context"); | |
624 | ff->avformat_free_context = dlsym(handle_format, "avformat_free_context"); | |
625 | ff->avformat_open_input = dlsym(handle_format, "avformat_open_input"); | |
626 | ff->avformat_find_stream_info = dlsym(handle_format, "avformat_find_stream_info"); | |
627 | ff->avio_alloc_context = dlsym(handle_format, "avio_alloc_context"); | |
628 | ff->av_read_frame = dlsym(handle_format, "av_read_frame"); | |
629 | ff->av_find_input_format= dlsym(handle_format, "av_find_input_format"); | |
630 | 630 | ff->av_register_all = dlsym(handle_format, "av_register_all"); |
631 | 631 | |
632 | 632 | if ((err = dlerror()) != NULL) { |
235 | 235 | optind += 1; |
236 | 236 | } else { |
237 | 237 | usage(argv[0]); |
238 | exit(0); | |
238 | exit(0); | |
239 | 239 | } |
240 | 240 | |
241 | 241 | switch (opt[0]) { |
242 | case 'o': | |
243 | output_device = optarg; | |
244 | break; | |
242 | case 'o': | |
243 | output_device = optarg; | |
244 | break; | |
245 | 245 | case 'a': |
246 | 246 | output_params = optarg; |
247 | 247 | break; |
259 | 259 | case 'e': |
260 | 260 | exclude_codecs = optarg; |
261 | 261 | break; |
262 | case 'd': | |
262 | case 'd': | |
263 | 263 | { |
264 | 264 | char *l = strtok(optarg, "="); |
265 | 265 | char *v = strtok(NULL, "="); |
277 | 277 | exit(0); |
278 | 278 | } |
279 | 279 | } |
280 | break; | |
280 | break; | |
281 | 281 | case 'f': |
282 | 282 | logfile = optarg; |
283 | 283 | break; |
397 | 397 | case 't': |
398 | 398 | license(); |
399 | 399 | exit(0); |
400 | default: | |
401 | break; | |
402 | } | |
403 | } | |
400 | default: | |
401 | break; | |
402 | } | |
403 | } | |
404 | 404 | |
405 | 405 | // warn if command line includes something which isn't parsed |
406 | 406 | if (optind < argc) { |
677 | 677 | LOG_INFO("memory locked"); |
678 | 678 | } |
679 | 679 | |
680 | mallopt(M_TRIM_THRESHOLD, -1); | |
681 | mallopt(M_MMAP_MAX, 0); | |
680 | mallopt(M_TRIM_THRESHOLD, -1); | |
681 | mallopt(M_MMAP_MAX, 0); | |
682 | 682 | |
683 | 683 | touch_memory(silencebuf, MAX_SILENCE_FRAMES * BYTES_PER_FRAME); |
684 | 684 | touch_memory(outputbuf->buf, outputbuf->size); |
50 | 50 | #endif |
51 | 51 | |
52 | 52 | void list_devices(void) { |
53 | PaError err; | |
53 | PaError err; | |
54 | 54 | int i; |
55 | 55 | |
56 | 56 | if ((err = Pa_Initialize()) != paNoError) { |
66 | 66 | } |
67 | 67 | printf("\n"); |
68 | 68 | |
69 | if ((err = Pa_Terminate()) != paNoError) { | |
69 | if ((err = Pa_Terminate()) != paNoError) { | |
70 | 70 | LOG_WARN("error closing port audio: %s", Pa_GetErrorText(err)); |
71 | 71 | } |
72 | 72 | } |
403 | 403 | |
404 | 404 | LOG_INFO("requested latency: %u", output.latency); |
405 | 405 | |
406 | if ((err = Pa_Initialize()) != paNoError) { | |
406 | if ((err = Pa_Initialize()) != paNoError) { | |
407 | 407 | LOG_WARN("error initialising port audio: %s", Pa_GetErrorText(err)); |
408 | 408 | exit(0); |
409 | 409 | } |
433 | 433 | } |
434 | 434 | } |
435 | 435 | |
436 | if ((err = Pa_Terminate()) != paNoError) { | |
436 | if ((err = Pa_Terminate()) != paNoError) { | |
437 | 437 | LOG_WARN("error closing port audio: %s", Pa_GetErrorText(err)); |
438 | 438 | } |
439 | 439 |
190 | 190 | if (decode.new_stream) { |
191 | 191 | LOG_INFO("setting track_start"); |
192 | 192 | LOCK_O_not_direct; |
193 | output.next_sample_rate = decode_newstream(sample_rate, output.supported_rates); | |
193 | output.next_sample_rate = decode_newstream(sample_rate, output.supported_rates); | |
194 | 194 | output.track_start = outputbuf->writep; |
195 | 195 | IF_DSD( output.next_dop = false; ) |
196 | 196 | if (output.fade_mode) _checkfade(true); |
676 | 676 | } |
677 | 677 | |
678 | 678 | in_addr_t discover_server(void) { |
679 | struct sockaddr_in d; | |
680 | struct sockaddr_in s; | |
679 | struct sockaddr_in d; | |
680 | struct sockaddr_in s; | |
681 | 681 | char *buf; |
682 | 682 | struct pollfd pollinfo; |
683 | 683 | |
689 | 689 | buf = "e"; |
690 | 690 | |
691 | 691 | memset(&d, 0, sizeof(d)); |
692 | d.sin_family = AF_INET; | |
692 | d.sin_family = AF_INET; | |
693 | 693 | d.sin_port = htons(PORT); |
694 | d.sin_addr.s_addr = htonl(INADDR_BROADCAST); | |
694 | d.sin_addr.s_addr = htonl(INADDR_BROADCAST); | |
695 | 695 | |
696 | 696 | pollinfo.fd = disc_sock; |
697 | 697 | pollinfo.events = POLLIN; |
723 | 723 | #define VAR_CAP_LEN 128 |
724 | 724 | |
725 | 725 | void slimproto(log_level level, char *server, u8_t mac[6], const char *name, const char *namefile, const char *modelname) { |
726 | struct sockaddr_in serv_addr; | |
726 | struct sockaddr_in serv_addr; | |
727 | 727 | static char fixed_cap[FIXED_CAP_LEN], var_cap[VAR_CAP_LEN] = ""; |
728 | 728 | bool reconnect = false; |
729 | 729 | unsigned failed_connect = 0; |
154 | 154 | // codec open - this is an extension to slimproto to allow the server to read the header and then return decode params |
155 | 155 | struct codc_packet { |
156 | 156 | char opcode[4]; |
157 | u8_t format; | |
157 | u8_t format; | |
158 | 158 | u8_t pcm_sample_size; |
159 | 159 | u8_t pcm_sample_rate; |
160 | 160 | u8_t pcm_channels; |
366 | 366 | } |
367 | 367 | |
368 | 368 | void stream_sock(u32_t ip, u16_t port, const char *header, size_t header_len, unsigned threshold, bool cont_wait) { |
369 | struct sockaddr_in addr; | |
369 | struct sockaddr_in addr; | |
370 | 370 | |
371 | 371 | int sock = socket(AF_INET, SOCK_STREAM, 0); |
372 | 372 | |
385 | 385 | set_nonblock(sock); |
386 | 386 | set_nosigpipe(sock); |
387 | 387 | |
388 | if (connect_timeout(sock, (struct sockaddr *) &addr, sizeof(addr), 10) < 0) { | |
388 | if (connect_timeout(sock, (struct sockaddr *) &addr, sizeof(addr), 10) < 0) { | |
389 | 389 | LOG_INFO("unable to connect to server"); |
390 | 390 | LOCK; |
391 | 391 | stream.state = DISCONNECT; |
69 | 69 | static char *str = NULL; |
70 | 70 | char *ptr, *ret; |
71 | 71 | if (src) str = src; |
72 | if (str && (ptr = strchr(str, c))) { | |
72 | if (str && (ptr = strchr(str, c))) { | |
73 | 73 | ret = str; |
74 | 74 | *ptr = '\0'; |
75 | 75 | str = ptr + 1; |
102 | 102 | #if LINUX |
103 | 103 | // search first 4 interfaces returned by IFCONF |
104 | 104 | void get_mac(u8_t mac[]) { |
105 | struct ifconf ifc; | |
106 | struct ifreq *ifr, *ifend; | |
107 | struct ifreq ifreq; | |
108 | struct ifreq ifs[4]; | |
105 | struct ifconf ifc; | |
106 | struct ifreq *ifr, *ifend; | |
107 | struct ifreq ifreq; | |
108 | struct ifreq ifs[4]; | |
109 | 109 | |
110 | 110 | mac[0] = mac[1] = mac[2] = mac[3] = mac[4] = mac[5] = 0; |
111 | 111 | |
112 | int s = socket(AF_INET, SOCK_DGRAM, 0); | |
113 | ||
114 | ifc.ifc_len = sizeof(ifs); | |
115 | ifc.ifc_req = ifs; | |
116 | ||
117 | if (ioctl(s, SIOCGIFCONF, &ifc) == 0) { | |
112 | int s = socket(AF_INET, SOCK_DGRAM, 0); | |
113 | ||
114 | ifc.ifc_len = sizeof(ifs); | |
115 | ifc.ifc_req = ifs; | |
116 | ||
117 | if (ioctl(s, SIOCGIFCONF, &ifc) == 0) { | |
118 | 118 | ifend = ifs + (ifc.ifc_len / sizeof(struct ifreq)); |
119 | 119 | |
120 | 120 | for (ifr = ifc.ifc_req; ifr < ifend; ifr++) { |
162 | 162 | #if WIN |
163 | 163 | #pragma comment(lib, "IPHLPAPI.lib") |
164 | 164 | void get_mac(u8_t mac[]) { |
165 | IP_ADAPTER_INFO AdapterInfo[16]; | |
166 | DWORD dwBufLen = sizeof(AdapterInfo); | |
167 | DWORD dwStatus = GetAdaptersInfo(AdapterInfo, &dwBufLen); | |
165 | IP_ADAPTER_INFO AdapterInfo[16]; | |
166 | DWORD dwBufLen = sizeof(AdapterInfo); | |
167 | DWORD dwStatus = GetAdaptersInfo(AdapterInfo, &dwBufLen); | |
168 | 168 | |
169 | 169 | mac[0] = mac[1] = mac[2] = mac[3] = mac[4] = mac[5] = 0; |
170 | 170 | |
315 | 315 | |
316 | 316 | #if WIN |
317 | 317 | void winsock_init(void) { |
318 | WSADATA wsaData; | |
318 | WSADATA wsaData; | |
319 | 319 | WORD wVersionRequested = MAKEWORD(2, 2); |
320 | int WSerr = WSAStartup(wVersionRequested, &wsaData); | |
321 | if (WSerr != 0) { | |
322 | LOG_ERROR("Bad winsock version"); | |
323 | exit(1); | |
324 | } | |
320 | int WSerr = WSAStartup(wVersionRequested, &wsaData); | |
321 | if (WSerr != 0) { | |
322 | LOG_ERROR("Bad winsock version"); | |
323 | exit(1); | |
324 | } | |
325 | 325 | } |
326 | 326 | |
327 | 327 | void winsock_close(void) { |
365 | 365 | tv.tv_usec = 1000 * (timeout % 1000); |
366 | 366 | |
367 | 367 | ret = select(fds[0].fd + 1, &r, &w, NULL, &tv); |
368 | ||
368 | ||
369 | 369 | if (ret < 0) return ret; |
370 | 370 | |
371 | 371 | fds[0].revents = 0; |
382 | 382 | u8_t *ptr; |
383 | 383 | for (ptr = buf; ptr < buf + size; ptr += sysconf(_SC_PAGESIZE)) { |
384 | 384 | *ptr = 0; |
385 | } | |
386 | } | |
387 | #endif | |
385 | } | |
386 | } | |
387 | #endif |