chiark / gitweb /
playrtp junks old sample data in fill_buffer()
[disorder] / clients / playrtp.c
index 0b25c89e695c16d44e31b6580ba7bd15d9220c8e..33623ab3dcb4608e6d25ef8c285c20221a1c45b6 100644 (file)
@@ -294,7 +294,7 @@ static const struct option options[] = {
   { 0, 0, 0, 0 }
 };
 
   { 0, 0, 0, 0 }
 };
 
-/** @Brief Return a new packet */
+/** @brief Return a new packet */
 static struct packet *new_packet(void) {
   struct packet *p;
   
 static struct packet *new_packet(void) {
   struct packet *p;
   
@@ -481,6 +481,8 @@ static inline int contains(const struct packet *p, uint32_t timestamp) {
  * Must be called with @ref lock held.
  */
 static void fill_buffer(void) {
  * Must be called with @ref lock held.
  */
 static void fill_buffer(void) {
+  while(nsamples)
+    drop_first_packet();
   info("Buffering...");
   while(nsamples < readahead)
     pthread_cond_wait(&cond, &lock);
   info("Buffering...");
   while(nsamples < readahead)
     pthread_cond_wait(&cond, &lock);
@@ -920,7 +922,7 @@ int main(int argc, char **argv) {
   len = sizeof rcvbuf;
   if(getsockopt(rtpfd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, &len) < 0)
     fatal(errno, "error calling getsockopt SO_RCVBUF");
   len = sizeof rcvbuf;
   if(getsockopt(rtpfd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, &len) < 0)
     fatal(errno, "error calling getsockopt SO_RCVBUF");
-  if(target_rcvbuf) {
+  if(target_rcvbuf > rcvbuf) {
     if(setsockopt(rtpfd, SOL_SOCKET, SO_RCVBUF,
                   &target_rcvbuf, sizeof target_rcvbuf) < 0)
       error(errno, "error calling setsockopt SO_RCVBUF %d", 
     if(setsockopt(rtpfd, SOL_SOCKET, SO_RCVBUF,
                   &target_rcvbuf, sizeof target_rcvbuf) < 0)
       error(errno, "error calling setsockopt SO_RCVBUF %d",