From 2d77a6f5d3beae3b341e4a7f331202bd1a010508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Szczygie=C5=82?= Date: Mon, 17 Oct 2016 17:13:34 +0200 Subject: Add libsimplewebm and libwebm thirdparty libraries --- thirdparty/libsimplewebm/WebMDemuxer.hpp | 125 +++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 thirdparty/libsimplewebm/WebMDemuxer.hpp (limited to 'thirdparty/libsimplewebm/WebMDemuxer.hpp') diff --git a/thirdparty/libsimplewebm/WebMDemuxer.hpp b/thirdparty/libsimplewebm/WebMDemuxer.hpp new file mode 100644 index 0000000000..a45ddb3f26 --- /dev/null +++ b/thirdparty/libsimplewebm/WebMDemuxer.hpp @@ -0,0 +1,125 @@ +/* + MIT License + + Copyright (c) 2016 Błażej Szczygieł + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +#ifndef WEBMDEMUXER_HPP +#define WEBMDEMUXER_HPP + +#include + +namespace mkvparser { + class IMkvReader; + class Segment; + class Cluster; + class Block; + class BlockEntry; + class VideoTrack; + class AudioTrack; +} + +class WebMFrame +{ + WebMFrame(const WebMFrame &); + void operator =(const WebMFrame &); +public: + WebMFrame(); + ~WebMFrame(); + + inline bool isValid() const + { + return bufferSize > 0; + } + + long bufferSize, bufferCapacity; + unsigned char *buffer; + double time; + bool key; +}; + +class WebMDemuxer +{ + WebMDemuxer(const WebMDemuxer &); + void operator =(const WebMDemuxer &); +public: + enum VIDEO_CODEC + { + NO_VIDEO, + VIDEO_VP8, + VIDEO_VP9 + }; + enum AUDIO_CODEC + { + NO_AUDIO, + AUDIO_VORBIS, + AUDIO_OPUS + }; + + WebMDemuxer(mkvparser::IMkvReader *reader, int videoTrack = 0, int audioTrack = 0); + ~WebMDemuxer(); + + inline bool isOpen() const + { + return m_isOpen; + } + inline bool isEOS() const + { + return m_eos; + } + + double getLength() const; + + VIDEO_CODEC getVideoCodec() const; + int getWidth() const; + int getHeight() const; + + AUDIO_CODEC getAudioCodec() const; + const unsigned char *getAudioExtradata(size_t &size) const; // Needed for Vorbis + double getSampleRate() const; + int getChannels() const; + int getAudioDepth() const; + + bool readFrame(WebMFrame *videoFrame, WebMFrame *audioFrame); + +private: + inline bool notSupportedTrackNumber(long videoTrackNumber, long audioTrackNumber) const; + + mkvparser::IMkvReader *m_reader; + mkvparser::Segment *m_segment; + + const mkvparser::Cluster *m_cluster; + const mkvparser::Block *m_block; + const mkvparser::BlockEntry *m_blockEntry; + + int m_blockFrameIndex; + + const mkvparser::VideoTrack *m_videoTrack; + VIDEO_CODEC m_vCodec; + + const mkvparser::AudioTrack *m_audioTrack; + AUDIO_CODEC m_aCodec; + + bool m_isOpen; + bool m_eos; +}; + +#endif // WEBMDEMUXER_HPP -- cgit v1.2.3