diff stream/tvi_vbi.c @ 24301:15d547dfa66b

Make sure that no pages will left in cache during channel switch (immediately stop decoding of vbi buffer when clear_cache is called).
author voroshil
date Sat, 01 Sep 2007 18:49:51 +0000
parents 1980e76f4482
children 414b72437fe3
line wrap: on
line diff
--- a/stream/tvi_vbi.c	Sat Sep 01 15:56:19 2007 +0000
+++ b/stream/tvi_vbi.c	Sat Sep 01 18:49:51 2007 +0000
@@ -149,6 +149,7 @@
     unsigned int  juliandate;
     unsigned int  universaltime;
     unsigned char networkname[21];
+    int           cache_reset;
 } priv_vbi_t;
 
 static unsigned char fixParity[256];
@@ -622,6 +623,8 @@
 static void clear_cache(priv_vbi_t* priv){
     int i;
     tt_page* tp;
+    priv->cache_reset=1;
+    
     for(i=0;i<VBI_MAX_PAGES;i++){
         while(priv->ptt_cache[i]){
             tp=priv->ptt_cache[i];
@@ -1447,7 +1450,7 @@
     int d0,d1;
     int i=0;
     mp_msg(MSGT_TV,MSGL_DBG3,"vbi: vbi_decode\n");
-    for(linep=buf; linep<buf+priv->ptsp->bufsize; linep+=priv->ptsp->samples_per_line,i++){
+    for(linep=buf; !priv->cache_reset && linep<buf+priv->ptsp->bufsize; linep+=priv->ptsp->samples_per_line,i++){
 #if 0
         /*
           This routine is alternative implementation of raw VBI data decoding.
@@ -1487,6 +1490,11 @@
             mp_msg(MSGT_TV,MSGL_DBG3,"unsupported packet:%d\n",pkt);
         }
     }
+    if (priv->cache_reset){
+        pthread_mutex_lock(&(priv->buffer_mutex));
+        priv->cache_reset=0;
+        pthread_mutex_unlock(&(priv->buffer_mutex));
+    }
 
 }