libdvr: irdeto PVR support TSE with TSN at the same time [1/1]
PD#RSP-2559
Problem:
enable tsn out double ts
Solution:
set hw source can enable double ts
Verify:
AH212 + AndroidR
Change-Id: I5d609817404a59a313237b739821b07108d69384
Signed-off-by: Chuangcheng Peng <chuangcheng.peng@amlogic.com>
diff --git a/src/dvb_utils.c b/src/dvb_utils.c
index 4fc6702..acc524c 100644
--- a/src/dvb_utils.c
+++ b/src/dvb_utils.c
@@ -32,122 +32,49 @@
r = stat(node, &st);
if (r == -1)
{
- int fd, source, input;
+ int fd, source, input = 0;
memset(node, 0, sizeof(node));
snprintf(node, sizeof(node), "/dev/dvb0.demux%d", dmx_idx);
fd = open(node, O_WRONLY);
if (fd != -1)
{
- switch (src)
- {
- case DVB_DEMUX_SOURCE_TS0:
- source = FRONTEND_TS0;
+ if (src >= DVB_DEMUX_SOURCE_TS0 &&
+ src <= DVB_DEMUX_SOURCE_TS7) {
+ source = FRONTEND_TS0 + src - DVB_DEMUX_SOURCE_TS0;
input = INPUT_DEMOD;
- break;
- case DVB_DEMUX_SOURCE_TS1:
- source = FRONTEND_TS1;
+ } else if (src >= DVB_DEMUX_SOURCE_DMA0 &&
+ src <= DVB_DEMUX_SOURCE_DMA7) {
+ source = DMA_0 + src - DVB_DEMUX_SOURCE_DMA0;
+ input = INPUT_LOCAL;
+ } else if (src >= DVB_DEMUX_SECSOURCE_DMA0 &&
+ src <= DVB_DEMUX_SECSOURCE_DMA7) {
+ source = DMA_0 + src - DVB_DEMUX_SECSOURCE_DMA0;
+ input = INPUT_LOCAL_SEC;
+ } else if (src >= DVB_DEMUX_SOURCE_DMA0_1 &&
+ src <= DVB_DEMUX_SOURCE_DMA7_1) {
+ source = DMA_0_1 + src - DVB_DEMUX_SOURCE_DMA0_1;
+ input = INPUT_LOCAL;
+ } else if (src >= DVB_DEMUX_SECSOURCE_DMA0_1 &&
+ src <= DVB_DEMUX_SECSOURCE_DMA7_1) {
+ source = DMA_0_1 + src - DVB_DEMUX_SECSOURCE_DMA0_1;
+ input = INPUT_LOCAL_SEC;
+ } else if (src >= DVB_DEMUX_SOURCE_TS0_1 &&
+ src <= DVB_DEMUX_SOURCE_TS7_1) {
+ source = FRONTEND_TS0_1 + src - DVB_DEMUX_SOURCE_TS0_1;
input = INPUT_DEMOD;
- break;
- case DVB_DEMUX_SOURCE_TS2:
- source = FRONTEND_TS2;
- input = INPUT_DEMOD;
- break;
- case DVB_DEMUX_SOURCE_TS3:
- source = FRONTEND_TS3;
- input = INPUT_DEMOD;
- break;
- case DVB_DEMUX_SOURCE_TS4:
- source = FRONTEND_TS4;
- input = INPUT_DEMOD;
- break;
- case DVB_DEMUX_SOURCE_TS5:
- source = FRONTEND_TS5;
- input = INPUT_DEMOD;
- break;
- case DVB_DEMUX_SOURCE_TS6:
- source = FRONTEND_TS6;
- input = INPUT_DEMOD;
- break;
- case DVB_DEMUX_SOURCE_TS7:
- source = FRONTEND_TS7;
- input = INPUT_DEMOD;
- break;
- case DVB_DEMUX_SOURCE_DMA0:
- source = DMA_0;
- input = INPUT_LOCAL;
- break;
- case DVB_DEMUX_SOURCE_DMA1:
- source = DMA_1;
- input = INPUT_LOCAL;
- break;
- case DVB_DEMUX_SOURCE_DMA2:
- source = DMA_2;
- input = INPUT_LOCAL;
- break;
- case DVB_DEMUX_SOURCE_DMA3:
- source = DMA_3;
- input = INPUT_LOCAL;
- break;
- case DVB_DEMUX_SOURCE_DMA4:
- source = DMA_4;
- input = INPUT_LOCAL;
- break;
- case DVB_DEMUX_SOURCE_DMA5:
- source = DMA_5;
- input = INPUT_LOCAL;
- break;
- case DVB_DEMUX_SOURCE_DMA6:
- source = DMA_6;
- input = INPUT_LOCAL;
- break;
- case DVB_DEMUX_SOURCE_DMA7:
- source = DMA_7;
- input = INPUT_LOCAL;
- break;
- case DVB_DEMUX_SECSOURCE_DMA0:
- source = DMA_0;
- input = INPUT_LOCAL_SEC;
- break;
- case DVB_DEMUX_SECSOURCE_DMA1:
- source = DMA_1;
- input = INPUT_LOCAL_SEC;
- break;
- case DVB_DEMUX_SECSOURCE_DMA2:
- source = DMA_2;
- input = INPUT_LOCAL_SEC;
- break;
- case DVB_DEMUX_SECSOURCE_DMA3:
- source = DMA_3;
- input = INPUT_LOCAL_SEC;
- break;
- case DVB_DEMUX_SECSOURCE_DMA4:
- source = DMA_4;
- input = INPUT_LOCAL_SEC;
- break;
- case DVB_DEMUX_SECSOURCE_DMA5:
- source = DMA_5;
- input = INPUT_LOCAL_SEC;
- break;
- case DVB_DEMUX_SECSOURCE_DMA6:
- source = DMA_6;
- input = INPUT_LOCAL_SEC;
- break;
- case DVB_DEMUX_SECSOURCE_DMA7:
- source = DMA_7;
- input = INPUT_LOCAL_SEC;
- break;
- default:
+ } else {
assert(0);
}
+
if (ioctl(fd, DMX_SET_INPUT, input) == -1)
{
- DVR_DEBUG(1, "dvb_set_demux_source ioctl DMX_SET_INPUT:%d error:%d", input, errno);
- r = -1;
+ DVR_DEBUG(1, "dvb_set_demux_source ioctl DMX_SET_INPUT:%d error:%d", input, errno);
+ r = -1;
}
else
{
- DVR_DEBUG(1, "dvb_set_demux_source ioctl sucesss src:%d DMX_SET_INPUT:%d dmx_idx:%d", src, input, dmx_idx);
- r = 0;
+ DVR_DEBUG(1, "dvb_set_demux_source ioctl sucesss src:%d DMX_SET_INPUT:%d dmx_idx:%d", src, input, dmx_idx);
+ r = 0;
}
if (ioctl(fd, DMX_SET_HW_SOURCE, source) == -1)
{
@@ -346,4 +273,4 @@
return 1;
}
return 0;
-}
\ No newline at end of file
+}