| Commit message (Collapse) | Author | Age | Files | Lines | 
| ...  |  | 
| | |  | 
 | 
| | | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| |  | 
Unless explicitly specified, target a card based on the selected device.
Note that not all devices will be tied to a card.
falconindy  » put differently, if i have multiple cards, what determines which
              card is used by pulse for a given app?
tanuk       » In theory, the logic can be anything (it depends on what
              policy-implementing modules are loaded). By default, routing is mostly
              handled by module-stream-restore, which chooses the sink based on the
              user's previous routing choices.
tanuk       » If the user hasn't done any routing choices, the fallback logic is to
              select the current "default sink".
tanuk       » I don't recommend trying to guess the routing policy.
falconindy  » i guess my understanding of pulse internals is lacking
falconindy  » but that's rather enlightening
falconindy  » is there any way to figure out the connection between a sink and a card?
tanuk       » Yes... (One moment, I'll look up things.)
falconindy  » ah. uint32_t card
falconindy  » appears to be in pa_sink_info
falconindy  » so that ties the sink to the index of a card?
tanuk       » Yep.
falconindy  » awesome, that's good enough for what i need to do
tanuk       » Not all sinks are part of a card, though, but those that are will have
              the card index set.
falconindy  » also good to know
 | 
| | | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| |  | 
A few changes make this fun and easy:
- Merge the function array into the string to action lookup and return a
  Command instead of simply an enum. A Command is the function and the
  min/max arg count.
- Implement an InRange method for the Range class.
- Add a Dispatch function to convert the string to Command and validate
  the arguments.
This leaves us in a position where the argc parameter to each method is
never used, but maybe some day a command will be added that takes a
range of args rather than a fixed number.
 | 
| | |  | 
 | 
| | |  | 
 | 
| | |  | 
 | 
| | |  | 
 | 
| | | 
| | 
| | 
| | 
| | 
| | 
| |  | 
A sources-output can only be moved to a new source, and a sink-input can
only be moved to a new sink. So, derive the target type based on this.
Also, reroute sink -> sink-input and source -> source-output to save
some keystrokes.
 | 
| | |  | 
 | 
| | |  | 
 | 
| | |  | 
 | 
| |    | 
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| | 
| 
| 
| 
| 
|  | 
This never could have worked except on exact matches. The arguments to
strstr were reversed, and barring that, interesting results were
filtered OUT.
 | 
| |  | 
 | 
| | 
| 
| 
| 
|  | 
Pulseaudio likes to give long and verbose names to devices and doesn't
let you specify applications by name.
 | 
| | 
| 
| 
| 
|  | 
Input/output make more sense for applications, where the pulseaudio
sink/source may feel backwards
 | 
| | 
| 
| 
| 
|  | 
Its kinda counter intuitive to label application outputs as sinks and
inputs as sources.
 | 
| |  | 
 | 
| |\  
| | 
| | 
| | 
| |  | 
* johnf/master:
  clarify -o and -i usage
 | 
| | |  | 
 | 
| | |  | 
 | 
| |/   | 
 | 
| |  | 
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
Collect all state into struct runtime_t, all arguments into struct
arg_t.
This simplifies argument passing so we can split device loading
into a helper function and restructure main into something much cleaner.
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Build a proper doubly linked list of devices so that they don't get
listed in backwards order.
Also compute default sink and source names in pulse_init.
 | 
| |  | 
 | 
| | 
| 
| 
| 
|  | 
Have the various sink and source getters return a list of items rather
than stuffing the results in pulseaudio_t.
 | 
| |\  
| | 
| |  | 
Bugfixes
 | 
| | | 
| | 
| | 
| | 
| |  | 
Due to the CLAMP, if you set the volume above 100 and invoke increase,
it'll drop back down to 100. It probably shouldn't do this.
 | 
| | |  | 
 | 
| |/   | 
 | 
| |  | 
 | 
| |  | 
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
.,,.
         ,;;*;;;;,
        .-'``;-');;.
       /'  .-.  /*;;
     .'    \d    \;;               .;;;,
    / o      `    \;    ,__.     ,;*;;;*;,
    \__, _.__,'   \_.-') __)--.;;;;;*;;;;,
     `""`;;;\       /-')_) __)  `\' ';;;;;;
        ;*;;;        -') `)_)  |\ |  ;;;;*;
        ;;;;|        `---`    O | | ;;*;;;
        *;*;\|                 O  / ;;;;;*
       ;;;;;/|    .-------\      / ;*;;;;;
      ;;;*;/ \    |        '.   (`. ;;;*;;;
      ;;;;;'. ;   |          )   \ | ;;;;;;
      ,;*;;;;\/   |.        /   /` | ';;;*;
       ;;;;;;/    |/       /   /__/   ';;;
       '*jgs/     |       /    |      ;*;
            `""""`        `""""`     ;'
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| | 
| 
| 
| 
|  | 
this isn't needed outside of the conneciton logic, so there's no point
in making room for it on the heap for the whole process.
 | 
| |  | 
 | 
| | 
| 
| 
|  | 
This test rig sucks.
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| | 
| 
| 
|  | 
alphabetize the optstring and longopt array while we're at it.
 |