Browse Source

port the dbus reservation code back to jack

git-svn-id: svn+ssh://jackaudio.org/trunk/jack@4472 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.121.2
torben 14 years ago
parent
commit
3cc3f1734a
3 changed files with 53 additions and 5 deletions
  1. +24
    -2
      python/jackctl.py
  2. +24
    -3
      python/jackd.py
  3. +5
    -0
      python/reserve_audio.py

+ 24
- 2
python/jackctl.py View File

@@ -54,6 +54,8 @@ class JSIter:

return cast( retval, self.typ )

DeviceAcquireFunc = CFUNCTYPE( c_int, c_char_p )
DeviceReleaseFunc = CFUNCTYPE( None, c_char_p )

jackctl_server_start = libjs.jackctl_server_start
jackctl_server_start.argtypes = [ POINTER(jackctl_server_t), POINTER(jackctl_driver_t) ]
@@ -64,7 +66,7 @@ jackctl_server_stop.argtypes = [ POINTER(jackctl_server_t) ]
jackctl_server_stop.restype = c_bool

jackctl_server_create = libjs.jackctl_server_create
jackctl_server_create.argtypes = [ POINTER(jackctl_server_t), POINTER(jackctl_driver_t) ]
jackctl_server_create.argtypes = [ DeviceAcquireFunc, DeviceReleaseFunc ]
jackctl_server_create.restype = POINTER(jackctl_server_t)

jackctl_server_get_drivers_list = libjs.jackctl_server_get_drivers_list
@@ -191,9 +193,15 @@ class Driver(object):

name = property( get_name )


class Server(object):
def __init__( self ):
self.srv_ptr = jackctl_server_create( None, None )
self.dacqd = DeviceAcquireFunc(self.acquire_card)
self.reled = DeviceReleaseFunc(self.release_card)
self.srv_ptr = jackctl_server_create( self.dacqd, self.reled )

self.acquire_card_cb = None
self.release_card_cb = None

driver_jslist = jackctl_server_get_drivers_list( self.srv_ptr )

@@ -218,3 +226,17 @@ class Server(object):

def stop( self ):
return jackctl_server_stop( self.srv_ptr )


def acquire_card( self, cardname ):
if self.acquire_card_cb:
return self.acquire_card_cb(cardname)
else:
return True

def release_card( self, cardname ):
if self.release_card_cb:
self.release_card_cb(cardname)




+ 24
- 3
python/jackd.py View File

@@ -1,10 +1,12 @@
#!/usr/bin/env python

import sys
from mygetopt import my_getopt
import jackctl
from pyjackd.mygetopt import my_getopt
from pyjackd import jackctl
import readline
import time

import reserve_audio

argv = sys.argv[1:]

@@ -75,8 +77,18 @@ def driver_parse_args( drv, argv ):
else:
p.value = optarg

def acquire_dev(cardname):
reserve_audio.reserve_dev(cardname,20,None)
time.sleep(0.1)
return True

def release_dev(cardname):
reserve_audio.rr.unreserve()
reserve_audio.rr = None

srv = jackctl.Server()
srv.acquire_card_cb = acquire_dev
srv.release_card_cb = release_dev

drv, argv = server_parse_ags( srv, argv )
driver_parse_args( drv, argv )
@@ -90,7 +102,16 @@ driver_parse_args( drv, argv )
#for p in drv.params.values():
# print p.name, "-> ", p.value

srv.start( drv )
started = srv.start( drv )

if not started:
print "failed to start with driver " + drv.name
print "trying to start with dummy driver, switch to the right master yourself"

started = srv.start( srv.drivers["dummy"] )

if not started:
sys.exit(20)

quit = False
while not quit:


+ 5
- 0
python/reserve_audio.py View File

@@ -31,6 +31,10 @@ class reservation_t( dbus.service.Object ):
return False


def unreserve (self):
self.connection.release_name( 'org.freedesktop.ReserveDevice1.' + self.dev_name )
rr.remove_from_connection()


def reserve_dev( dev_name, prio, override_cb ):
global rr
@@ -43,6 +47,7 @@ def reserve_dev( dev_name, prio, override_cb ):
r_proxy = session_bus.get_object( "org.freedesktop.ReserveDevice1." + dev_name, "/org/freedesktop/ReserveDevice1/" + dev_name )
r_iface = dbus.Interface( r_proxy, "org.freedesktop.ReserveDevice1" )
except Exception:
print "no other reservation exists. taking the name"
rr = reservation_t( dev_name, prio, override_cb )
return



Loading…
Cancel
Save