Недавно сменил компьютер и взял видюху Ati EAH2400Pro и после этого tvtime отказался работать(xawtv не нравится), решил использовать mplayer.
Вот патч который добавляет возможность установки формата(PAL,SECAM, PALM итд) в список каналов.
Новый формат записи каналов:
channels=<НОМЕР>-<ИМЯ КАНАЛА>=<ФОРМАТ>
Пример:
mplayer tv://2 -tv driver=v4l2:input=0:chanlist=russia:channels=8-TNT+100=PAL,11-ORT=SECAM,27-RUSS
IA=SECAM,29-NTV=PAL,31-TNV=SECAM
mplayer tv://2 -tv driver=v4l2:input=0:norm=SECAM:chanlist=russia:channels=8-TNT+100=PAL,11-ORT=SE
CAM,27-RUSSIA,29-NTV=PAL,31-TNV=SECAM
Вот сам патч:
diff -Naur mplayer-1.0_rc2_p25993.orig/stream/tv.c mplayer-1.0_rc2_p25993/stream/tv.c
--- mplayer-1.0_rc2_p25993.orig/stream/tv.c 2008-02-06 17:37:07.000000000 +0300
+++ mplayer-1.0_rc2_p25993/stream/tv.c 2008-03-13 09:34:05.000000000 +0300
@@ -254,6 +254,7 @@
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 @@
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 @@
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;
@@ -500,6 +508,7 @@
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 +931,8 @@
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 +944,7 @@
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 +989,7 @@
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 +1007,7 @@
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 +1064,22 @@
return(1);
}
+int tv_set_norm_i(tvi_handle_t *tvh, int norm)
+{
+ char norm_s[5];
+ snprintf(norm_s, 5, "%d", norm);
+
+ tvh->norm = norm;
+
+ mp_msg(MSGT_TV, MSGL_V, MSGTR_TV_SelectedNorm, norm_s);
+ 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",
diff -Naur mplayer-1.0_rc2_p25993.orig/stream/tv.h mplayer-1.0_rc2_p25993/stream/tv.h
--- mplayer-1.0_rc2_p25993.orig/stream/tv.h 2008-02-06 17:37:07.000000000 +0300
+++ mplayer-1.0_rc2_p25993/stream/tv.h 2008-03-13 09:19:22.000000000 +0300
@@ -119,6 +119,7 @@
int index;
char number[5];
char name[20];
+ int norm;
int freq;
struct tv_channels_s *next;
struct tv_channels_s *prev;
>>>