diff --git a/src/driver/genpsi.cpp b/src/driver/genpsi.cpp index e85e8f1fc..f2acc19f7 100644 --- a/src/driver/genpsi.cpp +++ b/src/driver/genpsi.cpp @@ -34,6 +34,7 @@ #define ES_TYPE_MPEG12 0x02 #define ES_TYPE_AVC 0x1b +#define ES_TYPE_HEVC 0x24 #define ES_TYPE_MPA 0x03 #define ES_TYPE_EAC3 0x7a #define ES_TYPE_AC3 0x81 @@ -131,6 +132,10 @@ void CGenPsi::addPid(uint16_t pid, uint16_t pidtype, short isAC3, const char *da pcrpid=vpid=pid; vtype = ES_TYPE_AVC; break; + case EN_TYPE_HEVC: + pcrpid=vpid=pid; + vtype = ES_TYPE_HEVC; + break; case EN_TYPE_PCR: pcrpid=pid; break; diff --git a/src/driver/genpsi.h b/src/driver/genpsi.h index b34ff8510..c52b4acb2 100644 --- a/src/driver/genpsi.h +++ b/src/driver/genpsi.h @@ -30,6 +30,7 @@ #define EN_TYPE_AVC 0x04 #define EN_TYPE_DVBSUB 0x06 #define EN_TYPE_AUDIO_EAC3 0x07 +#define EN_TYPE_HEVC 0x08 class CGenPsi { diff --git a/src/driver/record.cpp b/src/driver/record.cpp index 7e2896903..4bfc8a529 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -164,7 +164,7 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel) CGenPsi psi; numpids = 0; if (allpids.PIDs.vpid != 0){ - psi.addPid(allpids.PIDs.vpid, recMovieInfo->VideoType ? EN_TYPE_AVC : EN_TYPE_VIDEO, 0); + psi.addPid(allpids.PIDs.vpid, recMovieInfo->VideoType == 1 ? EN_TYPE_AVC : recMovieInfo->VideoType == 2 ? EN_TYPE_HEVC : EN_TYPE_VIDEO, 0); if (allpids.PIDs.pcrpid && (allpids.PIDs.pcrpid != allpids.PIDs.vpid)) { psi.addPid(allpids.PIDs.pcrpid, EN_TYPE_PCR, 0); apids[numpids++]=allpids.PIDs.pcrpid; diff --git a/src/driver/streamts.cpp b/src/driver/streamts.cpp index aaf9574fb..b30247b47 100644 --- a/src/driver/streamts.cpp +++ b/src/driver/streamts.cpp @@ -437,7 +437,7 @@ void CStreamManager::AddPids(int fd, CZapitChannel *channel, stream_pids_t &pids for (stream_pids_t::iterator it = pids.begin(); it != pids.end(); ++it) { if (*it == channel->getVideoPid()) { printf("CStreamManager::Parse: genpsi vpid %x (%d)\n", *it, channel->type); - psi.addPid(*it, channel->type ? EN_TYPE_AVC : EN_TYPE_VIDEO, 0); + psi.addPid(*it, channel->type == 1 ? EN_TYPE_AVC : channel->type == 2 ? EN_TYPE_HEVC : EN_TYPE_VIDEO, 0); } else { for (int i = 0; i < channel->getAudioChannelCount(); i++) { if (*it == channel->getAudioChannel(i)->pid) { diff --git a/src/eitd/eitd.h b/src/eitd/eitd.h index e0aead9c3..c650001ad 100644 --- a/src/eitd/eitd.h +++ b/src/eitd/eitd.h @@ -52,7 +52,7 @@ typedef SIservice * SIservicePtr; #define TIME_EIT_SCHEDULED_PAUSE 60 * 60 /* force EIT thread to change filter after, seconds */ -#define TIME_EIT_SKIPPING 180 // 90 <- Canal diditaal 19.2e -> ~100 seconds for 0x5x +#define TIME_EIT_SKIPPING 240 // 90 <- Canal diditaal 19.2e -> ~100 seconds for 0x5x /* a little more time for freesat epg */ #define TIME_FSEIT_SKIPPING 240 /* Timeout in ms for reading from dmx in EIT threads. Dont make this too long diff --git a/src/zapit/src/scanpmt.cpp b/src/zapit/src/scanpmt.cpp index b2e9b4789..f62cbf60b 100644 --- a/src/zapit/src/scanpmt.cpp +++ b/src/zapit/src/scanpmt.cpp @@ -265,9 +265,10 @@ bool CPmt::ParseEsInfo(ElementaryStreamInfo *esinfo, CZapitChannel * const chann switch (stream_type) { case 0x01: case 0x02: + case 0x24: case 0x1b: // AVC Video Stream (MPEG4 H264) channel->setVideoPid(esinfo->getPid()); - channel->type = (stream_type == 0x1b); //FIXME + channel->type = (stream_type == 0x1b) ? 1 : (stream_type == 0x24) ? 2 : 0; //FIXME printf("[pmt] vpid %04x stream %d type %d\n", esinfo->getPid(), stream_type, channel->type); break; case 0x03: