From f44ecaa4f27e7538ddcad66d40e543bffa2d2d86 Mon Sep 17 00:00:00 2001 From: manuel Date: Sun, 4 Jun 2017 16:57:49 +0200 Subject: sync with upstream --- .../cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h | 16 ++++- xbmc/cores/VideoPlayer/DVDDemuxers/DemuxCrypto.h | 81 ++++++++++++++++++++++ xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxPacket.h | 36 ---------- 3 files changed, 96 insertions(+), 37 deletions(-) create mode 100644 xbmc/cores/VideoPlayer/DVDDemuxers/DemuxCrypto.h delete mode 100644 xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxPacket.h (limited to 'xbmc/cores') diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h index 4f47118..a769788 100644 --- a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h +++ b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h @@ -21,13 +21,25 @@ */ #include +#include #define DMX_SPECIALID_STREAMINFO -10 #define DMX_SPECIALID_STREAMCHANGE -11 +struct DemuxCryptoInfo; + typedef struct DemuxPacket { - unsigned char* pData; // data + DemuxPacket() {}; + + DemuxPacket(unsigned char *pData, int const iSize, double const pts, double const dts) + : pData(pData) + , iSize(iSize) + , pts(pts) + , dts(dts) + {}; + + unsigned char *pData; // data int iSize; // data size int iStreamId; // integer representing the stream index int64_t demuxerId; // id of the demuxer that created the packet @@ -38,4 +50,6 @@ typedef struct DemuxPacket double duration; // duration in DVD_TIME_BASE if available int dispTime; + + std::shared_ptr cryptoInfo; } DemuxPacket; diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/DemuxCrypto.h b/xbmc/cores/VideoPlayer/DVDDemuxers/DemuxCrypto.h new file mode 100644 index 0000000..522def6 --- /dev/null +++ b/xbmc/cores/VideoPlayer/DVDDemuxers/DemuxCrypto.h @@ -0,0 +1,81 @@ +/* +* Copyright (C) 2005-2016 Team XBMC +* http://xbmc.org +* +* This Program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2, or (at your option) +* any later version. +* +* This Program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with XBMC; see the file COPYING. If not, see +* . +* +*/ + +#pragma once + +#include +#include + +//CryptoSession is usually obtained once per stream, but could change if an key expires + +enum CryptoSessionSystem :uint16_t +{ + CRYPTO_SESSION_SYSTEM_NONE, + CRYPTO_SESSION_SYSTEM_WIDEVINE, + CRYPTO_SESSION_SYSTEM_PLAYREADY +}; + +struct DemuxCryptoSession +{ + DemuxCryptoSession(const CryptoSessionSystem sys, const uint16_t sSize, const char *sData) + : sessionId(new char[sSize]) + , sessionIdSize(sSize) + , keySystem(sys) + { + memcpy(sessionId, sData, sSize); + }; + + ~DemuxCryptoSession() + { + delete[] sessionId; + } + + // encryped stream infos + char * sessionId; + uint16_t sessionIdSize; + CryptoSessionSystem keySystem; +}; + +//CryptoInfo stores the information to decrypt a sample + +struct DemuxCryptoInfo +{ + DemuxCryptoInfo(const unsigned int numSubs) + : numSubSamples(numSubs) + , flags(0) + , clearBytes(new uint16_t[numSubs]) + , cipherBytes(new uint32_t[numSubs]) + {}; + + ~DemuxCryptoInfo() + { + delete[] clearBytes; + delete[] cipherBytes; + } + + uint16_t numSubSamples; //number of subsamples + uint16_t flags; //flags for later use + + uint16_t *clearBytes; // numSubSamples uint16_t's wich define the size of clear size of a subsample + uint32_t *cipherBytes; // numSubSamples uint32_t's wich define the size of cipher size of a subsample + + uint8_t iv[16]; // initialization vector + uint8_t kid[16]; // key id +}; diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxPacket.h b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxPacket.h deleted file mode 100644 index d64fbb3..0000000 --- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxPacket.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -/* - * Copyright (C) 2012-2013 Team XBMC - * http://xbmc.org - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with XBMC; see the file COPYING. If not, see - * . - * - */ - -#define DMX_SPECIALID_STREAMINFO -10 -#define DMX_SPECIALID_STREAMCHANGE -11 - - typedef struct DemuxPacket -{ - unsigned char* pData; // data - int iSize; // data size - int iStreamId; // integer representing the stream index - int iGroupId; // the group this data belongs to, used to group data from different streams together - - double pts; // pts in DVD_TIME_BASE - double dts; // dts in DVD_TIME_BASE - double duration; // duration in DVD_TIME_BASE if available -} DemuxPacket; -- cgit v1.2.3