Прошу прощения, что немного не в тему. Нашел вот тут упоминание о том, что newсамд можно прикрутить к новой версии kaffeine player.
ЦитатаKaffeine 0.8.2-beta1 is out! support DVB CICAM using dvbcam.cpp like mythtv. now possible patch and use sasc or newcamd s_i_z_o patch
А вот собственно сами патчи, на которые ссылается аффтар:
Исходный код
--- libs/libmythtv/dvbcam.cpp.orig 2006-01-17 00:22:03.000000000 +0100
+++ libs/libmythtv/dvbcam.cpp 2006-01-17 00:22:40.000000000 +0100
@@ -60,6 +60,7 @@
{
ciThreadRunning = false;
ciHandler = NULL;
+ newcamd_pmt = 0;
pthread_mutex_init(&pmt_lock, NULL);
@@ -84,6 +85,9 @@
bool DVBCam::Start()
{
+ ciThreadRunning = true; // newcamd patch
+ return true; // newcamd patch
+
if (numslots == 0)
return false;
@@ -114,6 +118,10 @@
bool DVBCam::Stop()
{
+
+ ciThreadRunning = false; // newcamd patch
+ return true; // newcamd patch
+
if (ciThreadRunning)
{
exitCiThread = true;
@@ -253,10 +261,112 @@
GENERAL(QString("CA: CiHandler thread stopped"));
}
+// newcamd patch - begin
+void camd_stop(unsigned int adapter) // newcamd patch
+{
+ struct sockaddr_un servaddr;
+ int camdSocket;
+ unsigned char camdBuffer[6];
+
+ servaddr.sun_family = AF_UNIX;
+ sprintf(servaddr.sun_path, "/tmp/camd.socket%d", adapter);
+ if ((camdSocket = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
+ {
+ perror("[camdConnect] socket");
+ return;
+ }
+
+ if (connect(camdSocket, (struct sockaddr*) &servaddr, sizeof(servaddr)) < 0)
+ {
+ perror("[camdConnect] connect");
+ close(camdSocket);
+ return;
+ }
+
+ memset (camdBuffer+1, 0, 5);
+ camdBuffer[0] = 0xff;
+
+ if (write(camdSocket, camdBuffer, 6) < 0)
+ {
+ perror("[camdConnect] write");
+ }
+
+ if (read(camdSocket, camdBuffer, 2) < 0)
+ {
+ perror("[camdConnect] read reply");
+ }
+
+ close(camdSocket);
+}
+
+void camd_start(unsigned short servid, unsigned short pmtpid, unsigned short apid, unsigned int adapter) // newcamd patch
+{
+ struct sockaddr_un servaddr;
+ int camdSocket;
+ unsigned char camdBuffer[6];
+ unsigned short pid;
+
+ servaddr.sun_family = AF_UNIX;
+ sprintf(servaddr.sun_path, "/tmp/camd.socket%d", adapter);
+ if ((camdSocket = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
+ {
+ perror("[camdConnect] socket");
+ return;
+ }
+
+ if (connect(camdSocket, (struct sockaddr*) &servaddr, sizeof(servaddr)) < 0)
+ {
+ perror("[camdConnect] connect");
+ close(camdSocket);
+ return;
+ }
+
+ pid = apid;
+
+/* Use the following line, if you want newcamd to demux and watch the pmt, *
+ * because zapit, enigma or vdr don't do it */
+ camdBuffer[4] = (pid >> 8) & 0x1f;
+
+/* Use the following line, if newcamd isn't allowed to demux/watch the pmt, *
+ * because zapit, enigma or vdr do it themself, this needs /tmp/pmt.tmp, *
+ * when starting newcamd */
+// camdBuffer[4] = ((pid >> 8) & 0x1f) | 0x80;
+
+ camdBuffer[5] = pid & 0xff;
+ pid = pmtpid;
+ camdBuffer[0] = (pid >> 8) & 0x1f;
+ camdBuffer[1] = pid & 0xff;
+ pid = servid;
+ camdBuffer[2] = pid >> 8;
+ camdBuffer[3] = pid & 0xff;
+
+ if (write(camdSocket, camdBuffer, 6) < 0)
+ {
+ perror("[camdConnect] write");
+ }
+
+ if (read(camdSocket, camdBuffer, 2) < 0)
+ {
+ perror("[camdConnect] read reply");
+ }
+
+ close(camdSocket);
+}
+
+
void DVBCam::SetPMT(const PMTObject *pmt)
{
GENERAL(QString("CA: SetPMT for ServiceID=%1").arg(pmt->ServiceID));
+
pthread_mutex_lock(&pmt_lock);
+
+ if ( newcamd_pmt != pmt->ServiceID )
+ {
+ newcamd_pmt = pmt->ServiceID;
+ camd_stop(cardnum); // newcamd patch
+ camd_start(pmt->ServiceID,0,0,cardnum); // newcamd patch
+ }
+
PMTList.clear();
PMTList += *pmt;
have_pmt = true; [/quote]
Показать весь код
Исходный код
--- libs/libmythtv/dvbcam.h.orig 2006-01-17 00:21:54.000000000 +0100
+++ libs/libmythtv/dvbcam.h 2006-01-17 00:22:47.000000000 +0100
@@ -42,6 +42,8 @@
bool pmt_sent;
bool pmt_updated;
bool pmt_added;
+
+ uint16_t newcamd_pmt;
};
#endif // DVBCAM_H
Показать весь код
Ну и в итоге, попытавшись пропатчить kaffein-овские dvbcam.cpp и dvbcam.h понял, что фикушки. Патчик неподходит.
Поможите плиз. Как прикрутить ???
Оригиналы: Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.