]> code.delx.au - pulseaudio/commitdiff
pacat: Added support for recording from one specific sink input
authorMagnus Ekhall <magnus.ekhall@gmail.com>
Sun, 11 Aug 2013 19:21:41 +0000 (21:21 +0200)
committerTanu Kaskinen <tanu.kaskinen@linux.intel.com>
Wed, 14 Aug 2013 13:09:54 +0000 (16:09 +0300)
BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=66326
man/pacat.1.xml.in
src/utils/pacat.c

index 868e7722773ed0b869e5dcbba20148ca740ae3e7..1c5a6c0c80c1fa8c3776f73068c7d723c68e2c0d 100644 (file)
@@ -83,6 +83,12 @@ USA.
       <optdesc><p>Specify the symbolic name of the sink/source to play/record this stream on/from.</p></optdesc>
     </option>
 
+    <option>
+      <p><opt>--monitor-stream</opt><arg>=INDEX</arg></p>
+
+      <optdesc><p>Record from the sink input with index INDEX.</p></optdesc>
+    </option>
+
     <option>
       <p><opt>-n | --client-name</opt><arg>=NAME</arg></p>
 
index a712ccf6ee02a0f260780ab1845f7308f9402042..e1abc3178cd473a2ef54d5a039c51c1ddfe50fe3 100644 (file)
@@ -95,6 +95,8 @@ static int32_t latency_msec = 0, process_time_msec = 0;
 static bool raw = true;
 static int file_format = -1;
 
+static uint32_t monitor_stream = PA_INVALID_INDEX;
+
 static uint32_t cork_requests = 0;
 
 /* A shortcut for terminating the application */
@@ -508,12 +510,15 @@ static void context_state_callback(pa_context *c, void *userdata) {
                 }
 
             } else {
+                if (monitor_stream != PA_INVALID_INDEX && (pa_stream_set_monitor_stream(stream, monitor_stream) < 0)) {
+                    pa_log(_("Failed to set monitor stream: %s"), pa_strerror(pa_context_errno(c)));
+                    goto fail;
+                }
                 if (pa_stream_connect_record(stream, device, &buffer_attr, flags) < 0) {
                     pa_log(_("pa_stream_connect_record() failed: %s"), pa_strerror(pa_context_errno(c)));
                     goto fail;
                 }
             }
-
             break;
         }
 
@@ -698,7 +703,8 @@ static void help(const char *argv0) {
              "      --raw                             Record/play raw PCM data.\n"
              "      --passthrough                     passthrough data \n"
              "      --file-format[=FFORMAT]           Record/play formatted PCM data.\n"
-             "      --list-file-formats               List available file formats.\n")
+             "      --list-file-formats               List available file formats.\n"
+             "      --monitor-stream=INDEX            Record from the sink input with index INDEX.\n")
            , argv0);
 }
 
@@ -723,7 +729,8 @@ enum {
     ARG_FILE_FORMAT,
     ARG_LIST_FILE_FORMATS,
     ARG_LATENCY_MSEC,
-    ARG_PROCESS_TIME_MSEC
+    ARG_PROCESS_TIME_MSEC,
+    ARG_MONITOR_STREAM,
 };
 
 int main(int argc, char *argv[]) {
@@ -764,6 +771,7 @@ int main(int argc, char *argv[]) {
         {"list-file-formats", 0, NULL, ARG_LIST_FILE_FORMATS},
         {"latency-msec", 1, NULL, ARG_LATENCY_MSEC},
         {"process-time-msec", 1, NULL, ARG_PROCESS_TIME_MSEC},
+        {"monitor-stream", 1, NULL, ARG_MONITOR_STREAM},
         {NULL,           0, NULL, 0}
     };
 
@@ -978,6 +986,13 @@ int main(int argc, char *argv[]) {
                 ret = 0;
                 goto quit;
 
+            case ARG_MONITOR_STREAM:
+                if (pa_atou(optarg, &monitor_stream) < 0) {
+                    pa_log(_("Failed to parse the argument for --monitor-stream"));
+                    goto quit;
+                }
+                break;
+
             default:
                 goto quit;
         }