• Home
  • Raw
  • Download

Lines Matching +full:debug +full:- +full:mode

5   Copyright 2006-2007 Pierre Ossman <ossman@cendio.se> for Cendio AB
54 #include <pulsecore/core-util.h>
55 #include <pulsecore/sample-util.h>
122 static FILE* (*_fopen)(const char *path, const char *mode) = NULL;
130 static FILE* (*_fopen64)(const char *path, const char *mode) = NULL;
259 if (!(i)->context || pa_context_get_state((i)->context) != PA_CONTEXT_READY) { \
260debug(DEBUG_LEVEL_NORMAL, __FILE__": Not connected: %s\n", (i)->context ? pa_strerror(pa_context_e…
266 if (!(i)->context || pa_context_get_state((i)->context) != PA_CONTEXT_READY || \
267 !(i)->play_stream || pa_stream_get_state((i)->play_stream) != PA_STREAM_READY) { \
268debug(DEBUG_LEVEL_NORMAL, __FILE__": Not connected: %s\n", (i)->context ? pa_strerror(pa_context_e…
274 if (!(i)->context || pa_context_get_state((i)->context) != PA_CONTEXT_READY || \
275 !(i)->rec_stream || pa_stream_get_state((i)->rec_stream) != PA_STREAM_READY) { \
276debug(DEBUG_LEVEL_NORMAL, __FILE__": Not connected: %s\n", (i)->context ? pa_strerror(pa_context_e…
281 static void debug(int level, const char *format, ...) PA_GCC_PRINTF_ATTR(2,3);
287 static void debug(int level, const char *format, ...) { in debug() function
312 * program needs to be compiled with -rdynamic for this to work! in padsp_disabled()
314 * -> disable /dev/dsp emulation, bit 2 -> disable /dev/sndstat in padsp_disabled()
315 * emulation, bit 3 -> disable /dev/mixer emulation. Hence a value in padsp_disabled()
385 debug(DEBUG_LEVEL_NORMAL, __FILE__": freeing fd info (fd=%i)\n", i->app_fd); in fd_info_free()
389 if (i->mainloop) in fd_info_free()
390 pa_threaded_mainloop_stop(i->mainloop); in fd_info_free()
392 if (i->play_stream) { in fd_info_free()
393 pa_stream_disconnect(i->play_stream); in fd_info_free()
394 pa_stream_unref(i->play_stream); in fd_info_free()
397 if (i->rec_stream) { in fd_info_free()
398 pa_stream_disconnect(i->rec_stream); in fd_info_free()
399 pa_stream_unref(i->rec_stream); in fd_info_free()
402 if (i->context) { in fd_info_free()
403 pa_context_disconnect(i->context); in fd_info_free()
404 pa_context_unref(i->context); in fd_info_free()
407 if (i->mainloop) in fd_info_free()
408 pa_threaded_mainloop_free(i->mainloop); in fd_info_free()
410 if (i->app_fd >= 0) { in fd_info_free()
412 _close(i->app_fd); in fd_info_free()
415 if (i->thread_fd >= 0) { in fd_info_free()
417 _close(i->thread_fd); in fd_info_free()
420 free(i->buf); in fd_info_free()
422 pthread_mutex_destroy(&i->mutex); in fd_info_free()
429 pthread_mutex_lock(&i->mutex); in fd_info_ref()
430 assert(i->ref >= 1); in fd_info_ref()
431 i->ref++; in fd_info_ref()
433 debug(DEBUG_LEVEL_VERBOSE, __FILE__": ref++, now %i\n", i->ref); in fd_info_ref()
434 pthread_mutex_unlock(&i->mutex); in fd_info_ref()
441 pthread_mutex_lock(&i->mutex); in fd_info_unref()
442 assert(i->ref >= 1); in fd_info_unref()
443 r = --i->ref; in fd_info_unref()
444 debug(DEBUG_LEVEL_VERBOSE, __FILE__": ref--, now %i\n", i->ref); in fd_info_unref()
445 pthread_mutex_unlock(&i->mutex); in fd_info_unref()
459 pa_threaded_mainloop_signal(i->mainloop, 0); in context_state_cb()
473 i->sample_spec.format = PA_SAMPLE_U8; in reset_params()
474 i->sample_spec.channels = 1; in reset_params()
475 i->sample_spec.rate = 8000; in reset_params()
476 i->fragment_size = 0; in reset_params()
477 i->n_fragments = 0; in reset_params()
508 debug(DEBUG_LEVEL_NORMAL, __FILE__": atfork_prepare() enter\n"); in atfork_prepare()
514 for (i = fd_infos; i; i = i->next) { in atfork_prepare()
515 pthread_mutex_lock(&i->mutex); in atfork_prepare()
516 pa_threaded_mainloop_lock(i->mainloop); in atfork_prepare()
521 debug(DEBUG_LEVEL_NORMAL, __FILE__": atfork_prepare() exit\n"); in atfork_prepare()
527 debug(DEBUG_LEVEL_NORMAL, __FILE__": atfork_parent() enter\n"); in atfork_parent()
531 for (i = fd_infos; i; i = i->next) { in atfork_parent()
532 pa_threaded_mainloop_unlock(i->mainloop); in atfork_parent()
533 pthread_mutex_unlock(&i->mutex); in atfork_parent()
540 debug(DEBUG_LEVEL_NORMAL, __FILE__": atfork_parent() exit\n"); in atfork_parent()
546 debug(DEBUG_LEVEL_NORMAL, __FILE__": atfork_child() enter\n"); in atfork_child()
552 for (i = fd_infos; i; i = i->next) { in atfork_child()
553 pthread_mutex_init(&i->mutex, NULL); in atfork_child()
555 if (i->context) { in atfork_child()
556 pa_context_disconnect(i->context); in atfork_child()
557 pa_context_unref(i->context); in atfork_child()
558 i->context = NULL; in atfork_child()
561 if (i->play_stream) { in atfork_child()
562 pa_stream_unref(i->play_stream); in atfork_child()
563 i->play_stream = NULL; in atfork_child()
566 if (i->rec_stream) { in atfork_child()
567 pa_stream_unref(i->rec_stream); in atfork_child()
568 i->rec_stream = NULL; in atfork_child()
571 if (i->app_fd >= 0) { in atfork_child()
573 _close(i->app_fd); in atfork_child()
574 i->app_fd = -1; in atfork_child()
577 if (i->thread_fd >= 0) { in atfork_child()
579 _close(i->thread_fd); in atfork_child()
580 i->thread_fd = -1; in atfork_child()
583 i->unusable = 1; in atfork_child()
588 debug(DEBUG_LEVEL_NORMAL, __FILE__": atfork_child() exit\n"); in atfork_child()
601 i->operation_success = success; in stream_success_cb()
602 pa_threaded_mainloop_signal(i->mainloop, 0); in stream_success_cb()
611 i->operation_success = success; in context_success_cb()
612 pa_threaded_mainloop_signal(i->mainloop, 0); in context_success_cb()
617 int sfds[2] = { -1, -1 }; in fd_info_new()
621 debug(DEBUG_LEVEL_NORMAL, __FILE__": fd_info_new()\n"); in fd_info_new()
632 i->app_fd = i->thread_fd = -1; in fd_info_new()
633 i->type = type; in fd_info_new()
635 i->mainloop = NULL; in fd_info_new()
636 i->context = NULL; in fd_info_new()
637 i->play_stream = NULL; in fd_info_new()
638 i->rec_stream = NULL; in fd_info_new()
639 i->play_precork = 0; in fd_info_new()
640 i->rec_precork = 0; in fd_info_new()
641 i->io_event = NULL; in fd_info_new()
642 i->io_flags = 0; in fd_info_new()
643 pthread_mutex_init(&i->mutex, NULL); in fd_info_new()
644 i->ref = 1; in fd_info_new()
645 i->buf = NULL; in fd_info_new()
646 i->leftover = 0; in fd_info_new()
647 i->rec_offset = 0; in fd_info_new()
648 i->unusable = 0; in fd_info_new()
649 pa_cvolume_reset(&i->sink_volume, 2); in fd_info_new()
650 pa_cvolume_reset(&i->source_volume, 2); in fd_info_new()
651 i->volume_modify_count = 0; in fd_info_new()
652 i->sink_index = (uint32_t) -1; in fd_info_new()
653 i->source_index = (uint32_t) -1; in fd_info_new()
654 i->optr_n_blocks = 0; in fd_info_new()
661 debug(DEBUG_LEVEL_NORMAL, __FILE__": socket() failed: %s\n", strerror(errno)); in fd_info_new()
665 i->app_fd = sfds[0]; in fd_info_new()
666 i->thread_fd = sfds[1]; in fd_info_new()
668 if (!(i->mainloop = pa_threaded_mainloop_new())) { in fd_info_new()
670 debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_threaded_mainloop_new() failed\n"); in fd_info_new()
674 …if (!(i->context = pa_context_new(pa_threaded_mainloop_get_api(i->mainloop), client_name(name, siz… in fd_info_new()
676 debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_context_new() failed\n"); in fd_info_new()
680 pa_context_set_state_callback(i->context, context_state_cb, i); in fd_info_new()
682 if (pa_context_connect(i->context, NULL, 0, NULL) < 0) { in fd_info_new()
684debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_context_connect() failed: %s\n", pa_strerror(pa_context_er… in fd_info_new()
688 pa_threaded_mainloop_lock(i->mainloop); in fd_info_new()
690 if (pa_threaded_mainloop_start(i->mainloop) < 0) { in fd_info_new()
692 debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_threaded_mainloop_start() failed\n"); in fd_info_new()
697 pa_threaded_mainloop_wait(i->mainloop); in fd_info_new()
699 if (pa_context_get_state(i->context) != PA_CONTEXT_READY) { in fd_info_new()
701debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_context_connect() failed: %s\n", pa_strerror(pa_context_er… in fd_info_new()
705 pa_threaded_mainloop_unlock(i->mainloop); in fd_info_new()
710 pa_threaded_mainloop_unlock(i->mainloop); in fd_info_new()
745 for (i = fd_infos; i; i = i->next) in fd_info_find()
746 if (i->app_fd == fd && !i->unusable) { in fd_info_find()
760 fs = pa_frame_size(&i->sample_spec); in fix_metrics()
763 if ((i->fragment_size % fs) == 0 && in fix_metrics()
764 i->n_fragments >= 2 && in fix_metrics()
765 i->fragment_size > 0) in fix_metrics()
768 i->fragment_size = (i->fragment_size/fs)*fs; in fix_metrics()
771 if (i->n_fragments < 2) { in fix_metrics()
772 if (i->fragment_size > 0) { in fix_metrics()
773 … i->n_fragments = (unsigned) (pa_bytes_per_second(&i->sample_spec) / 2 / i->fragment_size); in fix_metrics()
774 if (i->n_fragments < 2) in fix_metrics()
775 i->n_fragments = 2; in fix_metrics()
777 i->n_fragments = 12; in fix_metrics()
781 if (i->fragment_size <= 0) { in fix_metrics()
782 i->fragment_size = pa_bytes_per_second(&i->sample_spec) / 2 / i->n_fragments; in fix_metrics()
783 if (i->fragment_size < 1024) in fix_metrics()
784 i->fragment_size = 1024; in fix_metrics()
787debug(DEBUG_LEVEL_NORMAL, __FILE__": sample spec: %s\n", pa_sample_spec_snprint(t, sizeof(t), &i->… in fix_metrics()
788debug(DEBUG_LEVEL_NORMAL, __FILE__": fixated metrics to %i fragments, %li bytes each.\n", i->n_fra… in fix_metrics()
795 if (i->io_event) { in stream_request_cb()
799 api = pa_threaded_mainloop_get_api(i->mainloop); in stream_request_cb()
801 if (s == i->play_stream) { in stream_request_cb()
802 n = pa_stream_writable_size(i->play_stream); in stream_request_cb()
803 if (n == (size_t)-1) { in stream_request_cb()
804 debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_writable_size(): %s\n", in stream_request_cb()
805 pa_strerror(pa_context_errno(i->context))); in stream_request_cb()
808 if (n >= i->fragment_size) in stream_request_cb()
809 i->io_flags |= PA_IO_EVENT_INPUT; in stream_request_cb()
811 i->io_flags &= ~PA_IO_EVENT_INPUT; in stream_request_cb()
814 if (s == i->rec_stream) { in stream_request_cb()
815 n = pa_stream_readable_size(i->rec_stream); in stream_request_cb()
816 if (n == (size_t)-1) { in stream_request_cb()
817 debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_readable_size(): %s\n", in stream_request_cb()
818 pa_strerror(pa_context_errno(i->context))); in stream_request_cb()
821 if (n >= i->fragment_size) in stream_request_cb()
822 i->io_flags |= PA_IO_EVENT_OUTPUT; in stream_request_cb()
824 i->io_flags &= ~PA_IO_EVENT_OUTPUT; in stream_request_cb()
827 api->io_enable(i->io_event, i->io_flags); in stream_request_cb()
835 pa_threaded_mainloop_signal(i->mainloop, 0); in stream_latency_update_cb()
841 if (i->io_event) { in fd_info_shutdown()
843 api = pa_threaded_mainloop_get_api(i->mainloop); in fd_info_shutdown()
844 api->io_free(i->io_event); in fd_info_shutdown()
845 i->io_event = NULL; in fd_info_shutdown()
846 i->io_flags = 0; in fd_info_shutdown()
849 if (i->thread_fd >= 0) { in fd_info_shutdown()
850 close(i->thread_fd); in fd_info_shutdown()
851 i->thread_fd = -1; in fd_info_shutdown()
858 if (!i->play_stream && !i->rec_stream) in fd_info_copy_data()
859 return -1; in fd_info_copy_data()
861 if ((i->play_stream) && (pa_stream_get_state(i->play_stream) == PA_STREAM_READY)) { in fd_info_copy_data()
862 n = pa_stream_writable_size(i->play_stream); in fd_info_copy_data()
864 if (n == (size_t)-1) { in fd_info_copy_data()
865 debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_writable_size(): %s\n", in fd_info_copy_data()
866 pa_strerror(pa_context_errno(i->context))); in fd_info_copy_data()
867 return -1; in fd_info_copy_data()
870 while (n >= i->fragment_size || force) { in fd_info_copy_data()
874 if (!i->buf) { in fd_info_copy_data()
875 if (!(i->buf = malloc(i->fragment_size))) { in fd_info_copy_data()
876 debug(DEBUG_LEVEL_NORMAL, __FILE__": malloc() failed.\n"); in fd_info_copy_data()
877 return -1; in fd_info_copy_data()
880 i->leftover = 0; in fd_info_copy_data()
883 …if ((r = read(i->thread_fd, ((uint8_t *) i->buf) + i->leftover, i->fragment_size - i->leftover)) <… in fd_info_copy_data()
888debug(DEBUG_LEVEL_NORMAL, __FILE__": read(): %s\n", r == 0 ? "EOF" : strerror(errno)); in fd_info_copy_data()
889 return -1; in fd_info_copy_data()
892 to_write = pa_frame_align(r + i->leftover, &i->sample_spec); in fd_info_copy_data()
894 … if (pa_stream_write(i->play_stream, i->buf, to_write, NULL, 0LL, PA_SEEK_RELATIVE) < 0) { in fd_info_copy_data()
895debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_write(): %s\n", pa_strerror(pa_context_errno(i->con… in fd_info_copy_data()
896 return -1; in fd_info_copy_data()
899 i->leftover += r - to_write; in fd_info_copy_data()
900 if (i->leftover) in fd_info_copy_data()
901 memmove(i->buf, ((uint8_t *) i->buf) + to_write, i->leftover); in fd_info_copy_data()
904 n -= (size_t) to_write; in fd_info_copy_data()
907 if (n >= i->fragment_size) in fd_info_copy_data()
908 i->io_flags |= PA_IO_EVENT_INPUT; in fd_info_copy_data()
910 i->io_flags &= ~PA_IO_EVENT_INPUT; in fd_info_copy_data()
913 if ((i->rec_stream) && (pa_stream_get_state(i->rec_stream) == PA_STREAM_READY)) { in fd_info_copy_data()
914 n = pa_stream_readable_size(i->rec_stream); in fd_info_copy_data()
916 if (n == (size_t)-1) { in fd_info_copy_data()
917 debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_readable_size(): %s\n", in fd_info_copy_data()
918 pa_strerror(pa_context_errno(i->context))); in fd_info_copy_data()
919 return -1; in fd_info_copy_data()
922 while (n >= i->fragment_size || force) { in fd_info_copy_data()
928 if (pa_stream_peek(i->rec_stream, &data, &len) < 0) { in fd_info_copy_data()
929debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_peek(): %s\n", pa_strerror(pa_context_errno(i->cont… in fd_info_copy_data()
930 return -1; in fd_info_copy_data()
939 if (pa_stream_drop(i->rec_stream) < 0) { in fd_info_copy_data()
940debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_drop(): %s\n", pa_strerror(pa_context_errno(i->cont… in fd_info_copy_data()
941 return -1; in fd_info_copy_data()
945 n -= len; in fd_info_copy_data()
949 buf = (const char*)data + i->rec_offset; in fd_info_copy_data()
951 if ((r = write(i->thread_fd, buf, len - i->rec_offset)) <= 0) { in fd_info_copy_data()
956 debug(DEBUG_LEVEL_NORMAL, __FILE__": write(): %s\n", strerror(errno)); in fd_info_copy_data()
957 return -1; in fd_info_copy_data()
960 assert((size_t)r <= len - i->rec_offset); in fd_info_copy_data()
961 i->rec_offset += (size_t) r; in fd_info_copy_data()
963 if (i->rec_offset == len) { in fd_info_copy_data()
964 if (pa_stream_drop(i->rec_stream) < 0) { in fd_info_copy_data()
965debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_drop(): %s\n", pa_strerror(pa_context_errno(i->cont… in fd_info_copy_data()
966 return -1; in fd_info_copy_data()
968 i->rec_offset = 0; in fd_info_copy_data()
972 n -= (size_t) r; in fd_info_copy_data()
975 if (n >= i->fragment_size) in fd_info_copy_data()
976 i->io_flags |= PA_IO_EVENT_OUTPUT; in fd_info_copy_data()
978 i->io_flags &= ~PA_IO_EVENT_OUTPUT; in fd_info_copy_data()
981 if (i->io_event) { in fd_info_copy_data()
984 api = pa_threaded_mainloop_get_api(i->mainloop); in fd_info_copy_data()
985 api->io_enable(i->io_event, i->io_flags); in fd_info_copy_data()
990 pa_threaded_mainloop_signal(i->mainloop, 0); in fd_info_copy_data()
1002 debug(DEBUG_LEVEL_NORMAL, __FILE__": stream established.\n"); in stream_state_cb()
1006 if (s == i->play_stream) { in stream_state_cb()
1007 debug(DEBUG_LEVEL_NORMAL, in stream_state_cb()
1009 pa_strerror(pa_context_errno(i->context))); in stream_state_cb()
1010 pa_stream_unref(i->play_stream); in stream_state_cb()
1011 i->play_stream = NULL; in stream_state_cb()
1012 } else if (s == i->rec_stream) { in stream_state_cb()
1013 debug(DEBUG_LEVEL_NORMAL, in stream_state_cb()
1015 pa_strerror(pa_context_errno(i->context))); in stream_state_cb()
1016 pa_stream_unref(i->rec_stream); in stream_state_cb()
1017 i->rec_stream = NULL; in stream_state_cb()
1037 if (!(i->play_stream = pa_stream_new(i->context, stream_name(), &i->sample_spec, NULL))) { in create_playback_stream()
1038debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_new() failed: %s\n", pa_strerror(pa_context_errno(i in create_playback_stream()
1042 pa_stream_set_state_callback(i->play_stream, stream_state_cb, i); in create_playback_stream()
1043 pa_stream_set_write_callback(i->play_stream, stream_request_cb, i); in create_playback_stream()
1044 pa_stream_set_latency_update_callback(i->play_stream, stream_latency_update_cb, i); in create_playback_stream()
1047 attr.maxlength = (uint32_t) (i->fragment_size * (i->n_fragments+1)); in create_playback_stream()
1048 attr.tlength = (uint32_t) (i->fragment_size * i->n_fragments); in create_playback_stream()
1049 attr.prebuf = (uint32_t) i->fragment_size; in create_playback_stream()
1050 attr.minreq = (uint32_t) i->fragment_size; in create_playback_stream()
1053 if (i->play_precork) { in create_playback_stream()
1055 debug(DEBUG_LEVEL_NORMAL, __FILE__": creating stream corked\n"); in create_playback_stream()
1057 if (pa_stream_connect_playback(i->play_stream, NULL, &attr, flags, NULL, NULL) < 0) { in create_playback_stream()
1058debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_connect_playback() failed: %s\n", pa_strerror(pa_co… in create_playback_stream()
1062 n = (int) i->fragment_size; in create_playback_stream()
1063 setsockopt(i->app_fd, SOL_SOCKET, SO_SNDBUF, &n, sizeof(n)); in create_playback_stream()
1064 n = (int) i->fragment_size; in create_playback_stream()
1065 setsockopt(i->thread_fd, SOL_SOCKET, SO_RCVBUF, &n, sizeof(n)); in create_playback_stream()
1070 return -1; in create_playback_stream()
1081 if (!(i->rec_stream = pa_stream_new(i->context, stream_name(), &i->sample_spec, NULL))) { in create_record_stream()
1082debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_new() failed: %s\n", pa_strerror(pa_context_errno(i in create_record_stream()
1086 pa_stream_set_state_callback(i->rec_stream, stream_state_cb, i); in create_record_stream()
1087 pa_stream_set_read_callback(i->rec_stream, stream_request_cb, i); in create_record_stream()
1088 pa_stream_set_latency_update_callback(i->rec_stream, stream_latency_update_cb, i); in create_record_stream()
1091 attr.maxlength = (uint32_t) (i->fragment_size * (i->n_fragments+1)); in create_record_stream()
1092 attr.fragsize = (uint32_t) i->fragment_size; in create_record_stream()
1095 if (i->rec_precork) { in create_record_stream()
1097 debug(DEBUG_LEVEL_NORMAL, __FILE__": creating stream corked\n"); in create_record_stream()
1099 if (pa_stream_connect_record(i->rec_stream, NULL, &attr, flags) < 0) { in create_record_stream()
1100debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_connect_record() failed: %s\n", pa_strerror(pa_cont… in create_record_stream()
1104 n = (int) i->fragment_size; in create_record_stream()
1105 setsockopt(i->app_fd, SOL_SOCKET, SO_RCVBUF, &n, sizeof(n)); in create_record_stream()
1106 n = (int) i->fragment_size; in create_record_stream()
1107 setsockopt(i->thread_fd, SOL_SOCKET, SO_SNDBUF, &n, sizeof(n)); in create_record_stream()
1112 return -1; in create_record_stream()
1118 if (i->play_stream) { in free_streams()
1119 pa_stream_disconnect(i->play_stream); in free_streams()
1120 pa_stream_unref(i->play_stream); in free_streams()
1121 i->play_stream = NULL; in free_streams()
1122 i->io_flags |= PA_IO_EVENT_INPUT; in free_streams()
1125 if (i->rec_stream) { in free_streams()
1126 pa_stream_disconnect(i->rec_stream); in free_streams()
1127 pa_stream_unref(i->rec_stream); in free_streams()
1128 i->rec_stream = NULL; in free_streams()
1129 i->io_flags |= PA_IO_EVENT_OUTPUT; in free_streams()
1132 if (i->io_event) { in free_streams()
1135 api = pa_threaded_mainloop_get_api(i->mainloop); in free_streams()
1136 api->io_enable(i->io_event, i->io_flags); in free_streams()
1143 pa_threaded_mainloop_signal(i->mainloop, 0); in io_event_cb()
1147 if (!i->play_stream) { in io_event_cb()
1157 if (!i->rec_stream) { in io_event_cb()
1181 debug(DEBUG_LEVEL_NORMAL, __FILE__": dsp_open()\n"); in dsp_open()
1184 return -1; in dsp_open()
1187 if ((f = fcntl(i->app_fd, F_GETFL)) >= 0) in dsp_open()
1188 fcntl(i->app_fd, F_SETFL, f|O_NONBLOCK); in dsp_open()
1190 if ((f = fcntl(i->thread_fd, F_GETFL)) >= 0) in dsp_open()
1191 fcntl(i->thread_fd, F_SETFL, f|O_NONBLOCK); in dsp_open()
1193 fcntl(i->app_fd, F_SETFD, FD_CLOEXEC); in dsp_open()
1194 fcntl(i->thread_fd, F_SETFD, FD_CLOEXEC); in dsp_open()
1196 pa_threaded_mainloop_lock(i->mainloop); in dsp_open()
1197 api = pa_threaded_mainloop_get_api(i->mainloop); in dsp_open()
1201 i->io_flags = PA_IO_EVENT_OUTPUT; in dsp_open()
1202 shutdown(i->thread_fd, SHUT_RD); in dsp_open()
1203 shutdown(i->app_fd, SHUT_WR); in dsp_open()
1206 i->io_flags = PA_IO_EVENT_INPUT; in dsp_open()
1207 shutdown(i->thread_fd, SHUT_WR); in dsp_open()
1208 shutdown(i->app_fd, SHUT_RD); in dsp_open()
1211 i->io_flags = PA_IO_EVENT_INPUT | PA_IO_EVENT_OUTPUT; in dsp_open()
1214 pa_threaded_mainloop_unlock(i->mainloop); in dsp_open()
1217 return -1; in dsp_open()
1220 if (!(i->io_event = api->io_new(api, i->thread_fd, i->io_flags, io_event_cb, i))) in dsp_open()
1223 pa_threaded_mainloop_unlock(i->mainloop); in dsp_open()
1225 debug(DEBUG_LEVEL_NORMAL, __FILE__": dsp_open() succeeded, fd=%i\n", i->app_fd); in dsp_open()
1228 ret = i->app_fd; in dsp_open()
1234 pa_threaded_mainloop_unlock(i->mainloop); in dsp_open()
1241 debug(DEBUG_LEVEL_NORMAL, __FILE__": dsp_open() failed\n"); in dsp_open()
1243 return -1; in dsp_open()
1250 i->operation_success = 0; in sink_info_cb()
1251 pa_threaded_mainloop_signal(i->mainloop, 0); in sink_info_cb()
1258 if (!pa_cvolume_equal(&i->sink_volume, &si->volume)) in sink_info_cb()
1259 i->volume_modify_count++; in sink_info_cb()
1261 i->sink_volume = si->volume; in sink_info_cb()
1262 i->sink_index = si->index; in sink_info_cb()
1264 i->operation_success = 1; in sink_info_cb()
1265 pa_threaded_mainloop_signal(i->mainloop, 0); in sink_info_cb()
1272 i->operation_success = 0; in source_info_cb()
1273 pa_threaded_mainloop_signal(i->mainloop, 0); in source_info_cb()
1280 if (!pa_cvolume_equal(&i->source_volume, &si->volume)) in source_info_cb()
1281 i->volume_modify_count++; in source_info_cb()
1283 i->source_volume = si->volume; in source_info_cb()
1284 i->source_index = si->index; in source_info_cb()
1286 i->operation_success = 1; in source_info_cb()
1287 pa_threaded_mainloop_signal(i->mainloop, 0); in source_info_cb()
1294 if (i->sink_index != idx) in subscribe_cb()
1300 if (!(o = pa_context_get_sink_info_by_index(i->context, i->sink_index, sink_info_cb, i))) { in subscribe_cb()
1301debug(DEBUG_LEVEL_NORMAL, __FILE__": Failed to get sink info: %s", pa_strerror(pa_context_errno(i- in subscribe_cb()
1313 debug(DEBUG_LEVEL_NORMAL, __FILE__": mixer_open()\n"); in mixer_open()
1316 return -1; in mixer_open()
1318 pa_threaded_mainloop_lock(i->mainloop); in mixer_open()
1320 pa_context_set_subscribe_callback(i->context, subscribe_cb, i); in mixer_open()
1322 …if (!(o = pa_context_subscribe(i->context, PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SOURCE… in mixer_open()
1323debug(DEBUG_LEVEL_NORMAL, __FILE__": Failed to subscribe to events: %s", pa_strerror(pa_context_er… in mixer_open()
1328 i->operation_success = 0; in mixer_open()
1330 pa_threaded_mainloop_wait(i->mainloop); in mixer_open()
1337 if (!i->operation_success) { in mixer_open()
1338debug(DEBUG_LEVEL_NORMAL, __FILE__":Failed to subscribe to events: %s", pa_strerror(pa_context_err… in mixer_open()
1345 if (!(o = pa_context_get_sink_info_by_name(i->context, NULL, sink_info_cb, i))) { in mixer_open()
1346debug(DEBUG_LEVEL_NORMAL, __FILE__": Failed to get sink info: %s", pa_strerror(pa_context_errno(i- in mixer_open()
1351 i->operation_success = 0; in mixer_open()
1353 pa_threaded_mainloop_wait(i->mainloop); in mixer_open()
1360 if (!i->operation_success) { in mixer_open()
1361debug(DEBUG_LEVEL_NORMAL, __FILE__": Failed to get sink info: %s", pa_strerror(pa_context_errno(i- in mixer_open()
1368 if (!(o = pa_context_get_source_info_by_name(i->context, NULL, source_info_cb, i))) { in mixer_open()
1369debug(DEBUG_LEVEL_NORMAL, __FILE__": Failed to get source info: %s", pa_strerror(pa_context_errno(… in mixer_open()
1374 i->operation_success = 0; in mixer_open()
1376 pa_threaded_mainloop_wait(i->mainloop); in mixer_open()
1383 if (!i->operation_success) { in mixer_open()
1384debug(DEBUG_LEVEL_NORMAL, __FILE__": Failed to get source info: %s", pa_strerror(pa_context_errno(… in mixer_open()
1389 pa_threaded_mainloop_unlock(i->mainloop); in mixer_open()
1391 debug(DEBUG_LEVEL_NORMAL, __FILE__": mixer_open() succeeded, fd=%i\n", i->app_fd); in mixer_open()
1394 ret = i->app_fd; in mixer_open()
1403 pa_threaded_mainloop_unlock(i->mainloop); in mixer_open()
1410 debug(DEBUG_LEVEL_NORMAL, __FILE__": mixer_open() failed\n"); in mixer_open()
1412 return -1; in mixer_open()
1417 "Sound Driver:3.8.1a-980706 (PulseAudio Virtual OSS)\n" in sndstat_open()
1441 int fd = -1; in sndstat_open()
1444 fn = pa_sprintf_malloc("%s" PA_PATH_SEP "padsp-sndstat-XXXXXX", pa_get_temp_dir()); in sndstat_open()
1446 debug(DEBUG_LEVEL_NORMAL, __FILE__": sndstat_open()\n"); in sndstat_open()
1454 debug(DEBUG_LEVEL_NORMAL, __FILE__": bad access!\n"); in sndstat_open()
1465 debug(DEBUG_LEVEL_NORMAL, __FILE__": mkstemp() failed: %s\n", strerror(errno)); in sndstat_open()
1473 if (write(fd, sndstat, sizeof(sndstat) -1) != sizeof(sndstat)-1) { in sndstat_open()
1475 debug(DEBUG_LEVEL_NORMAL, __FILE__": write() failed: %s\n", strerror(errno)); in sndstat_open()
1481 debug(DEBUG_LEVEL_NORMAL, __FILE__": lseek() failed: %s\n", strerror(errno)); in sndstat_open()
1491 return -1; in sndstat_open()
1494 static int real_open(const char *filename, int flags, mode_t mode) { in real_open() argument
1497 debug(DEBUG_LEVEL_VERBOSE, __FILE__": open(%s)\n", filename?filename:"NULL"); in real_open()
1501 return _open(filename, flags, mode); in real_open()
1513 return _open(filename, flags, mode); in real_open()
1526 mode_t mode = 0; in open() local
1531 mode = (mode_t) va_arg(args, int); in open()
1533 mode = va_arg(args, mode_t); in open()
1537 return real_open(filename, flags, mode); in open()
1550 debug(DEBUG_LEVEL_VERBOSE, __FILE__": __open_2(%s)\n", filename?filename:"NULL"); in __open_2()
1562 int ret = -1; in mixer_ioctl()
1566 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_MIXER_READ_DEVMASK\n"); in mixer_ioctl()
1572 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_MIXER_READ_RECMASK\n"); in mixer_ioctl()
1578 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_MIXER_READ_STEREODEVS\n"); in mixer_ioctl()
1580 pa_threaded_mainloop_lock(i->mainloop); in mixer_ioctl()
1582 if (i->sink_volume.channels > 1) in mixer_ioctl()
1584 if (i->source_volume.channels > 1) in mixer_ioctl()
1586 pa_threaded_mainloop_unlock(i->mainloop); in mixer_ioctl()
1591 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_MIXER_READ_RECSRC\n"); in mixer_ioctl()
1597 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_MIXER_WRITE_RECSRC\n"); in mixer_ioctl()
1601 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_MIXER_READ_CAPS\n"); in mixer_ioctl()
1611 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_MIXER_READ_PCM\n"); in mixer_ioctl()
1613 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_MIXER_READ_IGAIN\n"); in mixer_ioctl()
1615 pa_threaded_mainloop_lock(i->mainloop); in mixer_ioctl()
1618 v = &i->sink_volume; in mixer_ioctl()
1620 v = &i->source_volume; in mixer_ioctl()
1623 ((v->values[0]*100/PA_VOLUME_NORM)) | in mixer_ioctl()
1624 ((v->values[v->channels > 1 ? 1 : 0]*100/PA_VOLUME_NORM) << 8); in mixer_ioctl()
1626 pa_threaded_mainloop_unlock(i->mainloop); in mixer_ioctl()
1636 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_MIXER_WRITE_PCM\n"); in mixer_ioctl()
1638 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_MIXER_WRITE_IGAIN\n"); in mixer_ioctl()
1640 pa_threaded_mainloop_lock(i->mainloop); in mixer_ioctl()
1643 v = i->sink_volume; in mixer_ioctl()
1644 pv = &i->sink_volume; in mixer_ioctl()
1646 v = i->source_volume; in mixer_ioctl()
1647 pv = &i->source_volume; in mixer_ioctl()
1650 pv->values[0] = ((*(int*) argp & 0xFF)*PA_VOLUME_NORM)/100; in mixer_ioctl()
1651 pv->values[1] = ((*(int*) argp >> 8)*PA_VOLUME_NORM)/100; in mixer_ioctl()
1657 … o = pa_context_set_sink_volume_by_index(i->context, i->sink_index, pv, context_success_cb, i); in mixer_ioctl()
1659 … o = pa_context_set_source_volume_by_index(i->context, i->source_index, pv, context_success_cb, i); in mixer_ioctl()
1662debug(DEBUG_LEVEL_NORMAL, __FILE__":Failed set volume: %s", pa_strerror(pa_context_errno(i->contex… in mixer_ioctl()
1665 i->operation_success = 0; in mixer_ioctl()
1669 pa_threaded_mainloop_wait(i->mainloop); in mixer_ioctl()
1673 if (!i->operation_success) in mixer_ioctl()
1674debug(DEBUG_LEVEL_NORMAL, __FILE__": Failed to set volume: %s\n", pa_strerror(pa_context_errno(i->… in mixer_ioctl()
1680 i->volume_modify_count++; in mixer_ioctl()
1683 pa_threaded_mainloop_unlock(i->mainloop); in mixer_ioctl()
1691 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_MIXER_INFO\n"); in mixer_ioctl()
1694 strncpy(mi->id, "PULSEAUDIO", sizeof(mi->id)); in mixer_ioctl()
1695 strncpy(mi->name, "PulseAudio Virtual OSS", sizeof(mi->name)); in mixer_ioctl()
1696 pa_threaded_mainloop_lock(i->mainloop); in mixer_ioctl()
1697 mi->modify_counter = i->volume_modify_count; in mixer_ioctl()
1698 pa_threaded_mainloop_unlock(i->mainloop); in mixer_ioctl()
1703 debug(DEBUG_LEVEL_NORMAL, __FILE__": unknown ioctl 0x%08lx\n", request); in mixer_ioctl()
1720 ss->format = PA_SAMPLE_ULAW; in map_format()
1724 ss->format = PA_SAMPLE_ALAW; in map_format()
1731 ss->format = PA_SAMPLE_U8; in map_format()
1738 ss->format = PA_SAMPLE_S16BE; in map_format()
1745 ss->format = PA_SAMPLE_S16LE; in map_format()
1749 ss->format = PA_SAMPLE_S16NE; in map_format()
1774 debug(DEBUG_LEVEL_NORMAL, __FILE__": SIOCINQ: %s\n", strerror(errno)); in dsp_flush_fd()
1775 return -1; in dsp_flush_fd()
1788 debug(DEBUG_LEVEL_NORMAL, __FILE__": read(): %s\n", strerror(errno)); in dsp_flush_fd()
1789 return -1; in dsp_flush_fd()
1792 l -= r; in dsp_flush_fd()
1805 if ((i->thread_fd < 0) && (i->app_fd < 0)) in dsp_flush_socket()
1806 return -1; in dsp_flush_socket()
1808 if (i->thread_fd >= 0) in dsp_flush_socket()
1809 res = dsp_flush_fd(i->thread_fd); in dsp_flush_socket()
1814 if (i->app_fd >= 0) in dsp_flush_socket()
1815 res = dsp_flush_fd(i->app_fd); in dsp_flush_socket()
1825 int ret = -1; in dsp_empty_socket()
1831 if (i->thread_fd < 0) in dsp_empty_socket()
1834 if (ioctl(i->thread_fd, SIOCINQ, &l) < 0) { in dsp_empty_socket()
1835 debug(DEBUG_LEVEL_NORMAL, __FILE__": SIOCINQ: %s\n", strerror(errno)); in dsp_empty_socket()
1844 pa_threaded_mainloop_wait(i->mainloop); in dsp_empty_socket()
1856 int r = -1; in dsp_drain()
1858 if (!i->mainloop) in dsp_drain()
1861 debug(DEBUG_LEVEL_NORMAL, __FILE__": Draining.\n"); in dsp_drain()
1863 pa_threaded_mainloop_lock(i->mainloop); in dsp_drain()
1868 if (!i->play_stream) in dsp_drain()
1871 debug(DEBUG_LEVEL_NORMAL, __FILE__": Really draining.\n"); in dsp_drain()
1873 if (!(o = pa_stream_drain(i->play_stream, stream_success_cb, i))) { in dsp_drain()
1874debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_drain(): %s\n", pa_strerror(pa_context_errno(i->con… in dsp_drain()
1878 i->operation_success = 0; in dsp_drain()
1882 pa_threaded_mainloop_wait(i->mainloop); in dsp_drain()
1885 if (!i->operation_success) { in dsp_drain()
1886debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_drain() 2: %s\n", pa_strerror(pa_context_errno(i->c… in dsp_drain()
1897 pa_threaded_mainloop_unlock(i->mainloop); in dsp_drain()
1904 int r = -1; in dsp_trigger()
1906 if (!i->play_stream) in dsp_trigger()
1909 pa_threaded_mainloop_lock(i->mainloop); in dsp_trigger()
1914 debug(DEBUG_LEVEL_NORMAL, __FILE__": Triggering.\n"); in dsp_trigger()
1916 if (!(o = pa_stream_trigger(i->play_stream, stream_success_cb, i))) { in dsp_trigger()
1917debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_trigger(): %s\n", pa_strerror(pa_context_errno(i->c… in dsp_trigger()
1921 i->operation_success = 0; in dsp_trigger()
1925 pa_threaded_mainloop_wait(i->mainloop); in dsp_trigger()
1928 if (!i->operation_success) { in dsp_trigger()
1929debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_trigger(): %s\n", pa_strerror(pa_context_errno(i->c… in dsp_trigger()
1940 pa_threaded_mainloop_unlock(i->mainloop); in dsp_trigger()
1947 int r = -1; in dsp_cork()
1949 pa_threaded_mainloop_lock(i->mainloop); in dsp_cork()
1952debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_cork(): %s\n", pa_strerror(pa_context_errno(i->cont… in dsp_cork()
1956 i->operation_success = 0; in dsp_cork()
1958 if (s == i->play_stream) in dsp_cork()
1960 else if (s == i->rec_stream) in dsp_cork()
1963 pa_threaded_mainloop_wait(i->mainloop); in dsp_cork()
1966 if (!i->operation_success) { in dsp_cork()
1967debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_cork(): %s\n", pa_strerror(pa_context_errno(i->cont… in dsp_cork()
1978 pa_threaded_mainloop_unlock(i->mainloop); in dsp_cork()
1984 int ret = -1; in dsp_ioctl()
1986 if (i->thread_fd == -1) { in dsp_ioctl()
1991 debug(DEBUG_LEVEL_NORMAL, __FILE__": got ioctl 0x%08lx in fatal error state\n", request); in dsp_ioctl()
1993 return -1; in dsp_ioctl()
1998 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_SETFMT: %i\n", *(int*) argp); in dsp_ioctl()
2000 pa_threaded_mainloop_lock(i->mainloop); in dsp_ioctl()
2003 *(int*) argp = map_format_back(i->sample_spec.format); in dsp_ioctl()
2005 map_format((int*) argp, &i->sample_spec); in dsp_ioctl()
2009 pa_threaded_mainloop_unlock(i->mainloop); in dsp_ioctl()
2018 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_SPEED: %i\n", *(int*) argp); in dsp_ioctl()
2020 pa_threaded_mainloop_lock(i->mainloop); in dsp_ioctl()
2022 ss = i->sample_spec; in dsp_ioctl()
2026 i->sample_spec = ss; in dsp_ioctl()
2030debug(DEBUG_LEVEL_NORMAL, __FILE__": ss: %s\n", pa_sample_spec_snprint(t, sizeof(t), &i->sample_sp… in dsp_ioctl()
2032 pa_threaded_mainloop_unlock(i->mainloop); in dsp_ioctl()
2043 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_STEREO: %i\n", *(int*) argp); in dsp_ioctl()
2045 pa_threaded_mainloop_lock(i->mainloop); in dsp_ioctl()
2047 i->sample_spec.channels = *(int*) argp ? 2 : 1; in dsp_ioctl()
2050 pa_threaded_mainloop_unlock(i->mainloop); in dsp_ioctl()
2057 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_CHANNELS: %i\n", *(int*) argp); in dsp_ioctl()
2059 pa_threaded_mainloop_lock(i->mainloop); in dsp_ioctl()
2061 ss = i->sample_spec; in dsp_ioctl()
2065 i->sample_spec = ss; in dsp_ioctl()
2069 pa_threaded_mainloop_unlock(i->mainloop); in dsp_ioctl()
2080 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_GETBLKSIZE\n"); in dsp_ioctl()
2082 pa_threaded_mainloop_lock(i->mainloop); in dsp_ioctl()
2085 *(int*) argp = i->fragment_size; in dsp_ioctl()
2087 pa_threaded_mainloop_unlock(i->mainloop); in dsp_ioctl()
2092 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_SETFRAGMENT: 0x%08x\n", *(int*) argp); in dsp_ioctl()
2094 pa_threaded_mainloop_lock(i->mainloop); in dsp_ioctl()
2096 i->fragment_size = 1 << ((*(int*) argp) & 31); in dsp_ioctl()
2097 i->n_fragments = (*(int*) argp) >> 16; in dsp_ioctl()
2100 if (i->n_fragments == 0x7FFF) in dsp_ioctl()
2101 i->n_fragments = 12; in dsp_ioctl()
2105 pa_threaded_mainloop_unlock(i->mainloop); in dsp_ioctl()
2110 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_CAPS\n"); in dsp_ioctl()
2122 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_GETODELAY\n"); in dsp_ioctl()
2124 pa_threaded_mainloop_lock(i->mainloop); in dsp_ioctl()
2133 if (pa_stream_get_latency(i->play_stream, &usec, NULL) >= 0) { in dsp_ioctl()
2134 *(int*) argp = pa_usec_to_bytes(usec, &i->sample_spec); in dsp_ioctl()
2138 if (pa_context_errno(i->context) != PA_ERR_NODATA) { in dsp_ioctl()
2139debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_get_latency(): %s\n", pa_strerror(pa_context_errno(… in dsp_ioctl()
2143 pa_threaded_mainloop_wait(i->mainloop); in dsp_ioctl()
2149 if (ioctl(i->thread_fd, SIOCINQ, &l) < 0) in dsp_ioctl()
2150 debug(DEBUG_LEVEL_NORMAL, __FILE__": SIOCINQ failed: %s\n", strerror(errno)); in dsp_ioctl()
2157 pa_threaded_mainloop_unlock(i->mainloop); in dsp_ioctl()
2159 debug(DEBUG_LEVEL_NORMAL, __FILE__": ODELAY: %i\n", *(int*) argp); in dsp_ioctl()
2165 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_RESET\n"); in dsp_ioctl()
2167 pa_threaded_mainloop_lock(i->mainloop); in dsp_ioctl()
2172 i->optr_n_blocks = 0; in dsp_ioctl()
2174 pa_threaded_mainloop_unlock(i->mainloop); in dsp_ioctl()
2179 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_GETFMTS\n"); in dsp_ioctl()
2186 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_POST\n"); in dsp_ioctl()
2193 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_GETTRIGGER\n"); in dsp_ioctl()
2196 if (!i->play_precork) in dsp_ioctl()
2198 if (!i->rec_precork) in dsp_ioctl()
2204 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_SETTRIGGER: 0x%08x\n", *(int*) argp); in dsp_ioctl()
2206 if (!i->io_event) { in dsp_ioctl()
2211 i->play_precork = !((*(int*) argp) & PCM_ENABLE_OUTPUT); in dsp_ioctl()
2213 if (i->play_stream) { in dsp_ioctl()
2214 if (dsp_cork(i, i->play_stream, !((*(int*) argp) & PCM_ENABLE_OUTPUT)) < 0) in dsp_ioctl()
2220 i->rec_precork = !((*(int*) argp) & PCM_ENABLE_INPUT); in dsp_ioctl()
2222 if (i->rec_stream) { in dsp_ioctl()
2223 if (dsp_cork(i, i->rec_stream, !((*(int*) argp) & PCM_ENABLE_INPUT)) < 0) in dsp_ioctl()
2230 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_SYNC\n"); in dsp_ioctl()
2244 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_GETOSPACE\n"); in dsp_ioctl()
2246 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_GETISPACE\n"); in dsp_ioctl()
2248 pa_threaded_mainloop_lock(i->mainloop); in dsp_ioctl()
2253 if (i->play_stream) { in dsp_ioctl()
2254 if ((k = pa_stream_writable_size(i->play_stream)) == (size_t) -1) in dsp_ioctl()
2255debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_writable_size(): %s\n", pa_strerror(pa_context_errn… in dsp_ioctl()
2257 k = i->fragment_size * i->n_fragments; in dsp_ioctl()
2260 if (ioctl(i->thread_fd, SIOCINQ, &l) < 0) { in dsp_ioctl()
2261 debug(DEBUG_LEVEL_NORMAL, __FILE__": SIOCINQ failed: %s\n", strerror(errno)); in dsp_ioctl()
2268 bi->bytes = k > (size_t) l ? k - l : 0; in dsp_ioctl()
2270 if (i->rec_stream) { in dsp_ioctl()
2271 if ((k = pa_stream_readable_size(i->rec_stream)) == (size_t) -1) in dsp_ioctl()
2272debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_readable_size(): %s\n", pa_strerror(pa_context_errn… in dsp_ioctl()
2277 if (ioctl(i->app_fd, SIOCINQ, &l) < 0) { in dsp_ioctl()
2278 debug(DEBUG_LEVEL_NORMAL, __FILE__": SIOCINQ failed: %s\n", strerror(errno)); in dsp_ioctl()
2284 bi->bytes = k + l; in dsp_ioctl()
2287 bi->fragsize = i->fragment_size; in dsp_ioctl()
2288 bi->fragstotal = i->n_fragments; in dsp_ioctl()
2289 bi->fragments = bi->bytes / bi->fragsize; in dsp_ioctl()
2291 pa_threaded_mainloop_unlock(i->mainloop); in dsp_ioctl()
2293debug(DEBUG_LEVEL_NORMAL, __FILE__": fragsize=%i, fragstotal=%i, bytes=%i, fragments=%i\n", bi->fr… in dsp_ioctl()
2300 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_PCM_READ_RATE\n"); in dsp_ioctl()
2302 pa_threaded_mainloop_lock(i->mainloop); in dsp_ioctl()
2303 *(int*) argp = i->sample_spec.rate; in dsp_ioctl()
2304 pa_threaded_mainloop_unlock(i->mainloop); in dsp_ioctl()
2310 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_PCM_READ_CHANNELS\n"); in dsp_ioctl()
2312 pa_threaded_mainloop_lock(i->mainloop); in dsp_ioctl()
2313 *(int*) argp = i->sample_spec.channels; in dsp_ioctl()
2314 pa_threaded_mainloop_unlock(i->mainloop); in dsp_ioctl()
2320 debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_PCM_READ_BITS\n"); in dsp_ioctl()
2322 pa_threaded_mainloop_lock(i->mainloop); in dsp_ioctl()
2323 *(int*) argp = pa_sample_size(&i->sample_spec)*8; in dsp_ioctl()
2324 pa_threaded_mainloop_unlock(i->mainloop); in dsp_ioctl()
2331 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_GETOPTR\n"); in dsp_ioctl()
2336 pa_threaded_mainloop_lock(i->mainloop); in dsp_ioctl()
2343 if (pa_stream_get_time(i->play_stream, &usec) >= 0) { in dsp_ioctl()
2344 size_t k = pa_usec_to_bytes(usec, &i->sample_spec); in dsp_ioctl()
2347 info->bytes = (int) k; in dsp_ioctl()
2348 m = k / i->fragment_size; in dsp_ioctl()
2349 info->blocks = m - i->optr_n_blocks; in dsp_ioctl()
2350 i->optr_n_blocks = m; in dsp_ioctl()
2355 if (pa_context_errno(i->context) != PA_ERR_NODATA) { in dsp_ioctl()
2356debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_get_latency(): %s\n", pa_strerror(pa_context_errno(… in dsp_ioctl()
2360 pa_threaded_mainloop_wait(i->mainloop); in dsp_ioctl()
2365 pa_threaded_mainloop_unlock(i->mainloop); in dsp_ioctl()
2367debug(DEBUG_LEVEL_NORMAL, __FILE__": GETOPTR bytes=%i, blocks=%i, ptr=%i\n", info->bytes, info->bl… in dsp_ioctl()
2373 debug(DEBUG_LEVEL_NORMAL, __FILE__": invalid ioctl SNDCTL_DSP_GETIPTR\n"); in dsp_ioctl()
2377 debug(DEBUG_LEVEL_NORMAL, __FILE__": SNDCTL_DSP_SETDUPLEX\n"); in dsp_ioctl()
2378 /* this is a no-op */ in dsp_ioctl()
2407 debug(DEBUG_LEVEL_VERBOSE, __FILE__": ioctl()\n");
2424 if (i->type == FD_INFO_MIXER)
2442 debug(DEBUG_LEVEL_VERBOSE, __FILE__": close()\n");
2463 int access(const char *pathname, int mode) { argument
2465 debug(DEBUG_LEVEL_VERBOSE, __FILE__": access(%s)\n", pathname?pathname:"NULL");
2470 return _access(pathname, mode);
2473 if (mode & X_OK) {
2474 debug(DEBUG_LEVEL_NORMAL, __FILE__": access(%s, %x) = EACCESS\n", pathname, mode);
2476 return -1;
2479 debug(DEBUG_LEVEL_NORMAL, __FILE__": access(%s, %x) = OK\n", pathname, mode);
2495 debug(DEBUG_LEVEL_VERBOSE, __FILE__": stat(%s)\n", pathname?pathname:"NULL");
2500 debug(DEBUG_LEVEL_NORMAL, __FILE__": stat(%s)\n", pathname);
2517 debug(DEBUG_LEVEL_NORMAL, __FILE__": unable to stat \"/dev\"\n");
2518 return -1;
2521 buf->st_dev = parent.st_dev;
2522 buf->st_ino = 0xDEADBEEF; /* FIXME: Can we do this in a safe way? */
2523 buf->st_mode = S_IFCHR | S_IRUSR | S_IWUSR;
2524 buf->st_nlink = 1;
2525 buf->st_uid = getuid();
2526 buf->st_gid = getgid();
2527 buf->st_rdev = 0x0E03; /* FIXME: Linux specific */
2528 buf->st_size = 0;
2529 buf->st_atime = 1181557705;
2530 buf->st_mtime = 1181557705;
2531 buf->st_ctime = 1181557705;
2532 buf->st_blksize = 1;
2533 buf->st_blocks = 0;
2547 debug(DEBUG_LEVEL_VERBOSE, __FILE__": stat64(%s)\n", pathname?pathname:"NULL");
2560 buf->st_dev = oldbuf.st_dev;
2561 buf->st_ino = oldbuf.st_ino;
2562 buf->st_mode = oldbuf.st_mode;
2563 buf->st_nlink = oldbuf.st_nlink;
2564 buf->st_uid = oldbuf.st_uid;
2565 buf->st_gid = oldbuf.st_gid;
2566 buf->st_rdev = oldbuf.st_rdev;
2567 buf->st_size = oldbuf.st_size;
2568 buf->st_atime = oldbuf.st_atime;
2569 buf->st_mtime = oldbuf.st_mtime;
2570 buf->st_ctime = oldbuf.st_ctime;
2571 buf->st_blksize = oldbuf.st_blksize;
2572 buf->st_blocks = oldbuf.st_blocks;
2579 mode_t mode = 0; local
2581 debug(DEBUG_LEVEL_VERBOSE, __FILE__": open64(%s)\n", filename?filename:"NULL");
2586 mode = va_arg(args, int);
2588 mode = va_arg(args, mode_t);
2595 return _open64(filename, flags, mode);
2598 return real_open(filename, flags, mode);
2602 debug(DEBUG_LEVEL_VERBOSE, __FILE__": __open64_2(%s)\n", filename?filename:"NULL");
2619 debug(DEBUG_LEVEL_VERBOSE, __FILE__": __xstat(%s)\n", pathname?pathname:"NULL");
2630 return -1;
2639 debug(DEBUG_LEVEL_VERBOSE, __FILE__": __xstat64(%s)\n", pathname?pathname:"NULL");
2650 return -1;
2660 FILE* fopen(const char *filename, const char *mode) { argument
2665 debug(DEBUG_LEVEL_VERBOSE, __FILE__": fopen(%s)\n", filename?filename:"NULL");
2668 !mode ||
2671 return _fopen(filename, mode);
2674 switch (mode[0]) {
2687 if ((((mode[1] == 'b') || (mode[1] == 't')) && (mode[2] == '+')) || (mode[1] == '+'))
2693 if (!(f = fdopen(fd, mode))) {
2703 FILE *fopen64(const char *__restrict filename, const char *__restrict mode) { argument
2705 debug(DEBUG_LEVEL_VERBOSE, __FILE__": fopen64(%s)\n", filename?filename:"NULL");
2708 !mode ||
2711 return _fopen64(filename, mode);
2714 return fopen(filename, mode);
2722 debug(DEBUG_LEVEL_VERBOSE, __FILE__": fclose()\n");
2739 i->app_fd = -1;