Minor RTP video fixes, be more careful about closing fd's in meetme (bug #1743)
authorMark Spencer <markster@digium.com>
Sun, 30 May 2004 20:24:48 +0000 (20:24 +0000)
committerMark Spencer <markster@digium.com>
Sun, 30 May 2004 20:24:48 +0000 (20:24 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3111 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_meetme.c
rtp.c

index dd11efb..f9b16ce 100755 (executable)
@@ -465,7 +465,8 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
        int firstpass = 0;
        int ret = -1;
        int x;
-        int menu_active = 0;
+       int menu_active = 0;
+       int using_pseudo = 0;
 
        struct ast_app *app;
        char *agifile;
@@ -561,6 +562,7 @@ zapretry:
                        ast_log(LOG_WARNING, "Unable to open pseudo channel: %s\n", strerror(errno));
                        goto outrun;
                }
+               using_pseudo = 1;
                /* Make non-blocking */
                flags = fcntl(fd, F_GETFL);
                if (flags < 0) {
@@ -885,7 +887,7 @@ zapretry:
                }
        }
        }
-       if (fd != chan->fds[0])
+       if (using_pseudo)
                close(fd);
        else {
                /* Take out of conference */
diff --git a/rtp.c b/rtp.c
index 5fe648d..c02780f 100755 (executable)
--- a/rtp.c
+++ b/rtp.c
@@ -544,6 +544,8 @@ struct ast_frame *ast_rtp_read(struct ast_rtp *rtp)
                        rtp->lastividtimestamp = timestamp;
                rtp->f.samples = timestamp - rtp->lastividtimestamp;
                rtp->lastividtimestamp = timestamp;
+               rtp->f.delivery.tv_sec = 0;
+               rtp->f.delivery.tv_usec = 0;
                if (mark)
                        rtp->f.subclass |= 0x1;
                
@@ -1043,12 +1045,14 @@ static int ast_rtp_raw_write(struct ast_rtp *rtp, struct ast_frame *f, int codec
                /* Re-calculate last TS */
                rtp->lastts = rtp->lastts + ms * 90;
                /* If it's close to our prediction, go for it */
-               if (abs(rtp->lastts - pred) < 7200) {
-                       rtp->lastts = pred;
-                       rtp->lastovidtimestamp += f->samples;
-               } else {
-                       ast_log(LOG_DEBUG, "Difference is %d, ms is %d\n", abs(rtp->lastts - pred), ms);
-                       rtp->lastovidtimestamp = rtp->lastts;
+               if (!f->delivery.tv_sec && !f->delivery.tv_usec) {
+                       if (abs(rtp->lastts - pred) < 7200) {
+                               rtp->lastts = pred;
+                               rtp->lastovidtimestamp += f->samples;
+                       } else {
+                               ast_log(LOG_DEBUG, "Difference is %d, ms is %d (%d), pred/ts/samples %d/%d/%d\n", abs(rtp->lastts - pred), ms, ms * 90, rtp->lastts, pred, f->samples);
+                               rtp->lastovidtimestamp = rtp->lastts;
+                       }
                }
        }
        /* Get a pointer to the header */