Kodi Development 22.0
for Binary and Script based Add-Ons
 
Loading...
Searching...
No Matches
Inputstream.h
1/*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
8
9#pragma once
10
11#include "../AddonBase.h"
12#include "../c-api/addon-instance/inputstream.h"
13#include "inputstream/StreamCodec.h"
14#include "inputstream/StreamConstants.h"
15#include "inputstream/StreamCrypto.h"
16#include "inputstream/TimingConstants.h"
17
18#ifdef __cplusplus
19
20#include <map>
21
22namespace kodi
23{
24namespace addon
25{
26
27//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
28// "C++" Doxygen group set for the definitions
29//{{{
30
31//==============================================================================
44
45//##############################################################################
51
52//##############################################################################
83
84//##############################################################################
90
91//##############################################################################
97
98//##############################################################################
104
105//}}}
106//______________________________________________________________________________
107
108class CInstanceInputStream;
109
110//==============================================================================
124class ATTR_DLL_LOCAL InputstreamProperty
125 : public CStructHdl<InputstreamProperty, INPUTSTREAM_PROPERTY>
126{
128 friend class CInstanceInputStream;
131public:
144
147
149 std::string GetURL() const { return m_cStructure->m_strURL; }
150
152 std::string GetMimeType() const { return m_cStructure->m_mimeType; }
153
155 unsigned int GetPropertiesAmount() const { return m_cStructure->m_nCountInfoValues; }
156
158 const std::map<std::string, std::string> GetProperties() const
159 {
160 std::map<std::string, std::string> props;
161 for (unsigned int i = 0; i < m_cStructure->m_nCountInfoValues; ++i)
162 {
163 props.emplace(m_cStructure->m_ListItemProperties[i].m_strKey,
164 m_cStructure->m_ListItemProperties[i].m_strValue);
165 }
166 return props;
167 }
168
172 std::string GetLibFolder() const { return m_cStructure->m_libFolder; }
173
177 std::string GetProfileFolder() const { return m_cStructure->m_profileFolder; }
178
180
181private:
182 InputstreamProperty() = delete;
183 InputstreamProperty(const InputstreamProperty& stream) = delete;
184 InputstreamProperty(const INPUTSTREAM_PROPERTY* stream) : CStructHdl(stream) {}
185 InputstreamProperty(INPUTSTREAM_PROPERTY* stream) : CStructHdl(stream) {}
186};
188//------------------------------------------------------------------------------
189
190//==============================================================================
201class ATTR_DLL_LOCAL InputstreamCapabilities
202 : public CStructHdl<InputstreamCapabilities, INPUTSTREAM_CAPABILITIES>
203{
205 friend class CInstanceInputStream;
208public:
210 InputstreamCapabilities() = default;
221
224
226 void SetMask(uint32_t mask) const { m_cStructure->m_mask = mask; }
227
229 uint32_t GetMask() const { return m_cStructure->m_mask; }
230
232
233private:
235 InputstreamCapabilities(INPUTSTREAM_CAPABILITIES* stream) : CStructHdl(stream) {}
236};
238//------------------------------------------------------------------------------
239
240//==============================================================================
258 : public CStructHdl<InputstreamMasteringMetadata, INPUTSTREAM_MASTERING_METADATA>
259{
261 friend class CInstanceInputStream;
262 friend class InputstreamInfo;
265public:
270
289
292
299 {
300 if (memcmp(m_cStructure, right.m_cStructure, sizeof(INPUTSTREAM_MASTERING_METADATA)) == 0)
301 return true;
302 return false;
303 }
304
309 void SetPrimaryR_ChromaticityX(double value) { m_cStructure->primary_r_chromaticity_x = value; }
310
312 double GetPrimaryR_ChromaticityX() { return m_cStructure->primary_r_chromaticity_x; }
313
318 void SetPrimaryR_ChromaticityY(double value) { m_cStructure->primary_r_chromaticity_y = value; }
319
321 double GetPrimaryR_ChromaticityY() { return m_cStructure->primary_r_chromaticity_y; }
322
327 void SetPrimaryG_ChromaticityX(double value) { m_cStructure->primary_g_chromaticity_x = value; }
328
330 double GetPrimaryG_ChromaticityX() { return m_cStructure->primary_g_chromaticity_x; }
331
336 void SetPrimaryG_ChromaticityY(double value) { m_cStructure->primary_g_chromaticity_y = value; }
337
339 double GetPrimaryG_ChromaticityY() { return m_cStructure->primary_g_chromaticity_y; }
340
345 void SetPrimaryB_ChromaticityX(double value) { m_cStructure->primary_b_chromaticity_x = value; }
346
348 double GetPrimaryB_ChromaticityX() { return m_cStructure->primary_b_chromaticity_x; }
349
354 void SetPrimaryB_ChromaticityY(double value) { m_cStructure->primary_b_chromaticity_y = value; }
355
357 double GetPrimaryB_ChromaticityY() { return m_cStructure->primary_b_chromaticity_y; }
358
364 {
365 m_cStructure->white_point_chromaticity_x = value;
366 }
367
369 double GetWhitePoint_ChromaticityX() { return m_cStructure->white_point_chromaticity_x; }
370
376 {
377 m_cStructure->white_point_chromaticity_y = value;
378 }
379
381 double GetWhitePoint_ChromaticityY() { return m_cStructure->white_point_chromaticity_y; }
382
386 void SetLuminanceMax(double value) { m_cStructure->luminance_max = value; }
387
389 double GetLuminanceMax() { return m_cStructure->luminance_max; }
390
394 void SetLuminanceMin(double value) { m_cStructure->luminance_min = value; }
395
397 double GetLuminanceMin() { return m_cStructure->luminance_min; }
398
400
401private:
403 InputstreamMasteringMetadata(INPUTSTREAM_MASTERING_METADATA* stream) : CStructHdl(stream) {}
404};
406//------------------------------------------------------------------------------
407
408//==============================================================================
423 : public CStructHdl<InputstreamContentlightMetadata, INPUTSTREAM_CONTENTLIGHT_METADATA>
424{
426 friend class CInstanceInputStream;
427 friend class InputstreamInfo;
430public:
434 : CStructHdl(stream)
435 {
436 }
448
451
458 {
459 if (memcmp(m_cStructure, right.m_cStructure, sizeof(INPUTSTREAM_CONTENTLIGHT_METADATA)) == 0)
460 return true;
461 return false;
462 }
463
468 void SetMaxCll(uint64_t value) { m_cStructure->max_cll = value; }
469
471 uint64_t GetMaxCll() { return m_cStructure->max_cll; }
472
477 void SetMaxFall(uint64_t value) { m_cStructure->max_fall = value; }
478
480 uint64_t GetMaxFall() { return m_cStructure->max_fall; }
481
483
484private:
486 : CStructHdl(stream)
487 {
488 }
489 InputstreamContentlightMetadata(INPUTSTREAM_CONTENTLIGHT_METADATA* stream) : CStructHdl(stream) {}
490};
492//------------------------------------------------------------------------------
493
494//==============================================================================
507class ATTR_DLL_LOCAL InputstreamDvccMetadata
508 : public CStructHdl<InputstreamDvccMetadata, INPUTSTREAM_DVCC_METADATA>
509{
511 friend class CInstanceInputStream;
512 friend class InputstreamInfo;
515public:
516 InputstreamDvccMetadata() = default;
517
519
520 InputstreamDvccMetadata& operator=(const InputstreamDvccMetadata&) = default;
521
537
538 bool operator==(const kodi::addon::InputstreamDvccMetadata& right) const
539 {
540 if (memcmp(m_cStructure, right.m_cStructure, sizeof(INPUTSTREAM_DVCC_METADATA)) == 0)
541 return true;
542 return false;
543 }
544
545 void SetDvVersionMajor(uint8_t value) { m_cStructure->m_dvVersionMajor = value; }
546 uint8_t GetDvVersionMajor() const { return m_cStructure->m_dvVersionMajor; }
547
548 void SetDvVersionMinor(uint8_t value) { m_cStructure->m_dvVersionMinor = value; }
549 uint8_t GetDvVersionMinor() const { return m_cStructure->m_dvVersionMinor; }
550
551 void SetDvProfile(uint8_t value) { m_cStructure->m_dvProfile = value; }
552 uint8_t GetDvProfile() const { return m_cStructure->m_dvProfile; }
553
554 void SetDvLevel(uint8_t value) { m_cStructure->m_dvLevel = value; }
555 uint8_t GetDvLevel() const { return m_cStructure->m_dvLevel; }
556
557 void SetRpuPresentFlag(bool value) { m_cStructure->m_rpuPresentFlag = value; }
558 bool GetRpuPresentFlag() const { return m_cStructure->m_rpuPresentFlag; }
559
560 void SetElPresentFlag(bool value) { m_cStructure->m_elPresentFlag = value; }
561 bool GetElPresentFlag() const { return m_cStructure->m_elPresentFlag; }
562
563 void SetBlPresentFlag(bool value) { m_cStructure->m_blPresentFlag = value; }
564 bool GetBlPresentFlag() const { return m_cStructure->m_blPresentFlag; }
565
566 void SetBlSignalCompatibilityId(uint8_t value)
567 {
568 m_cStructure->m_dvBlSignalCompatibilityId = value;
569 }
570 uint8_t GetBlSignalCompatibilityId() const { return m_cStructure->m_dvBlSignalCompatibilityId; }
571
572 void SetMdCompression(uint8_t value) { m_cStructure->m_dvMdCompression = value; }
573 uint8_t GetMdCompression() const { return m_cStructure->m_dvMdCompression; }
574
575private:
577
579};
581//------------------------------------------------------------------------------
582
583//==============================================================================
596class ATTR_DLL_LOCAL InputstreamInfo : public CStructHdl<InputstreamInfo, INPUTSTREAM_INFO>
597{
599 friend class CInstanceInputStream;
602public:
604 InputstreamInfo() = default;
605 InputstreamInfo(const InputstreamInfo& stream) : CStructHdl(stream)
606 {
607 SetCryptoSession(stream.GetCryptoSession());
608 CopyExtraData();
609 }
648
651
655 void SetStreamType(INPUTSTREAM_TYPE streamType) { m_cStructure->m_streamType = streamType; }
656
658 INPUTSTREAM_TYPE GetStreamType() const { return m_cStructure->m_streamType; }
659
663 void SetFeatures(uint32_t features) { m_cStructure->m_features = features; }
664
666 uint32_t GetFeatures() const { return m_cStructure->m_features; }
667
671 void SetFlags(uint32_t flags) { m_cStructure->m_flags = flags; }
672
674 uint32_t GetFlags() const { return m_cStructure->m_flags; }
675
679 void SetName(const std::string& name)
680 {
681 strncpy(m_cStructure->m_name, name.c_str(), INPUTSTREAM_MAX_STRING_NAME_SIZE);
682 }
683
685 std::string GetName() const { return m_cStructure->m_name; }
686
696 void SetCodecName(const std::string& codecName)
697 {
698 strncpy(m_cStructure->m_codecName, codecName.c_str(), INPUTSTREAM_MAX_STRING_CODEC_SIZE);
699 }
700
702 std::string GetCodecName() const { return m_cStructure->m_codecName; }
703
707 void SetCodecInternalName(const std::string& codecName)
708 {
709 strncpy(m_cStructure->m_codecInternalName, codecName.c_str(),
710 INPUTSTREAM_MAX_STRING_CODEC_SIZE);
711 }
712
714 std::string GetCodecInternalName() const { return m_cStructure->m_codecInternalName; }
715
720 {
721 m_cStructure->m_codecProfile = codecProfile;
722 }
723
725 STREAMCODEC_PROFILE GetCodecProfile() const { return m_cStructure->m_codecProfile; }
726
730 void SetPhysicalIndex(unsigned int id) { m_cStructure->m_pID = id; }
731
733 unsigned int GetPhysicalIndex() const { return m_cStructure->m_pID; }
734
738 void SetExtraData(const std::vector<uint8_t>& extraData)
739 {
740 m_extraData = extraData;
741 m_cStructure->m_ExtraData = m_extraData.data();
742 m_cStructure->m_ExtraSize = static_cast<unsigned int>(m_extraData.size());
743 }
744
749 void SetExtraData(const uint8_t* extraData, size_t extraSize)
750 {
751 m_extraData.clear();
752 if (extraData && extraSize > 0)
753 {
754 for (size_t i = 0; i < extraSize; ++i)
755 m_extraData.emplace_back(extraData[i]);
756 }
757
758 m_cStructure->m_ExtraData = m_extraData.data();
759 m_cStructure->m_ExtraSize = static_cast<unsigned int>(m_extraData.size());
760 }
761
763 const std::vector<uint8_t>& GetExtraData() { return m_extraData; }
764
766 size_t GetExtraDataSize() { return m_extraData.size(); }
767
773 bool CompareExtraData(const uint8_t* extraData, size_t extraSize) const
774 {
775 if (!extraData || m_extraData.size() != extraSize)
776 return false;
777 for (size_t i = 0; i < extraSize; ++i)
778 {
779 if (m_extraData[i] != extraData[i])
780 return false;
781 }
782 return true;
783 }
784
787 {
788 m_extraData.clear();
789 m_cStructure->m_ExtraData = m_extraData.data();
790 m_cStructure->m_ExtraSize = static_cast<unsigned int>(m_extraData.size());
791 }
792
796 void SetLanguage(const std::string& language)
797 {
798 strncpy(m_cStructure->m_language, language.c_str(), INPUTSTREAM_MAX_STRING_LANGUAGE_SIZE);
799 }
800
802 std::string GetLanguage() const { return m_cStructure->m_language; }
803
807 void SetFpsScale(unsigned int fpsScale) { m_cStructure->m_FpsScale = fpsScale; }
808
810 unsigned int GetFpsScale() const { return m_cStructure->m_FpsScale; }
811
815 void SetFpsRate(unsigned int fpsRate) { m_cStructure->m_FpsRate = fpsRate; }
816
818 unsigned int GetFpsRate() const { return m_cStructure->m_FpsRate; }
819
823 void SetHeight(unsigned int height) { m_cStructure->m_Height = height; }
824
826 unsigned int GetHeight() const { return m_cStructure->m_Height; }
827
831 void SetWidth(unsigned int width) { m_cStructure->m_Width = width; }
832
834 unsigned int GetWidth() const { return m_cStructure->m_Width; }
835
839 void SetAspect(float aspect) { m_cStructure->m_Aspect = aspect; }
840
842 float GetAspect() const { return m_cStructure->m_Aspect; }
843
847 void SetChannels(unsigned int channels) { m_cStructure->m_Channels = channels; }
848
850 unsigned int GetChannels() const { return m_cStructure->m_Channels; }
851
855 void SetSampleRate(unsigned int sampleRate) { m_cStructure->m_SampleRate = sampleRate; }
856
858 unsigned int GetSampleRate() const { return m_cStructure->m_SampleRate; }
859
863 void SetBitRate(unsigned int bitRate) { m_cStructure->m_BitRate = bitRate; }
864
866 unsigned int GetBitRate() const { return m_cStructure->m_BitRate; }
867
871 void SetBitsPerSample(unsigned int bitsPerSample)
872 {
873 m_cStructure->m_BitsPerSample = bitsPerSample;
874 }
875
877 unsigned int GetBitsPerSample() const { return m_cStructure->m_BitsPerSample; }
878
882 void SetBlockAlign(unsigned int blockAlign) { m_cStructure->m_BlockAlign = blockAlign; }
883
885 unsigned int GetBlockAlign() const { return m_cStructure->m_BlockAlign; }
886
892 {
893 m_cryptoSession = cryptoSession;
894 memcpy(&m_cStructure->m_cryptoSession, m_cryptoSession.GetCStructure(),
895 sizeof(STREAM_CRYPTO_SESSION));
896 }
897
899 const kodi::addon::StreamCryptoSession& GetCryptoSession() const { return m_cryptoSession; }
900
904 void SetCodecFourCC(unsigned int codecFourCC) { m_cStructure->m_codecFourCC = codecFourCC; }
905
907 unsigned int GetCodecFourCC() const { return m_cStructure->m_codecFourCC; }
908
912 void SetColorSpace(INPUTSTREAM_COLORSPACE colorSpace) { m_cStructure->m_colorSpace = colorSpace; }
913
915 INPUTSTREAM_COLORSPACE GetColorSpace() const { return m_cStructure->m_colorSpace; }
916
920 void SetColorRange(INPUTSTREAM_COLORRANGE colorRange) { m_cStructure->m_colorRange = colorRange; }
921
923 INPUTSTREAM_COLORRANGE GetColorRange() const { return m_cStructure->m_colorRange; }
924
929 {
930 m_cStructure->m_colorPrimaries = colorPrimaries;
931 }
932
934 INPUTSTREAM_COLORPRIMARIES GetColorPrimaries() const { return m_cStructure->m_colorPrimaries; }
935
939 void SetColorTransferCharacteristic(INPUTSTREAM_COLORTRC colorTransferCharacteristic)
940 {
941 m_cStructure->m_colorTransferCharacteristic = colorTransferCharacteristic;
942 }
943
946 {
947 return m_cStructure->m_colorTransferCharacteristic;
948 }
949
959 {
960 m_masteringMetadata = masteringMetadata;
961 m_cStructure->m_masteringMetadata = m_masteringMetadata;
962 }
963
966 {
967 return m_masteringMetadata;
968 }
969
971 void ClearMasteringMetadata() { m_cStructure->m_masteringMetadata = nullptr; }
972
980 const kodi::addon::InputstreamContentlightMetadata& contentLightMetadata)
981 {
982 m_contentLightMetadata = contentLightMetadata;
983 m_cStructure->m_contentLightMetadata = m_contentLightMetadata;
984 }
985
988 {
989 return m_contentLightMetadata;
990 }
991
993 void ClearContentLightMetadata() { m_cStructure->m_contentLightMetadata = nullptr; }
994
999 {
1000 m_dvccMetadata = dvccMetadata;
1001 m_cStructure->m_dvccMetadata = m_dvccMetadata;
1002 }
1003
1007 const kodi::addon::InputstreamDvccMetadata& GetDvccMetadata() const { return m_dvccMetadata; }
1008
1010 void ClearDvccMetadata() { m_cStructure->m_dvccMetadata = nullptr; }
1011
1013
1014private:
1015 InputstreamInfo(const INPUTSTREAM_INFO* stream) : CStructHdl(stream)
1016 {
1017 SetCryptoSession(StreamCryptoSession(&stream->m_cryptoSession));
1018 CopyExtraData();
1019 }
1020 InputstreamInfo(INPUTSTREAM_INFO* stream) : CStructHdl(stream)
1021 {
1022 SetCryptoSession(StreamCryptoSession(&stream->m_cryptoSession));
1023 CopyExtraData();
1024 }
1025
1026 void CopyExtraData()
1027 {
1028 if (m_cStructure->m_ExtraData && m_cStructure->m_ExtraSize > 0)
1029 {
1030 for (unsigned int i = 0; i < m_cStructure->m_ExtraSize; ++i)
1031 m_extraData.emplace_back(m_cStructure->m_ExtraData[i]);
1032 }
1033 if (m_cStructure->m_masteringMetadata)
1034 m_masteringMetadata = m_cStructure->m_masteringMetadata;
1035 if (m_cStructure->m_contentLightMetadata)
1036 m_contentLightMetadata = m_cStructure->m_contentLightMetadata;
1037 }
1038 std::vector<uint8_t> m_extraData;
1039 StreamCryptoSession m_cryptoSession;
1040 InputstreamMasteringMetadata m_masteringMetadata;
1041 InputstreamContentlightMetadata m_contentLightMetadata;
1042 InputstreamDvccMetadata m_dvccMetadata;
1043};
1045//------------------------------------------------------------------------------
1046
1047//==============================================================================
1058class ATTR_DLL_LOCAL InputstreamTimes : public CStructHdl<InputstreamTimes, INPUTSTREAM_TIMES>
1059{
1061 friend class CInstanceInputStream;
1064public:
1066 InputstreamTimes() = default;
1067 InputstreamTimes(const InputstreamTimes& stream) : CStructHdl(stream) {}
1081
1084
1086 void SetStartTime(time_t startTime) const { m_cStructure->startTime = startTime; }
1087
1089 time_t GetStartTime() const { return m_cStructure->startTime; }
1090
1092 void SetPtsStart(double ptsStart) const { m_cStructure->ptsStart = ptsStart; }
1093
1095 double GetPtsStart() const { return m_cStructure->ptsStart; }
1096
1098 void SetPtsBegin(double ptsBegin) const { m_cStructure->ptsBegin = ptsBegin; }
1099
1101 double GetPtsBegin() const { return m_cStructure->ptsBegin; }
1102
1104 void SetPtsEnd(double ptsEnd) const { m_cStructure->ptsEnd = ptsEnd; }
1105
1107 double GetPtsEnd() const { return m_cStructure->ptsEnd; }
1108
1110
1111private:
1112 InputstreamTimes(const INPUTSTREAM_TIMES* stream) : CStructHdl(stream) {}
1113 InputstreamTimes(INPUTSTREAM_TIMES* stream) : CStructHdl(stream) {}
1114};
1116//------------------------------------------------------------------------------
1117
1118//============================================================================
1254//------------------------------------------------------------------------------
1255class ATTR_DLL_LOCAL CInstanceInputStream : public IAddonInstance
1256{
1257public:
1258 //============================================================================
1269 explicit CInstanceInputStream(const IInstanceInfo& instance) : IAddonInstance(instance)
1270 {
1271 if (CPrivateBase::m_interface->globalSingleInstance != nullptr)
1272 throw std::logic_error("kodi::addon::CInstanceInputStream: Creation of multiple together "
1273 "with single instance way is not allowed!");
1274
1275 SetAddonStruct(instance);
1276 }
1277 //----------------------------------------------------------------------------
1278
1279 //============================================================================
1283 ~CInstanceInputStream() override = default;
1284 //----------------------------------------------------------------------------
1285
1286 //============================================================================
1317 //----------------------------------------------------------------------------
1318
1319 //============================================================================
1348 virtual bool Open(const kodi::addon::InputstreamProperty& props) = 0;
1349 //----------------------------------------------------------------------------
1350
1351 //============================================================================
1361 virtual void Close() = 0;
1362 //----------------------------------------------------------------------------
1363
1364 //============================================================================
1370 virtual bool IsRealTimeStream() { return true; }
1371 //----------------------------------------------------------------------------
1372
1373 //############################################################################
1393
1394 //============================================================================
1401 virtual int ReadStream(uint8_t* buffer, unsigned int bufferSize) { return -1; }
1402 //----------------------------------------------------------------------------
1403
1404 //============================================================================
1422 virtual int64_t SeekStream(int64_t position, int whence = SEEK_SET) { return -1; }
1423 //----------------------------------------------------------------------------
1424
1425 //============================================================================
1433 virtual int64_t PositionStream() { return -1; }
1434 //----------------------------------------------------------------------------
1435
1436 //============================================================================
1444 virtual int64_t LengthStream() { return -1; }
1445 //--------------------------------------------------------------------------
1446
1447 //==========================================================================
1455 virtual int GetBlockSize() { return 0; }
1456 //--------------------------------------------------------------------------
1457
1459
1460 //############################################################################
1468
1469 //============================================================================
1510 virtual bool GetStreamIds(std::vector<unsigned int>& ids) { return false; }
1511 //----------------------------------------------------------------------------
1512
1513 //============================================================================
1562 virtual bool GetStream(int streamid, kodi::addon::InputstreamInfo& stream) { return false; }
1563 //----------------------------------------------------------------------------
1564
1565 //============================================================================
1579 virtual void EnableStream(int streamid, bool enable) {}
1580 //----------------------------------------------------------------------------
1581
1582 //============================================================================
1593 virtual bool OpenStream(int streamid) { return false; }
1594 //----------------------------------------------------------------------------
1595
1596 //============================================================================
1601 virtual void DemuxReset() {}
1602 //----------------------------------------------------------------------------
1603
1604 //============================================================================
1609 virtual void DemuxAbort() {}
1610 //----------------------------------------------------------------------------
1611
1612 //============================================================================
1617 virtual void DemuxFlush() {}
1618 //----------------------------------------------------------------------------
1619
1620 //============================================================================
1634 virtual DEMUX_PACKET* DemuxRead() { return nullptr; }
1635 //----------------------------------------------------------------------------
1636
1637 //============================================================================
1649 virtual bool DemuxSeekTime(double time, bool backwards, double& startpts) { return false; }
1650 //----------------------------------------------------------------------------
1651
1652 //============================================================================
1659 virtual void DemuxSetSpeed(int speed) {}
1660 //----------------------------------------------------------------------------
1661
1662 //============================================================================
1668 virtual void SetVideoResolution(unsigned int width, unsigned int height) {}
1669 //----------------------------------------------------------------------------
1670
1671 //============================================================================
1679 virtual void SetVideoResolution(unsigned int width,
1680 unsigned int height,
1681 unsigned int maxWidth,
1682 unsigned int maxHeight)
1683 {
1684 }
1685 //----------------------------------------------------------------------------
1686
1687 //=============================================================================
1696 {
1697 return m_instanceData->toKodi->allocate_demux_packet(m_instanceData->toKodi->kodiInstance,
1698 dataSize);
1699 }
1700 //----------------------------------------------------------------------------
1701
1702 //============================================================================
1711 DEMUX_PACKET* AllocateEncryptedDemuxPacket(int dataSize, unsigned int encryptedSubsampleCount)
1712 {
1713 return m_instanceData->toKodi->allocate_encrypted_demux_packet(
1714 m_instanceData->toKodi->kodiInstance, dataSize, encryptedSubsampleCount);
1715 }
1716 //----------------------------------------------------------------------------
1717
1718 //============================================================================
1726 {
1727 return m_instanceData->toKodi->free_demux_packet(m_instanceData->toKodi->kodiInstance, packet);
1728 }
1729 //----------------------------------------------------------------------------
1730
1732
1733 //############################################################################
1741
1742 //==========================================================================
1749 virtual int GetTotalTime() { return -1; }
1750 //--------------------------------------------------------------------------
1751
1752 //==========================================================================
1759 virtual int GetTime() { return -1; }
1760 //--------------------------------------------------------------------------
1761
1763
1764 //############################################################################
1772
1773 //============================================================================
1783 virtual bool GetTimes(InputstreamTimes& times) { return false; }
1784 //----------------------------------------------------------------------------
1785
1787
1788 //############################################################################
1796
1797 //============================================================================
1804 virtual bool PosTime(int ms) { return false; }
1805 //----------------------------------------------------------------------------
1806
1808
1809 //############################################################################
1817
1818 //==========================================================================
1826 virtual int GetChapter() { return -1; }
1827 //--------------------------------------------------------------------------
1828
1829 //==========================================================================
1837 virtual int GetChapterCount() { return 0; }
1838 //--------------------------------------------------------------------------
1839
1840 //==========================================================================
1849 virtual const char* GetChapterName(int ch) { return nullptr; }
1850 //--------------------------------------------------------------------------
1851
1852 //==========================================================================
1861 virtual int64_t GetChapterPos(int ch) { return 0; }
1862 //--------------------------------------------------------------------------
1863
1864 //==========================================================================
1873 virtual bool SeekChapter(int ch) { return false; }
1874 //--------------------------------------------------------------------------
1875
1877
1878private:
1879 static int compareVersion(const int v1[3], const int v2[3])
1880 {
1881 for (unsigned i(0); i < 3; ++i)
1882 if (v1[i] != v2[i])
1883 return v1[i] - v2[i];
1884 return 0;
1885 }
1886
1887 void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance)
1888 {
1889 int api[3] = {0, 0, 0};
1890 sscanf(GetInstanceAPIVersion().c_str(), "%d.%d.%d", &api[0], &api[1], &api[2]);
1891
1892 instance->hdl = this;
1893 instance->inputstream->toAddon->open = ADDON_Open;
1894 instance->inputstream->toAddon->close = ADDON_Close;
1895 instance->inputstream->toAddon->get_capabilities = ADDON_GetCapabilities;
1896
1897 instance->inputstream->toAddon->get_stream_ids = ADDON_GetStreamIds;
1898 instance->inputstream->toAddon->get_stream = ADDON_GetStream;
1899 instance->inputstream->toAddon->enable_stream = ADDON_EnableStream;
1900 instance->inputstream->toAddon->open_stream = ADDON_OpenStream;
1901 instance->inputstream->toAddon->demux_reset = ADDON_DemuxReset;
1902 instance->inputstream->toAddon->demux_abort = ADDON_DemuxAbort;
1903 instance->inputstream->toAddon->demux_flush = ADDON_DemuxFlush;
1904 instance->inputstream->toAddon->demux_read = ADDON_DemuxRead;
1905 instance->inputstream->toAddon->demux_seek_time = ADDON_DemuxSeekTime;
1906 instance->inputstream->toAddon->demux_set_speed = ADDON_DemuxSetSpeed;
1907 instance->inputstream->toAddon->set_video_resolution = ADDON_SetVideoResolution;
1908
1909 instance->inputstream->toAddon->get_total_time = ADDON_GetTotalTime;
1910 instance->inputstream->toAddon->get_time = ADDON_GetTime;
1911
1912 instance->inputstream->toAddon->get_times = ADDON_GetTimes;
1913 instance->inputstream->toAddon->pos_time = ADDON_PosTime;
1914
1915 instance->inputstream->toAddon->read_stream = ADDON_ReadStream;
1916 instance->inputstream->toAddon->seek_stream = ADDON_SeekStream;
1917 instance->inputstream->toAddon->position_stream = ADDON_PositionStream;
1918 instance->inputstream->toAddon->length_stream = ADDON_LengthStream;
1919 instance->inputstream->toAddon->is_real_time_stream = ADDON_IsRealTimeStream;
1920
1921 // Added on 2.0.10
1922 instance->inputstream->toAddon->get_chapter = ADDON_GetChapter;
1923 instance->inputstream->toAddon->get_chapter_count = ADDON_GetChapterCount;
1924 instance->inputstream->toAddon->get_chapter_name = ADDON_GetChapterName;
1925 instance->inputstream->toAddon->get_chapter_pos = ADDON_GetChapterPos;
1926 instance->inputstream->toAddon->seek_chapter = ADDON_SeekChapter;
1927
1928 // Added on 2.0.12
1929 instance->inputstream->toAddon->block_size_stream = ADDON_GetBlockSize;
1930
1931 /*
1932 // Way to include part on new API version
1933 int minPartVersion[3] = { 3, 0, 0 };
1934 if (compareVersion(api, minPartVersion) >= 0)
1935 {
1936
1937 }
1938 */
1939
1940 m_instanceData = instance->inputstream;
1941 m_instanceData->toAddon->addonInstance = this;
1942 }
1943
1944 inline static bool ADDON_Open(const AddonInstance_InputStream* instance,
1945 INPUTSTREAM_PROPERTY* props)
1946 {
1947 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->Open(props);
1948 }
1949
1950 inline static void ADDON_Close(const AddonInstance_InputStream* instance)
1951 {
1952 static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->Close();
1953 }
1954
1955 inline static void ADDON_GetCapabilities(const AddonInstance_InputStream* instance,
1956 INPUTSTREAM_CAPABILITIES* capabilities)
1957 {
1958 InputstreamCapabilities caps(capabilities);
1959 static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->GetCapabilities(caps);
1960 }
1961
1962 // IDemux
1963 inline static bool ADDON_GetStreamIds(const AddonInstance_InputStream* instance,
1964 struct INPUTSTREAM_IDS* ids)
1965 {
1966 std::vector<unsigned int> idList;
1967 bool ret =
1968 static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->GetStreamIds(idList);
1969 if (ret)
1970 {
1971 for (size_t i = 0; i < idList.size() && i < INPUTSTREAM_MAX_STREAM_COUNT; ++i)
1972 {
1973 ids->m_streamCount++;
1974 ids->m_streamIds[i] = idList[i];
1975 }
1976 }
1977 return ret;
1978 }
1979
1980 inline static bool ADDON_GetStream(
1981 const AddonInstance_InputStream* instance,
1982 int streamid,
1983 struct INPUTSTREAM_INFO* info,
1984 KODI_HANDLE* demuxStream,
1985 KODI_HANDLE (*transfer_stream)(KODI_HANDLE handle,
1986 int streamId,
1987 struct INPUTSTREAM_INFO* stream))
1988 {
1989 InputstreamInfo infoData(info);
1990 bool ret = static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)
1991 ->GetStream(streamid, infoData);
1992 if (ret && transfer_stream)
1993 {
1994 // Do this with given callback to prevent memory problems and leaks. This
1995 // then create on Kodi the needed class where then given back on demuxStream.
1996 *demuxStream = transfer_stream(instance->toKodi->kodiInstance, streamid, info);
1997 }
1998 return ret;
1999 }
2000
2001 inline static void ADDON_EnableStream(const AddonInstance_InputStream* instance,
2002 int streamid,
2003 bool enable)
2004 {
2005 static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)
2006 ->EnableStream(streamid, enable);
2007 }
2008
2009 inline static bool ADDON_OpenStream(const AddonInstance_InputStream* instance, int streamid)
2010 {
2011 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)
2012 ->OpenStream(streamid);
2013 }
2014
2015 inline static void ADDON_DemuxReset(const AddonInstance_InputStream* instance)
2016 {
2017 static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->DemuxReset();
2018 }
2019
2020 inline static void ADDON_DemuxAbort(const AddonInstance_InputStream* instance)
2021 {
2022 static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->DemuxAbort();
2023 }
2024
2025 inline static void ADDON_DemuxFlush(const AddonInstance_InputStream* instance)
2026 {
2027 static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->DemuxFlush();
2028 }
2029
2030 inline static DEMUX_PACKET* ADDON_DemuxRead(const AddonInstance_InputStream* instance)
2031 {
2032 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->DemuxRead();
2033 }
2034
2035 inline static bool ADDON_DemuxSeekTime(const AddonInstance_InputStream* instance,
2036 double time,
2037 bool backwards,
2038 double* startpts)
2039 {
2040 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)
2041 ->DemuxSeekTime(time, backwards, *startpts);
2042 }
2043
2044 inline static void ADDON_DemuxSetSpeed(const AddonInstance_InputStream* instance, int speed)
2045 {
2046 static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->DemuxSetSpeed(speed);
2047 }
2048
2049 inline static void ADDON_SetVideoResolution(const AddonInstance_InputStream* instance,
2050 unsigned int width,
2051 unsigned int height,
2052 unsigned int maxWidth,
2053 unsigned int maxHeight)
2054 {
2055 static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)
2056 ->SetVideoResolution(width, height);
2057 static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)
2058 ->SetVideoResolution(width, height, maxWidth, maxHeight);
2059 }
2060
2061 // IDisplayTime
2062 inline static int ADDON_GetTotalTime(const AddonInstance_InputStream* instance)
2063 {
2064 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->GetTotalTime();
2065 }
2066
2067 inline static int ADDON_GetTime(const AddonInstance_InputStream* instance)
2068 {
2069 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->GetTime();
2070 }
2071
2072 // ITime
2073 inline static bool ADDON_GetTimes(const AddonInstance_InputStream* instance,
2074 INPUTSTREAM_TIMES* times)
2075 {
2076 InputstreamTimes cppTimes(times);
2077 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->GetTimes(cppTimes);
2078 }
2079
2080 // IPosTime
2081 inline static bool ADDON_PosTime(const AddonInstance_InputStream* instance, int ms)
2082 {
2083 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->PosTime(ms);
2084 }
2085
2086 inline static int ADDON_GetChapter(const AddonInstance_InputStream* instance)
2087 {
2088 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->GetChapter();
2089 }
2090
2091 inline static int ADDON_GetChapterCount(const AddonInstance_InputStream* instance)
2092 {
2093 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->GetChapterCount();
2094 }
2095
2096 inline static const char* ADDON_GetChapterName(const AddonInstance_InputStream* instance, int ch)
2097 {
2098 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->GetChapterName(ch);
2099 }
2100
2101 inline static int64_t ADDON_GetChapterPos(const AddonInstance_InputStream* instance, int ch)
2102 {
2103 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->GetChapterPos(ch);
2104 }
2105
2106 inline static bool ADDON_SeekChapter(const AddonInstance_InputStream* instance, int ch)
2107 {
2108 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->SeekChapter(ch);
2109 }
2110
2111 inline static int ADDON_ReadStream(const AddonInstance_InputStream* instance,
2112 uint8_t* buffer,
2113 unsigned int bufferSize)
2114 {
2115 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)
2116 ->ReadStream(buffer, bufferSize);
2117 }
2118
2119 inline static int64_t ADDON_SeekStream(const AddonInstance_InputStream* instance,
2120 int64_t position,
2121 int whence)
2122 {
2123 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)
2124 ->SeekStream(position, whence);
2125 }
2126
2127 inline static int64_t ADDON_PositionStream(const AddonInstance_InputStream* instance)
2128 {
2129 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->PositionStream();
2130 }
2131
2132 inline static int64_t ADDON_LengthStream(const AddonInstance_InputStream* instance)
2133 {
2134 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->LengthStream();
2135 }
2136
2137 inline static int ADDON_GetBlockSize(const AddonInstance_InputStream* instance)
2138 {
2139 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->GetBlockSize();
2140 }
2141
2142 inline static bool ADDON_IsRealTimeStream(const AddonInstance_InputStream* instance)
2143 {
2144 return static_cast<CInstanceInputStream*>(instance->toAddon->addonInstance)->IsRealTimeStream();
2145 }
2146
2147 AddonInstance_InputStream* m_instanceData;
2148};
2149//------------------------------------------------------------------------------
2150
2151} /* namespace addon */
2152} /* namespace kodi */
2153
2154#endif /* __cplusplus */
Definition Inputstream.h:1256
Definition AddonBase.h:206
Definition AddonBase.h:566
Definition AddonBase.h:502
Definition Inputstream.h:203
Definition Inputstream.h:509
Definition Inputstream.h:597
Definition Inputstream.h:259
Definition Inputstream.h:126
Definition Inputstream.h:1059
Definition StreamCrypto.h:43
virtual const char * GetChapterName(int ch)
Return name of chapter.
Definition Inputstream.h:1849
virtual int GetChapterCount()
Return number of available chapters.
Definition Inputstream.h:1837
virtual int64_t GetChapterPos(int ch)
Return position if chapter # ch in milliseconds.
Definition Inputstream.h:1861
virtual int GetChapter()
Return currently selected chapter.
Definition Inputstream.h:1826
virtual bool SeekChapter(int ch)
Seek to the beginning of chapter # ch.
Definition Inputstream.h:1873
std::string GetLibFolder() const
Get addon library folder.
Definition Inputstream.h:172
std::string GetMimeType() const
Stream mime type.
Definition Inputstream.h:152
std::string GetURL() const
Stream URL to open.
Definition Inputstream.h:149
const std::map< std::string, std::string > GetProperties() const
List of available properties-.
Definition Inputstream.h:158
unsigned int GetPropertiesAmount() const
Amount of available properties.
Definition Inputstream.h:155
std::string GetProfileFolder() const
Get addon profile/user folder.
Definition Inputstream.h:177
Definition demux_packet.h:46
INPUTSTREAM_COLORPRIMARIES
Definition inputstream.h:339
INPUTSTREAM_COLORRANGE
Definition inputstream.h:403
INPUTSTREAM_COLORSPACE
Definition inputstream.h:268
INPUTSTREAM_COLORTRC
Definition inputstream.h:430
INPUTSTREAM_TYPE
Definition inputstream.h:164
void SetMask(uint32_t mask) const
Set of supported capabilities.
Definition Inputstream.h:226
uint32_t GetMask() const
Get of supported capabilities.
Definition Inputstream.h:229
void SetMaxCll(uint64_t value)
Set the maximum content light level (MaxCLL).
Definition Inputstream.h:468
uint64_t GetMaxCll()
Get the maximum content light level (MaxCLL).
Definition Inputstream.h:471
bool operator==(const kodi::addon::InputstreamContentlightMetadata &right) const
Metadata class compare.
Definition Inputstream.h:457
void SetMaxFall(uint64_t value)
Set the maximum frame average light level (MaxFALL).
Definition Inputstream.h:477
uint64_t GetMaxFall()
Get the maximum frame average light level (MaxFALL).
Definition Inputstream.h:480
unsigned int GetHeight() const
To get with SetHeight changed values.
Definition Inputstream.h:826
void SetHeight(unsigned int height)
Height of the stream reported by the demuxer.
Definition Inputstream.h:823
unsigned int GetBitRate() const
To get with SetBitRate changed values.
Definition Inputstream.h:866
void SetColorPrimaries(INPUTSTREAM_COLORPRIMARIES colorPrimaries)
Chromaticity coordinates of the source primaries. These values match the ones defined by ISO/IEC 2300...
Definition Inputstream.h:928
unsigned int GetFpsScale() const
To get with SetFpsScale changed values.
Definition Inputstream.h:810
void SetPhysicalIndex(unsigned int id)
(required) Physical index.
Definition Inputstream.h:730
void SetExtraData(const uint8_t *extraData, size_t extraSize)
Additional data where can needed on streams.
Definition Inputstream.h:749
void SetChannels(unsigned int channels)
(required) Amount of channels.
Definition Inputstream.h:847
void SetFpsScale(unsigned int fpsScale)
Scale of 1000 and a rate of 29970 will result in 29.97 fps.
Definition Inputstream.h:807
void SetFpsRate(unsigned int fpsRate)
Rate to use for stream.
Definition Inputstream.h:815
INPUTSTREAM_COLORTRC GetColorTransferCharacteristic() const
To get with SetColorTransferCharacteristic changed values.
Definition Inputstream.h:945
void ClearContentLightMetadata()
Clear content light static Metadata.
Definition Inputstream.h:993
void SetMasteringMetadata(const kodi::addon::InputstreamMasteringMetadata &masteringMetadata)
Mastering static Metadata.
Definition Inputstream.h:958
const kodi::addon::InputstreamContentlightMetadata & GetContentLightMetadata() const
To get with SetContentLightMetadata changed values.
Definition Inputstream.h:987
void SetCodecName(const std::string &codecName)
(required) Name of codec according to ffmpeg.
Definition Inputstream.h:696
void SetFlags(uint32_t flags)
Set supported flags of inputstream.
Definition Inputstream.h:671
void SetStreamType(INPUTSTREAM_TYPE streamType)
Set the wanted stream type.
Definition Inputstream.h:655
const kodi::addon::InputstreamMasteringMetadata & GetMasteringMetadata() const
To get with SetMasteringMetadata changed values.
Definition Inputstream.h:965
void ClearExtraData()
Clear additional data.
Definition Inputstream.h:786
unsigned int GetWidth() const
To get with SetWidth changed values.
Definition Inputstream.h:834
void SetColorRange(INPUTSTREAM_COLORRANGE colorRange)
Color range if available.
Definition Inputstream.h:920
const kodi::addon::StreamCryptoSession & GetCryptoSession() const
To get with GetCryptoSession changed values.
Definition Inputstream.h:899
unsigned int GetFpsRate() const
To get with SetFpsRate changed values.
Definition Inputstream.h:818
void SetCodecInternalName(const std::string &codecName)
(optional) Internal name of codec (selectionstream info).
Definition Inputstream.h:707
unsigned int GetBitsPerSample() const
To get with SetBitsPerSample changed values.
Definition Inputstream.h:877
void SetCryptoSession(const kodi::addon::StreamCryptoSession &cryptoSession)
To set stream crypto session information.
Definition Inputstream.h:891
void ClearMasteringMetadata()
Clear mastering static Metadata.
Definition Inputstream.h:971
void SetCodecProfile(STREAMCODEC_PROFILE codecProfile)
(optional) The profile of the codec.
Definition Inputstream.h:719
float GetAspect() const
To get with SetAspect changed values.
Definition Inputstream.h:842
void ClearDvccMetadata()
Clear DVCC metadata.
Definition Inputstream.h:1010
void SetBitRate(unsigned int bitRate)
Bit rate.
Definition Inputstream.h:863
std::string GetCodecName() const
To get with SetCodecName changed values.
Definition Inputstream.h:702
void SetExtraData(const std::vector< uint8_t > &extraData)
Additional data where can needed on streams.
Definition Inputstream.h:738
STREAMCODEC_PROFILE GetCodecProfile() const
To get with SetCodecProfile changed values.
Definition Inputstream.h:725
void SetColorTransferCharacteristic(INPUTSTREAM_COLORTRC colorTransferCharacteristic)
Color Transfer Characteristic. These values match the ones defined by ISO/IEC 23001-8_2013 § 7....
Definition Inputstream.h:939
unsigned int GetChannels() const
To get with SetChannels changed values.
Definition Inputstream.h:850
unsigned int GetSampleRate() const
To get with SetSampleRate changed values.
Definition Inputstream.h:858
void SetName(const std::string &name)
(optional) Name of the stream, leave empty for default handling.
Definition Inputstream.h:679
void SetAspect(float aspect)
Display aspect of stream.
Definition Inputstream.h:839
std::string GetName() const
To get with SetName changed values.
Definition Inputstream.h:685
uint32_t GetFeatures() const
To get with SetFeatures changed values.
Definition Inputstream.h:666
void SetLanguage(const std::string &language)
RFC 5646 language code (empty string if undefined).
Definition Inputstream.h:796
void SetContentLightMetadata(const kodi::addon::InputstreamContentlightMetadata &contentLightMetadata)
Content light static Metadata.
Definition Inputstream.h:979
unsigned int GetCodecFourCC() const
To get with SetCodecFourCC changed values.
Definition Inputstream.h:907
void SetColorSpace(INPUTSTREAM_COLORSPACE colorSpace)
Definition of colorspace.
Definition Inputstream.h:912
void SetSampleRate(unsigned int sampleRate)
(required) Sample rate.
Definition Inputstream.h:855
void SetCodecFourCC(unsigned int codecFourCC)
Codec If available, the fourcc code codec.
Definition Inputstream.h:904
unsigned int GetBlockAlign() const
To get with SetBlockAlign changed values.
Definition Inputstream.h:885
void SetBitsPerSample(unsigned int bitsPerSample)
(required) Bits per sample.
Definition Inputstream.h:871
void SetBlockAlign(unsigned int blockAlign)
To set the necessary stream block alignment size.
Definition Inputstream.h:882
const std::vector< uint8_t > & GetExtraData()
To get with SetExtraData changed values.
Definition Inputstream.h:763
unsigned int GetPhysicalIndex() const
To get with SetPhysicalIndex changed values.
Definition Inputstream.h:733
void SetWidth(unsigned int width)
Width of the stream reported by the demuxer.
Definition Inputstream.h:831
void SetDvccMetadata(const kodi::addon::InputstreamDvccMetadata &dvccMetadata)
Set Dolby Vision Configuration Constraint (DVCC) metadata.
Definition Inputstream.h:998
std::string GetLanguage() const
To get with SetLanguage changed values.
Definition Inputstream.h:802
uint32_t GetFlags() const
To get with SetFeatures changed values.
Definition Inputstream.h:674
INPUTSTREAM_COLORRANGE GetColorRange() const
To get with SetColorRange changed values.
Definition Inputstream.h:923
std::string GetCodecInternalName() const
To get with SetCodecInternalName changed values.
Definition Inputstream.h:714
INPUTSTREAM_COLORPRIMARIES GetColorPrimaries() const
To get with SetColorPrimaries changed values.
Definition Inputstream.h:934
bool CompareExtraData(const uint8_t *extraData, size_t extraSize) const
Compare extra data from outside with class.
Definition Inputstream.h:773
INPUTSTREAM_COLORSPACE GetColorSpace() const
To get with SetColorSpace changed values.
Definition Inputstream.h:915
size_t GetExtraDataSize()
To get size with SetExtraData changed values.
Definition Inputstream.h:766
INPUTSTREAM_TYPE GetStreamType() const
To get with SetStreamType changed values.
Definition Inputstream.h:658
void SetFeatures(uint32_t features)
Set special supported feature flags of inputstream.
Definition Inputstream.h:663
const kodi::addon::InputstreamDvccMetadata & GetDvccMetadata() const
Get DVCC metadata previously set with SetDvccMetadata.
Definition Inputstream.h:1007
double GetPrimaryG_ChromaticityX()
Get the chromaticity X coordinates of the green value.
Definition Inputstream.h:330
double GetLuminanceMin()
Get the minimum number of bits of the display.
Definition Inputstream.h:397
double GetPrimaryG_ChromaticityY()
Get the chromaticity Y coordinates of the green value.
Definition Inputstream.h:339
double GetPrimaryR_ChromaticityY()
Get the chromaticity Y coordinates of the red value.
Definition Inputstream.h:321
double GetPrimaryB_ChromaticityY()
Get the chromaticity Y coordinates of the blue value.
Definition Inputstream.h:357
void SetWhitePoint_ChromaticityY(double value)
Set the chromaticity coordinates of the white point in the CIE1931 color space.
Definition Inputstream.h:375
void SetWhitePoint_ChromaticityX(double value)
Set the chromaticity coordinates of the white point in the CIE1931 color space.
Definition Inputstream.h:363
void SetPrimaryB_ChromaticityY(double value)
The chromaticity coordinates of the blue value in the CIE1931 color space.
Definition Inputstream.h:354
double GetLuminanceMax()
Get the maximum number of bits of the display.
Definition Inputstream.h:389
void SetPrimaryG_ChromaticityY(double value)
Set the chromaticity coordinates of the green value in the CIE1931 color space.
Definition Inputstream.h:336
void SetPrimaryR_ChromaticityX(double value)
Set the chromaticity coordinates of the red value in the CIE1931 color space.
Definition Inputstream.h:309
void SetLuminanceMin(double value)
Set the minimum number of bits of the display used to master the content.
Definition Inputstream.h:394
void SetPrimaryG_ChromaticityX(double value)
Set the chromaticity coordinates of the green value in the CIE1931 color space.
Definition Inputstream.h:327
void SetLuminanceMax(double value)
Set the maximum number of bits of the display used to master the content.
Definition Inputstream.h:386
void SetPrimaryR_ChromaticityY(double value)
The chromaticity coordinates of the red value in the CIE1931 color space.
Definition Inputstream.h:318
double GetPrimaryB_ChromaticityX()
Get the chromaticity X coordinates of the blue value.
Definition Inputstream.h:348
double GetWhitePoint_ChromaticityX()
Get the chromaticity X coordinates of the white point.
Definition Inputstream.h:369
void SetPrimaryB_ChromaticityX(double value)
The chromaticity coordinates of the blue value in the CIE1931 color space.
Definition Inputstream.h:345
double GetPrimaryR_ChromaticityX()
Get the chromaticity X coordinates of the red value.
Definition Inputstream.h:312
double GetWhitePoint_ChromaticityY()
Get the chromaticity Y coordinates of the white point.
Definition Inputstream.h:381
bool operator==(const kodi::addon::InputstreamMasteringMetadata &right) const
Metadata class compare.
Definition Inputstream.h:298
double GetPtsEnd() const
To get with SetPtsEnd changed values.
Definition Inputstream.h:1107
void SetPtsStart(double ptsStart) const
Start PTS.
Definition Inputstream.h:1092
void SetStartTime(time_t startTime) const
Start time in milliseconds.
Definition Inputstream.h:1086
void SetPtsBegin(double ptsBegin) const
Begin PTS.
Definition Inputstream.h:1098
double GetPtsStart() const
To get with SetPtsStart changed values.
Definition Inputstream.h:1095
time_t GetStartTime() const
To get with SetStartTime changed values.
Definition Inputstream.h:1089
double GetPtsBegin() const
To get with SetPtsBegin changed values.
Definition Inputstream.h:1101
void SetPtsEnd(double ptsEnd) const
End PTS.
Definition Inputstream.h:1104
STREAMCODEC_PROFILE
Definition stream_codec.h:25
virtual bool OpenStream(int streamid)
Opens a stream for playback.
Definition Inputstream.h:1593
virtual void SetVideoResolution(unsigned int width, unsigned int height, unsigned int maxWidth, unsigned int maxHeight)
Notify current screen resolution and max screen resolution allowed.
Definition Inputstream.h:1679
virtual void EnableStream(int streamid, bool enable)
Enable or disable a stream.
Definition Inputstream.h:1579
virtual bool DemuxSeekTime(double time, bool backwards, double &startpts)
Notify the InputStream addon/demuxer that Kodi wishes to seek the stream by time.
Definition Inputstream.h:1649
void FreeDemuxPacket(DEMUX_PACKET *packet)
Free a packet that was allocated with AllocateDemuxPacket.
Definition Inputstream.h:1725
virtual void DemuxReset()
Reset the demultiplexer in the add-on.
Definition Inputstream.h:1601
DEMUX_PACKET * AllocateEncryptedDemuxPacket(int dataSize, unsigned int encryptedSubsampleCount)
Allocate a encrypted demux packet. Free with FreeDemuxPacket.
Definition Inputstream.h:1711
virtual void DemuxSetSpeed(int speed)
Notify the InputStream addon/demuxer that Kodi wishes to change playback speed.
Definition Inputstream.h:1659
virtual DEMUX_PACKET * DemuxRead()
Read the next packet from the demultiplexer, if there is one.
Definition Inputstream.h:1634
virtual bool GetStream(int streamid, kodi::addon::InputstreamInfo &stream)
Function for giving detailed stream information.
Definition Inputstream.h:1562
virtual void DemuxAbort()
Abort the demultiplexer thread in the add-on.
Definition Inputstream.h:1609
virtual bool GetStreamIds(std::vector< unsigned int > &ids)
Get IDs of available streams.
Definition Inputstream.h:1510
virtual void DemuxFlush()
Flush all data that's currently in the demultiplexer buffer in the add-on.
Definition Inputstream.h:1617
DEMUX_PACKET * AllocateDemuxPacket(int dataSize)
Allocate a demux packet. Free with FreeDemuxPacket.
Definition Inputstream.h:1695
virtual void SetVideoResolution(unsigned int width, unsigned int height)
Notify current screen resolution.
Definition Inputstream.h:1668
virtual bool PosTime(int ms)
Positions inputstream to playing time given in ms.
Definition Inputstream.h:1804
virtual int GetBlockSize()
Obtain the chunk size to use when reading streams.
Definition Inputstream.h:1455
virtual int64_t PositionStream()
The position in the stream that's currently being read.
Definition Inputstream.h:1433
virtual int64_t LengthStream()
The Total length of the stream that's currently being read.
Definition Inputstream.h:1444
virtual int64_t SeekStream(int64_t position, int whence=SEEK_SET)
Seek in a stream.
Definition Inputstream.h:1422
virtual int ReadStream(uint8_t *buffer, unsigned int bufferSize)
Read from an open stream.
Definition Inputstream.h:1401
virtual int GetTotalTime()
Totel time in ms.
Definition Inputstream.h:1749
virtual int GetTime()
Playing time in ms.
Definition Inputstream.h:1759
virtual bool GetTimes(InputstreamTimes &times)
Get current timing values in PTS scale.
Definition Inputstream.h:1783
virtual bool Open(const kodi::addon::InputstreamProperty &props)=0
Open a stream.
CInstanceInputStream(const IInstanceInfo &instance)
Inputstream class constructor used to support multiple instance types.
Definition Inputstream.h:1269
~CInstanceInputStream() override=default
Destructor.
virtual void Close()=0
Close an open stream.
virtual bool IsRealTimeStream()
Check for real-time streaming.
Definition Inputstream.h:1370
virtual void GetCapabilities(kodi::addon::InputstreamCapabilities &capabilities)=0
Get the list of features that this add-on provides.
Definition inputstream.h:735
InputStream add-on capabilities. All capabilities are set to "false" as default.
Definition inputstream.h:95
CONTENTLIGHT Metadata.
Definition inputstream.h:149
Dolby Vision configuration metadata (dvcc)
Definition inputstream.h:502
Array of stream IDs.
Definition inputstream.h:123
stream properties
Definition inputstream.h:538
MASTERING Metadata.
Definition inputstream.h:132
structure of key/value pairs passed to addon on Open()
Definition inputstream.h:104
Definition inputstream.h:633
Definition addon_base.h:268
Definition stream_crypto.h:121