[MPlayer-cvslog] r27057 - in trunk: DOCS/man/en/mplayer.1 stream/tv.c stream/tv.h

voroshil subversion at mplayerhq.hu
Sat Jun 14 11:14:16 CEST 2008


Author: voroshil
Date: Sat Jun 14 11:14:16 2008
New Revision: 27057

Log:
Ability for specifying TV standard individually for each TV channel.

Slightly modified patch by Ildar devel at pop3 dot ru



Modified:
   trunk/stream/tv.c
   trunk/stream/tv.h

Changes in other areas also in this revision:
Modified:
   trunk/DOCS/man/en/mplayer.1

Modified: trunk/stream/tv.c
==============================================================================
--- trunk/stream/tv.c	(original)
+++ trunk/stream/tv.c	Sat Jun 14 11:14:16 2008
@@ -254,6 +254,7 @@ static void parse_channels(tvi_handle_t 
     tv_channel_list->next=NULL;
     tv_channel_list->prev=NULL;
     tv_channel_current = tv_channel_list;
+    tv_channel_current->norm = tvh->norm;
 
     while (*channels) {
         char* tmp = *(channels++);
@@ -299,6 +300,12 @@ static void parse_channels(tvi_handle_t 
             if ( sep[0] == '-' ) tv_channel_current->freq -= i * 100;
             sep[0] = '\0';
           }
+
+          sep = strchr(tv_channel_current->name, '=');
+          if ( sep ) {
+            tv_channel_current->norm = norm_from_string(tvh, sep+1);
+            sep[0] = '\0';
+          }
         }
 
         /*mp_msg(MSGT_TV, MSGL_INFO, "-- Detected channel %s - %s (%5.3f)\n",
@@ -310,6 +317,7 @@ static void parse_channels(tvi_handle_t 
         tv_channel_current->next->prev = tv_channel_current;
         tv_channel_current->next->next = NULL;
         tv_channel_current = tv_channel_current->next;
+        tv_channel_current->norm = tvh->norm;
     }
     if (tv_channel_current->prev)
         tv_channel_current->prev->next = NULL;
@@ -376,12 +384,9 @@ static int open_tv(tvi_handle_t *tvh)
 #ifdef HAVE_TV_DSHOW
     || (!strcmp(tvh->tv_param->driver, "dshow") && tvh->tv_param->normid >= 0)
 #endif
-    ) {
-	mp_msg(MSGT_TV, MSGL_V, MSGTR_TV_SelectedNormId, tvh->tv_param->normid);
-	if (funcs->control(tvh->priv, TVI_CONTROL_TUN_SET_NORM, &tvh->tv_param->normid) != TVI_CONTROL_TRUE) {
-	    mp_msg(MSGT_TV, MSGL_ERR, MSGTR_TV_CannotSetNorm);
-	}
-    } else
+    )
+	tv_set_norm_i(tvh, tvh->tv_param->normid);
+    else
 #endif
     tv_set_norm(tvh,tvh->tv_param->norm);
 
@@ -500,6 +505,7 @@ static int open_tv(tvi_handle_t *tvh)
 
 	mp_msg(MSGT_TV, MSGL_INFO, MSGTR_TV_SelectedChannel3, tv_channel_current->number,
 			tv_channel_current->name, (float)tv_channel_current->freq/1000);
+	tv_set_norm_i(tvh, tv_channel_current->norm);
 	tv_set_freq(tvh, (unsigned long)(((float)tv_channel_current->freq/1000)*16));
 	tv_channel_last = tv_channel_current;
     } else {
@@ -922,6 +928,8 @@ int tv_step_channel(tvi_handle_t *tvh, i
 				tv_channel_current = tv_channel_current->next;
 			else
 				tv_channel_current = tv_channel_list;
+				
+				tv_set_norm_i(tvh, tv_channel_current->norm);
 				tv_set_freq(tvh, (unsigned long)(((float)tv_channel_current->freq/1000)*16));
 				mp_msg(MSGT_TV, MSGL_INFO, MSGTR_TV_SelectedChannel3,
 			tv_channel_current->number, tv_channel_current->name, (float)tv_channel_current->freq/1000);
@@ -933,6 +941,7 @@ int tv_step_channel(tvi_handle_t *tvh, i
 			else
 				while (tv_channel_current->next)
 					tv_channel_current = tv_channel_current->next;
+				tv_set_norm_i(tvh, tv_channel_current->norm);
 				tv_set_freq(tvh, (unsigned long)(((float)tv_channel_current->freq/1000)*16));
 				mp_msg(MSGT_TV, MSGL_INFO, MSGTR_TV_SelectedChannel3,
 			tv_channel_current->number, tv_channel_current->name, (float)tv_channel_current->freq/1000);
@@ -977,6 +986,7 @@ int tv_set_channel(tvi_handle_t *tvh, ch
 				tv_channel_current = tv_channel_current->next;
 		mp_msg(MSGT_TV, MSGL_INFO, MSGTR_TV_SelectedChannel3, tv_channel_current->number,
 				tv_channel_current->name, (float)tv_channel_current->freq/1000);
+		tv_set_norm_i(tvh, tv_channel_current->norm);
 		tv_set_freq(tvh, (unsigned long)(((float)tv_channel_current->freq/1000)*16));
 	} else tv_set_channel_real(tvh, channel);
 	return 1;
@@ -994,6 +1004,7 @@ int tv_last_channel(tvi_handle_t *tvh) {
 
 		mp_msg(MSGT_TV, MSGL_INFO, MSGTR_TV_SelectedChannel3, tv_channel_current->number,
 				tv_channel_current->name, (float)tv_channel_current->freq/1000);
+		tv_set_norm_i(tvh, tv_channel_current->norm);
 		tv_set_freq(tvh, (unsigned long)(((float)tv_channel_current->freq/1000)*16));
 	} else {
 		int i;
@@ -1050,6 +1061,20 @@ int tv_set_norm(tvi_handle_t *tvh, char*
     return 1;
 }
 
+int tv_set_norm_i(tvi_handle_t *tvh, int norm)
+{
+   tvh->norm = norm;
+
+   mp_msg(MSGT_TV, MSGL_V, MSGTR_TV_SelectedNormId, norm);
+   if (tvh->functions->control(tvh->priv, TVI_CONTROL_TUN_SET_NORM, &tvh->norm) != TVI_CONTROL_TRUE) {
+      mp_msg(MSGT_TV, MSGL_ERR, MSGTR_TV_CannotSetNorm);
+      return 0;
+   }
+
+   tvh->functions->control(tvh->priv,TV_VBI_CONTROL_RESET,tvh->tv_param);
+   return(1);
+}
+
 demuxer_desc_t demuxer_desc_tv = {
   "Tv card demuxer",
   "tv",

Modified: trunk/stream/tv.h
==============================================================================
--- trunk/stream/tv.h	(original)
+++ trunk/stream/tv.h	Sat Jun 14 11:14:16 2008
@@ -119,6 +119,7 @@ typedef struct tv_channels_s {
     int index;
     char number[5];
     char name[20];
+    int norm;
     int   freq;
     struct tv_channels_s *next;
     struct tv_channels_s *prev;



More information about the MPlayer-cvslog mailing list