Index: media/formats/mp2t/mp2t_stream_parser.h |
diff --git a/media/formats/mp2t/mp2t_stream_parser.h b/media/formats/mp2t/mp2t_stream_parser.h |
index dd8beb74ffdd5b5882ef79a03e6bc4c9c05e1677..7234a81f1e7c16b355af337edfb36b96fb473450 100644 |
--- a/media/formats/mp2t/mp2t_stream_parser.h |
+++ b/media/formats/mp2t/mp2t_stream_parser.h |
@@ -15,17 +15,21 @@ |
#include "base/memory/scoped_ptr.h" |
#include "media/base/audio_decoder_config.h" |
#include "media/base/byte_queue.h" |
+#include "media/base/decrypt_config.h" |
#include "media/base/media_export.h" |
#include "media/base/stream_parser.h" |
#include "media/base/video_decoder_config.h" |
#include "media/formats/mp2t/timestamp_unroller.h" |
+#include "media/media_features.h" |
namespace media { |
+class DecryptConfig; |
class StreamParserBuffer; |
namespace mp2t { |
+class Descriptors; |
class PidState; |
class MEDIA_EXPORT Mp2tStreamParser : public StreamParser { |
@@ -46,7 +50,8 @@ class MEDIA_EXPORT Mp2tStreamParser : public StreamParser { |
bool Parse(const uint8_t* buf, int size) override; |
private: |
- typedef std::map<int, PidState*> PidMap; |
+ using PidMap = std::map<int, PidState*>; |
+ using PidMapElement = std::pair<int, PidState*>; |
struct BufferQueueWithConfig { |
BufferQueueWithConfig(bool is_cfg_sent, |
@@ -69,7 +74,11 @@ class MEDIA_EXPORT Mp2tStreamParser : public StreamParser { |
// Possible values for |stream_type| are defined in: |
// ISO-13818.1 / ITU H.222 Table 2.34 "Stream type assignments". |
// |pes_pid| is part of the Program Map Table refered by |pmt_pid|. |
- void RegisterPes(int pmt_pid, int pes_pid, int stream_type); |
+ // Some stream types are qualified by additional |descriptors|. |
+ void RegisterPes(int pmt_pid, |
+ int pes_pid, |
+ int stream_type, |
+ const Descriptors& descriptors); |
// Since the StreamParser interface allows only one audio & video streams, |
// an automatic PID filtering should be applied to select the audio & video |
@@ -96,6 +105,24 @@ class MEDIA_EXPORT Mp2tStreamParser : public StreamParser { |
scoped_refptr<StreamParserBuffer> stream_parser_buffer); |
bool EmitRemainingBuffers(); |
+#if BUILDFLAG(ENABLE_HLS_SAMPLE_AES) |
+ // Register the parser for CA Table. |
+ PidMap::iterator RegisterCat(); |
+ void UnregisterCat(); |
+ |
+ // Register the PIDs for the Cenc packets (CENC-ECM and CENC-PSSH). |
+ void RegisterCencPids(int ca_pid, int pssh_pid); |
+ void UnregisterCencPids(); |
+ |
+ // Register the DecryptConfig (parsed from CENC-ECM). |
+ void RegisterDecryptConfig(const DecryptConfig& config); |
+ |
+ // Register the PSSH (parsed from CENC-PSSH). |
+ void RegisterPsshBoxes(const std::vector<uint8_t>& init_data); |
+ |
+ const DecryptConfig* GetDecryptConfig() { return decrypt_config_.get(); } |
+#endif |
+ |
// List of callbacks. |
InitCB init_cb_; |
NewConfigCB config_cb_; |
@@ -133,6 +160,10 @@ class MEDIA_EXPORT Mp2tStreamParser : public StreamParser { |
// So the unroller is global between PES pids. |
TimestampUnroller timestamp_unroller_; |
+#if BUILDFLAG(ENABLE_HLS_SAMPLE_AES) |
+ scoped_ptr<DecryptConfig> decrypt_config_; |
+#endif |
+ |
DISALLOW_COPY_AND_ASSIGN(Mp2tStreamParser); |
}; |