Add optional one way playback (bug #3397)
authorMark Spencer <markster@digium.com>
Fri, 21 Jan 2005 21:27:17 +0000 (21:27 +0000)
committerMark Spencer <markster@digium.com>
Fri, 21 Jan 2005 21:27:17 +0000 (21:27 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4871 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_oss.c
configs/oss.conf.sample

index 4e4b4aa..0219e36 100755 (executable)
@@ -70,6 +70,7 @@ static struct timeval lasttime;
 static int usecnt;
 static int silencesuppression = 0;
 static int silencethreshold = 1000;
+static int playbackonly = 0;
 
 
 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
@@ -565,9 +566,11 @@ static int oss_write(struct ast_channel *chan, struct ast_frame *f)
                return 0;
        /* Stop any currently playing sound */
        cursound = -1;
-       if (!full_duplex) {
+       if (!full_duplex && !playbackonly) {
                /* If we're half duplex, we have to switch to read mode
-                  to honor immediate needs if necessary */
+                  to honor immediate needs if necessary.  But if we are in play
+                  back only mode, then we don't switch because the console
+                  is only being used one way -- just to playback something. */
                res = soundcard_setinput(1);
                if (res < 0) {
                        ast_log(LOG_WARNING, "Unable to set device to input mode\n");
@@ -1038,6 +1041,8 @@ int load_module()
                                strncpy(language, v->value, sizeof(language)-1);
                        else if (!strcasecmp(v->name, "extension"))
                                strncpy(exten, v->value, sizeof(exten)-1);
+                       else if (!strcasecmp(v->name, "playbackonly"))
+                               playbackonly = ast_true(v->value);
                        v=v->next;
                }
                ast_destroy(cfg);
index 25c89ab..9d605ce 100755 (executable)
@@ -25,3 +25,10 @@ extension=s
 ; but your mileage may vary.  Use the echo test to evaluate the best setting.
 ;silencesuppression = yes
 ;silencethreshold = 1000
+;
+; On half-duplex cards, the driver attempts to switch back and forth between
+; read and write modes.  Unfortunately, this fails sometimes on older hardware.
+; To prevent the driver from switching (ie. only play files on your speakers),
+; then set the playbackonly option to yes.  Default is no.  Note this option has
+; no effect on full-duplex cards.
+;playbackonly=no