vlc | branch: master | Francois Cartegnie <fcvlc...@free.fr> | Sat Oct 15 12:46:29 2016 +0200| [65d21dd5fa50f061b3e43ab92544109ee2010a3d] | committer: Francois Cartegnie
demux: hls: add support for stream metadata > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=65d21dd5fa50f061b3e43ab92544109ee2010a3d --- modules/demux/Makefile.am | 3 ++- modules/demux/hls/HLSStreams.cpp | 35 +++++++++++++++++++++++++++-------- modules/demux/hls/HLSStreams.hpp | 7 ++++++- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/modules/demux/Makefile.am b/modules/demux/Makefile.am index b9eb51c..22a2051 100644 --- a/modules/demux/Makefile.am +++ b/modules/demux/Makefile.am @@ -416,7 +416,8 @@ libadaptive_hls_SOURCES = \ demux/hls/HLSManager.cpp \ demux/hls/HLSStreams.hpp \ demux/hls/HLSStreams.cpp -libadaptive_hls_SOURCES += meta_engine/ID3Tag.h +libadaptive_hls_SOURCES += meta_engine/ID3Tag.h \ + meta_engine/ID3Meta.h libadaptive_smooth_SOURCES = \ demux/smooth/mp4/IndexReader.cpp \ diff --git a/modules/demux/hls/HLSStreams.cpp b/modules/demux/hls/HLSStreams.cpp index 1d065f4..aaea520 100644 --- a/modules/demux/hls/HLSStreams.cpp +++ b/modules/demux/hls/HLSStreams.cpp @@ -23,10 +23,12 @@ #include "HLSStreams.hpp" #include <vlc_demux.h> +#include <vlc_meta.h> extern "C" { #include "../meta_engine/ID3Tag.h" + #include "../meta_engine/ID3Meta.h" } using namespace hls; @@ -35,6 +37,14 @@ HLSStream::HLSStream(demux_t *demux) : AbstractStream(demux) { b_id3_timestamps_offset_set = false; + p_meta = vlc_meta_New(); + b_meta_updated = false; +} + +HLSStream::~HLSStream() +{ + if(p_meta) + vlc_meta_Delete(p_meta); } void HLSStream::setTimeOffset(mtime_t i_offset) @@ -92,7 +102,7 @@ AbstractDemuxer * HLSStream::createDemux(const StreamFormat &format) return ret; } -int HLSStream::ID3PrivTagHandler(const uint8_t *p_payload, size_t i_payload) +int HLSStream::ParseID3PrivTag(const uint8_t *p_payload, size_t i_payload) { if(i_payload == 53 && !memcmp( p_payload, "com.apple.streaming.transportStreamTimestamp", 45)) @@ -103,21 +113,22 @@ int HLSStream::ID3PrivTagHandler(const uint8_t *p_payload, size_t i_payload) setTimeOffset(i_aac_offset); b_id3_timestamps_offset_set = true; } - return VLC_EGENERIC; /* stop parsing */ } return VLC_SUCCESS; } -static int ID3TAG_Parse_Handler(uint32_t i_tag, const uint8_t *p_payload, size_t i_payload, void *p_priv) +int HLSStream::ParseID3Tag(uint32_t i_tag, const uint8_t *p_payload, size_t i_payload) { - HLSStream *hlsstream = static_cast<HLSStream *>(p_priv); - - if(i_tag == VLC_FOURCC('P', 'R', 'I', 'V')) - return hlsstream->ID3PrivTagHandler(p_payload, i_payload); - + (void) ID3HandleTag(p_payload, i_payload, i_tag, p_meta, &b_meta_updated); return VLC_SUCCESS; } +int HLSStream::ID3TAG_Parse_Handler(uint32_t i_tag, const uint8_t *p_payload, size_t i_payload, void *p_priv) +{ + HLSStream *hlsstream = static_cast<HLSStream *>(p_priv); + return hlsstream->ParseID3Tag(i_tag, p_payload, i_payload); +} + block_t * HLSStream::checkBlock(block_t *p_block, bool b_first) { if(b_first && p_block && @@ -135,6 +146,14 @@ block_t * HLSStream::checkBlock(block_t *p_block, bool b_first) } } + if( b_meta_updated ) + { + b_meta_updated = false; + AbstractCommand *command = commandsqueue->factory()->createEsOutMetaCommand( -1, p_meta ); + if( command ) + commandsqueue->Schedule( command ); + } + return p_block; } diff --git a/modules/demux/hls/HLSStreams.hpp b/modules/demux/hls/HLSStreams.hpp index a74d989..ab067f7 100644 --- a/modules/demux/hls/HLSStreams.hpp +++ b/modules/demux/hls/HLSStreams.hpp @@ -30,7 +30,7 @@ namespace hls { public: HLSStream(demux_t *); - int ID3PrivTagHandler( const uint8_t *, size_t ); + virtual ~HLSStream(); protected: virtual AbstractDemuxer * createDemux(const StreamFormat &); /* reimpl */ @@ -38,7 +38,12 @@ namespace hls virtual block_t *checkBlock(block_t *, bool); /* reimpl */ private: + static int ID3TAG_Parse_Handler(uint32_t, const uint8_t *, size_t, void *); + int ParseID3Tag(uint32_t, const uint8_t *, size_t); + int ParseID3PrivTag(const uint8_t *, size_t); bool b_id3_timestamps_offset_set; + vlc_meta_t *p_meta; + bool b_meta_updated; }; class HLSStreamFactory : public AbstractStreamFactory _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits