Gnash  0.8.11dev
MediaParser.h
Go to the documentation of this file.
1 // MediaParser.h: Base class for media parsers
2 //
3 // Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016
4 // Free Software Foundation, Inc.
5 //
6 // This program is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 3 of the License, or
9 // (at your option) any later version.
10 //
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software
18 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 
20 #ifndef GNASH_MEDIAPARSER_H
21 #define GNASH_MEDIAPARSER_H
22 
23 #include <atomic>
24 #include <thread>
25 #include <mutex>
26 #include <condition_variable>
27 #include <memory>
28 #include <deque>
29 #include <map>
30 #include <vector>
31 #include <iostream> // for output operator
32 #include <boost/optional.hpp>
33 
34 #include "IOChannel.h" // for inlines
35 #include "dsodefs.h" // DSOEXPORT
36 
37 // Undefine this to load/parse media files in main thread
38 #define LOAD_MEDIA_IN_A_SEPARATE_THREAD 1
39 
40 namespace gnash {
41  class SimpleBuffer;
42  namespace media {
43  struct Id3Info;
44  }
45 }
46 
47 namespace gnash {
48 namespace media {
49 
50 
53 {
55  KEY_FRAME = 1,
56 
59 
61  DIS_INTER_FRAME = 3
62 };
63 
66 {
69 
72 };
73 
76 {
79 
82 
85 
88 
91 
94 
97 
98  // NOTE: if you add more elements here remember to
99  // also add them to the output operator!
100 };
101 
102 DSOEXPORT std::ostream& operator<< (std::ostream& os, const videoCodecType& t);
103 
105 //
123 {
125  //
136 
138  //
149 
151  //
165 
168 
170  //
175 
177  //
182 
185 
187  AUDIO_CODEC_SPEEX = 11
188 
189  // NOTE: if you add more elements here remember to
190  // also add them to the output operator!
191 };
192 
193 inline std::ostream&
194 operator<< (std::ostream& os, const audioCodecType& t)
195 {
196  switch (t)
197  {
198  case AUDIO_CODEC_RAW:
199  os << "Raw";
200  break;
201  case AUDIO_CODEC_ADPCM:
202  os << "ADPCM";
203  break;
204  case AUDIO_CODEC_MP3:
205  os << "MP3";
206  break;
208  os << "Uncompressed";
209  break;
211  os << "Nellymoser 8Hz mono";
212  break;
214  os << "Nellymoser";
215  break;
216  case AUDIO_CODEC_AAC:
217  os << "Advanced Audio Coding";
218  break;
219  case AUDIO_CODEC_SPEEX:
220  os << "Speex";
221  break;
222  default:
223  os << "unknown/invalid codec " << static_cast<int>(t);
224  break;
225  }
226  return os;
227 }
228 
230 //
237 {
238 
239 public:
240 
242  //
267  AudioInfo(int codeci, std::uint16_t sampleRatei,
268  std::uint16_t sampleSizei, bool stereoi,
269  std::uint64_t durationi, codecType typei)
270  :
271  codec(codeci),
272  sampleRate(sampleRatei),
273  sampleSize(sampleSizei),
274  stereo(stereoi),
275  duration(durationi),
276  type(typei)
277  {
278  }
279 
281  //
286  int codec;
287 
288  std::uint16_t sampleRate;
289 
291  std::uint16_t sampleSize;
292 
293  bool stereo;
294 
295  std::uint64_t duration;
296 
298 
300  //
304  class ExtraInfo {
305  public:
306  virtual ~ExtraInfo() {}
307  };
308 
310  //
313  std::unique_ptr<ExtraInfo> extra;
314 };
315 
317 //
323 {
324 public:
325 
327  //
354  VideoInfo(int codeci, std::uint16_t widthi, std::uint16_t heighti,
355  std::uint16_t frameRatei, std::uint64_t durationi,
356  codecType typei)
357  :
358  codec(codeci),
359  width(widthi),
360  height(heighti),
361  frameRate(frameRatei),
362  duration(durationi),
363  type(typei)
364  {
365  }
366 
367  int codec;
368  std::uint16_t width;
369  std::uint16_t height;
370  std::uint16_t frameRate;
371  std::uint64_t duration;
373 
375  //
379  class ExtraInfo {
380  public:
381  virtual ~ExtraInfo() {}
382  };
383 
385  //
388  std::unique_ptr<ExtraInfo> extra;
389 };
390 
391 DSOEXPORT std::ostream& operator << (std::ostream& os, const VideoInfo& vi);
392 
393 
395 
396 public:
397  virtual ~EncodedExtraData() {}
398 
399 };
400 
403 {
404 public:
405 
407  //
420  EncodedVideoFrame(std::uint8_t* data, std::uint32_t size,
421  unsigned int frameNum,
422  std::uint64_t timestamp=0)
423  :
424  _size(size),
425  _data(data),
426  _frameNum(frameNum),
427  _timestamp(timestamp)
428  {}
429 
431  const std::uint8_t* data() const { return _data.get(); }
432 
434  std::uint32_t dataSize() const { return _size; }
435 
437  std::uint64_t timestamp() const { return _timestamp; }
438 
440  unsigned frameNum() const { return _frameNum; }
441 
442  // FIXME: should have better encapsulation for this sort of stuff.
443  std::unique_ptr<EncodedExtraData> extradata;
444 private:
445 
446  std::uint32_t _size;
447  std::unique_ptr<std::uint8_t[]> _data;
448  unsigned int _frameNum;
449  std::uint64_t _timestamp;
450 };
451 
454 {
455 public:
456  std::uint32_t dataSize;
457  std::unique_ptr<std::uint8_t[]> data;
458  std::uint64_t timestamp;
459 
460  // FIXME: should have better encapsulation for this sort of stuff.
461  std::unique_ptr<EncodedExtraData> extradata;
462 };
463 
465 //
473 {
474 public:
475 
477  //
479  typedef std::multimap<std::uint64_t, std::shared_ptr<SimpleBuffer> >
481 
482  typedef std::vector<MetaTags::mapped_type> OrderedMetaTags;
483 
484  MediaParser(std::unique_ptr<IOChannel> stream);
485 
486  // Classes with virtual methods (virtual classes)
487  // must have a virtual destructor, or the destructors
488  // of subclasses will never be invoked, tipically resulting
489  // in memory leaks..
490  //
491  virtual ~MediaParser();
492 
496  //
503  virtual bool seek(std::uint32_t& time)=0;
504 
506  //
514  DSOEXPORT std::uint64_t getBufferLength() const;
515 
517  //
519  DSOEXPORT bool isBufferEmpty() const;
520 
522  DSOEXPORT std::uint_fast64_t getBufferTime() const
523  {
524  return _bufferTime.load();
525  }
526 
528  //
532  DSOEXPORT void setBufferTime(std::uint_fast64_t t)
533  {
534  _bufferTime=t;
535  }
536 
538  //
544  DSOEXPORT bool nextFrameTimestamp(std::uint64_t& ts) const;
545 
547  //
553  DSOEXPORT bool nextVideoFrameTimestamp(std::uint64_t& ts) const;
554 
556  //
562  DSOEXPORT std::unique_ptr<EncodedVideoFrame> nextVideoFrame();
563 
565  //
571  DSOEXPORT bool nextAudioFrameTimestamp(std::uint64_t& ts) const;
572 
574  //
580  DSOEXPORT std::unique_ptr<EncodedAudioFrame> nextAudioFrame();
581 
583  //
587  VideoInfo* getVideoInfo() { return _videoInfo.get(); }
588 
590  //
594  AudioInfo* getAudioInfo() { return _audioInfo.get(); }
595 
597  //
603  bool parsingCompleted() const { return _parsingComplete; }
604 
606  //
613  virtual bool indexingCompleted() const { return true; }
614 
616  virtual std::uint64_t getBytesLoaded() const { return 0; }
617 
619  std::uint64_t getBytesTotal() const
620  {
621  return _stream->size();
622  }
623 
625  //
633  virtual bool parseNextChunk()=0;
634 
636  //
641  //
644  virtual void fetchMetaTags(OrderedMetaTags& tags, std::uint64_t ts);
645 
647  //
649  virtual boost::optional<Id3Info> getId3Info() const;
650 
651 protected:
652 
654 
656  std::unique_ptr<VideoInfo> _videoInfo;
657 
659  std::unique_ptr<AudioInfo> _audioInfo;
660 
663 
665  std::atomic<std::uint_fast64_t> _bytesLoaded;
666 
668 
670  void startParserThread();
671 
673  //
679  void stopParserThread();
680 
682  void clearBuffers();
683 
685  //
688  void pushEncodedAudioFrame(std::unique_ptr<EncodedAudioFrame> frame);
689 
691  //
694  void pushEncodedVideoFrame(std::unique_ptr<EncodedVideoFrame> frame);
695 
697  std::unique_ptr<IOChannel> _stream;
698  mutable std::mutex _streamMutex;
699 
708  void parserLoop();
709 
711  {
712  return _parserThreadKillRequested.load();
713  }
714 
715  std::atomic<std::uint_fast64_t> _bufferTime;
716 
717  std::thread _parserThread;
718  std::atomic<bool> _parserThreadKillRequested;
719  std::condition_variable _parserThreadWakeup;
720 
726  void waitIfNeeded(std::unique_lock<std::mutex>& qMutexLock);
727 
729 
731  mutable std::mutex _qMutex;
732 
734  //
740  bool bufferFull() const;
741 
746 
747 private:
748 
749  typedef std::deque<std::unique_ptr<EncodedVideoFrame>> VideoFrames;
750  typedef std::deque<std::unique_ptr<EncodedAudioFrame>> AudioFrames;
751 
753  //
758  const EncodedVideoFrame* peekNextVideoFrame() const;
759 
761  //
766  const EncodedAudioFrame* peekNextAudioFrame() const;
767 
768 
770  //
773  VideoFrames _videoFrames;
774 
776  //
779  AudioFrames _audioFrames;
780 
781  void requestParserThreadKill()
782  {
783  _parserThreadKillRequested=true;
784  _parserThreadWakeup.notify_all();
785  }
786 
788  std::uint64_t audioBufferLength() const;
789 
791  std::uint64_t videoBufferLength() const;
792 
794  std::uint64_t getBufferLengthNoLock() const;
795 
796 };
797 
798 
799 } // gnash.media namespace
800 } // namespace gnash
801 
802 #endif // __MEDIAPARSER_H__
gnash::media::MediaParser::getVideoInfo
VideoInfo * getVideoInfo()
Returns a VideoInfo class about the videostream.
Definition: MediaParser.h:587
gnash::media::videoFrameType
videoFrameType
Video frame types.
Definition: MediaParser.h:53
gnash::media::MediaParser::MediaParser
MediaParser(std::unique_ptr< IOChannel > stream)
Definition: MediaParser.cpp:37
gnash::media::MediaParser::parseNextChunk
virtual bool parseNextChunk()=0
Parse next chunk of input.
gnash::media::MediaParser::getBufferLength
DSOEXPORT std::uint64_t getBufferLength() const
Returns mininum length of available buffers in milliseconds.
Definition: MediaParser.cpp:59
gnash::media::MediaParser::_parserThreadWakeup
std::condition_variable _parserThreadWakeup
Definition: MediaParser.h:719
gnash::media::AUDIO_CODEC_ADPCM
@ AUDIO_CODEC_ADPCM
ADPCM format.
Definition: MediaParser.h:148
gnash::media::AudioInfo::sampleRate
std::uint16_t sampleRate
Definition: MediaParser.h:288
gnash::media::VideoInfo::ExtraInfo::~ExtraInfo
virtual ~ExtraInfo()
Definition: MediaParser.h:381
gnash::media::MediaParser::_audioInfo
std::unique_ptr< AudioInfo > _audioInfo
Info about the audio stream (if any)
Definition: MediaParser.h:659
gnash::media::operator<<
std::ostream & operator<<(std::ostream &os, const VideoInfo &vi)
Definition: MediaParser.cpp:432
dsodefs.h
gnash::media::MediaParser::_qMutex
std::mutex _qMutex
mutex protecting access to the a/v encoded frames queues
Definition: MediaParser.h:731
gnash::media::NO_VIDEO_CODEC
@ NO_VIDEO_CODEC
No video codec.
Definition: MediaParser.h:78
gnash::log_debug
void log_debug(StringType msg, Args... args)
Definition: log.h:301
gnash::media::MediaParser::nextFrameTimestamp
DSOEXPORT bool nextFrameTimestamp(std::uint64_t &ts) const
Get timestamp of the next frame available, if any.
Definition: MediaParser.cpp:145
gnash::media::MediaParser::getId3Info
virtual boost::optional< Id3Info > getId3Info() const
Get ID3 data from the parsed stream if it exists.
Definition: MediaParser.cpp:78
gnash::media::AudioInfo::ExtraInfo::~ExtraInfo
virtual ~ExtraInfo()
Definition: MediaParser.h:306
gnash::key::i
@ i
Definition: GnashKey.h:155
gnash::media::MediaParser::_parsingComplete
bool _parsingComplete
Whether the parsing is complete or not.
Definition: MediaParser.h:662
gnash::media::MediaParser::startParserThread
void startParserThread()
}@
Definition: MediaParser.cpp:50
gnash::media::MediaParser::isBufferEmpty
DSOEXPORT bool isBufferEmpty() const
Return true if both audio and video buffers are empty.
Definition: MediaParser.cpp:69
gnash::media::codecType
codecType
The type of the codec id passed in the AudioInfo or VideoInfo class.
Definition: MediaParser.h:66
_
#define _(String)
Definition: log.h:44
gnash::media::MediaParser::waitIfNeeded
void waitIfNeeded(std::unique_lock< std::mutex > &qMutexLock)
Definition: MediaParser.cpp:377
gnash::media::VIDEO_CODEC_VP6A
@ VIDEO_CODEC_VP6A
On2 VP6 Alpha video codec.
Definition: MediaParser.h:90
gnash::media::VIDEO_CODEC_SCREENVIDEO
@ VIDEO_CODEC_SCREENVIDEO
Screenvideo codec.
Definition: MediaParser.h:84
gnash
Anonymous namespace for callbacks, local functions, event handlers etc.
Definition: dbus_ext.cpp:41
gnash::media::VIDEO_CODEC_H263
@ VIDEO_CODEC_H263
H263/SVQ3 video codec.
Definition: MediaParser.h:81
gnash::media::AudioInfo::codec
int codec
Codec identifier.
Definition: MediaParser.h:286
gnash::media::MediaParser
The MediaParser class provides cursor-based access to encoded media frames.
Definition: MediaParser.h:473
gnash::media::AudioInfo::stereo
bool stereo
Definition: MediaParser.h:293
gnash::media::EncodedAudioFrame::extradata
std::unique_ptr< EncodedExtraData > extradata
Definition: MediaParser.h:461
gnash::media::EncodedExtraData
Definition: MediaParser.h:394
gnash::media::KEY_FRAME
@ KEY_FRAME
Key frames.
Definition: MediaParser.h:55
gnash::media::MediaParser::nextVideoFrameTimestamp
DSOEXPORT bool nextVideoFrameTimestamp(std::uint64_t &ts) const
Get timestamp of the video frame which would be returned on nextVideoFrame.
Definition: MediaParser.cpp:185
gnash::media::VideoInfo
Information about a video stream.
Definition: MediaParser.h:323
gnash::media::AUDIO_CODEC_NELLYMOSER_8HZ_MONO
@ AUDIO_CODEC_NELLYMOSER_8HZ_MONO
Proprietary simple format. Always 5Khz mono ?
Definition: MediaParser.h:174
gnash::media::EncodedAudioFrame
An encoded audio frame.
Definition: MediaParser.h:454
gnash::media::VideoInfo::extra
std::unique_ptr< ExtraInfo > extra
Extra info about video stream, if when needed.
Definition: MediaParser.h:388
gnash::media::MediaParser::nextAudioFrame
DSOEXPORT std::unique_ptr< EncodedAudioFrame > nextAudioFrame()
Returns the next audio frame in the parsed buffer, advancing audio cursor.
Definition: MediaParser.cpp:220
gnash::media::MediaParser::_bytesLoaded
std::atomic< std::uint_fast64_t > _bytesLoaded
Number of bytes loaded.
Definition: MediaParser.h:665
gnash::media::AUDIO_CODEC_SPEEX
@ AUDIO_CODEC_SPEEX
Always 16kHz mono.
Definition: MediaParser.h:187
ts
std::uint32_t ts
Definition: LocalConnection_as.cpp:150
gnash::media::MediaParser::getAudioInfo
AudioInfo * getAudioInfo()
Returns a AudioInfo class about the audiostream.
Definition: MediaParser.h:594
gnash::media::MediaParser::_bufferTime
std::atomic< std::uint_fast64_t > _bufferTime
Definition: MediaParser.h:715
gnash::media::MediaParser::_parserThread
std::thread _parserThread
Definition: MediaParser.h:717
gnash::media::VIDEO_CODEC_H264
@ VIDEO_CODEC_H264
MPEG-4 Part 10, or Advanced Video Coding.
Definition: MediaParser.h:96
gnash::media::VideoInfo::frameRate
std::uint16_t frameRate
Definition: MediaParser.h:370
gnash::log_error
void log_error(StringType msg, Args... args)
Definition: log.h:283
Id3Info.h
gnash::media::EncodedVideoFrame::extradata
std::unique_ptr< EncodedExtraData > extradata
Definition: MediaParser.h:443
gnash::media::AUDIO_CODEC_MP3
@ AUDIO_CODEC_MP3
MP3 format.
Definition: MediaParser.h:164
gnash::media::AudioInfo::duration
std::uint64_t duration
Definition: MediaParser.h:295
gnash::media::EncodedExtraData::~EncodedExtraData
virtual ~EncodedExtraData()
Definition: MediaParser.h:397
gnash::media::MediaParser::setBufferTime
DSOEXPORT void setBufferTime(std::uint_fast64_t t)
Set the time we want the parser thread to maintain in the buffer.
Definition: MediaParser.h:532
gnash::media::EncodedVideoFrame::data
const std::uint8_t * data() const
Return pointer to actual data. Ownership retained by this class.
Definition: MediaParser.h:431
gnash::media::AUDIO_CODEC_UNCOMPRESSED
@ AUDIO_CODEC_UNCOMPRESSED
Linear PCM, strictly little-endian.
Definition: MediaParser.h:167
gnash::media::MediaParser::_parserThreadKillRequested
std::atomic< bool > _parserThreadKillRequested
Definition: MediaParser.h:718
gnash::media::MediaParser::pushEncodedVideoFrame
void pushEncodedVideoFrame(std::unique_ptr< EncodedVideoFrame > frame)
Push an encoded video frame to buffer.
Definition: MediaParser.cpp:339
gnash::media::VideoInfo::VideoInfo
VideoInfo(int codeci, std::uint16_t widthi, std::uint16_t heighti, std::uint16_t frameRatei, std::uint64_t durationi, codecType typei)
Construct a VideoInfo object.
Definition: MediaParser.h:354
gnash::media::MediaParser::fetchMetaTags
virtual void fetchMetaTags(OrderedMetaTags &tags, std::uint64_t ts)
Retrieve any parsed metadata tags up to a specified timestamp.
Definition: MediaParser.cpp:426
gnash::media::DIS_INTER_FRAME
@ DIS_INTER_FRAME
Disposable interlaced frames.
Definition: MediaParser.h:61
gnash::media::MediaParser::parserThreadKillRequested
bool parserThreadKillRequested() const
Definition: MediaParser.h:710
gnash::key::t
@ t
Definition: GnashKey.h:166
gnash::media::EncodedVideoFrame::timestamp
std::uint64_t timestamp() const
Return video frame presentation timestamp.
Definition: MediaParser.h:437
GnashSleep.h
gnash::media::INTER_FRAME
@ INTER_FRAME
Interlaced frames.
Definition: MediaParser.h:58
gnash::media::EncodedVideoFrame::dataSize
std::uint32_t dataSize() const
Return size of data buffer.
Definition: MediaParser.h:434
gnash::media::AUDIO_CODEC_RAW
@ AUDIO_CODEC_RAW
Signed Linear PCM, unspecified byte order.
Definition: MediaParser.h:135
gnash::media::VIDEO_CODEC_VP6
@ VIDEO_CODEC_VP6
On2 VP6 video codec.
Definition: MediaParser.h:87
gnash::media::MediaParser::parserLoop
void parserLoop()
Definition: MediaParser.cpp:408
gnash::media::MediaParser::nextVideoFrame
DSOEXPORT std::unique_ptr< EncodedVideoFrame > nextVideoFrame()
Returns the next video frame in the parsed buffer, advancing video cursor.
Definition: MediaParser.cpp:197
gnash::media::MediaParser::seek
virtual bool seek(std::uint32_t &time)=0
Seeks to the closest possible position the given position, and returns the new position.
gnash::media::audioCodecType
audioCodecType
Audio codec ids as defined in flash.
Definition: MediaParser.h:123
gnash::media::MediaParser::_stream
std::unique_ptr< IOChannel > _stream
The stream used to access the file.
Definition: MediaParser.h:697
gnash::media::VideoInfo::type
codecType type
Definition: MediaParser.h:372
gnash::media::AUDIO_CODEC_NELLYMOSER
@ AUDIO_CODEC_NELLYMOSER
Proprietary simple format.
Definition: MediaParser.h:181
gnash::media::MediaParser::getBytesLoaded
virtual std::uint64_t getBytesLoaded() const
Return number of bytes parsed so far.
Definition: MediaParser.h:616
gnash::media::MediaParser::~MediaParser
virtual ~MediaParser()
Definition: MediaParser.cpp:280
gnash::media::AudioInfo::sampleSize
std::uint16_t sampleSize
Size of each sample, in bytes.
Definition: MediaParser.h:291
gnash::media::VideoInfo::ExtraInfo
Extra info about a video stream.
Definition: MediaParser.h:379
gnash::media::MediaParser::bufferFull
bool bufferFull() const
Method to check if buffer is full w/out locking the _qMutex.
Definition: MediaParser.cpp:396
gnash::media::EncodedAudioFrame::timestamp
std::uint64_t timestamp
Definition: MediaParser.h:458
gnash::media::AUDIO_CODEC_AAC
@ AUDIO_CODEC_AAC
Advanced Audio Coding.
Definition: MediaParser.h:184
MediaParser.h
gnash::media::MediaParser::_videoInfo
std::unique_ptr< VideoInfo > _videoInfo
Subclasses must set the following variables:
Definition: MediaParser.h:656
gnash::media::CODEC_TYPE_FLASH
@ CODEC_TYPE_FLASH
The internal flash codec ids.
Definition: MediaParser.h:68
gnash::media::MediaParser::MetaTags
std::multimap< std::uint64_t, std::shared_ptr< SimpleBuffer > > MetaTags
A container for executable MetaTags contained in media streams.
Definition: MediaParser.h:480
gnash::media::VideoInfo::height
std::uint16_t height
Definition: MediaParser.h:369
gnash::media::EncodedVideoFrame::EncodedVideoFrame
EncodedVideoFrame(std::uint8_t *data, std::uint32_t size, unsigned int frameNum, std::uint64_t timestamp=0)
Create an encoded video frame.
Definition: MediaParser.h:420
gnash::media::AudioInfo::extra
std::unique_ptr< ExtraInfo > extra
Extra info about audio stream, if when needed.
Definition: MediaParser.h:313
gnash::media::EncodedVideoFrame::frameNum
unsigned frameNum() const
Return video frame number.
Definition: MediaParser.h:440
gnash::media::AudioInfo
Information about an audio stream.
Definition: MediaParser.h:237
gnash::media::VideoInfo::duration
std::uint64_t duration
Definition: MediaParser.h:371
gnash::media::EncodedVideoFrame
An encoded video frame.
Definition: MediaParser.h:403
gnash::media::MediaParser::clearBuffers
void clearBuffers()
Clear the a/v buffers.
Definition: MediaParser.cpp:286
log.h
gnash::media::MediaParser::nextAudioFrameTimestamp
DSOEXPORT bool nextAudioFrameTimestamp(std::uint64_t &ts) const
Get timestamp of the audio frame which would be returned on nextAudioFrame.
Definition: MediaParser.cpp:243
gnash::gnashSleep
void gnashSleep(time_t useconds)
Sleep compatibly for the specified number of microseconds.
Definition: GnashSleep.h:35
gnash::media::VideoInfo::codec
int codec
Definition: MediaParser.h:367
gnash::media::videoCodecType
videoCodecType
Video codec ids as defined in flash.
Definition: MediaParser.h:76
gnash::media::MediaParser::wakeupParserThread
void wakeupParserThread()
gnash::media::EncodedAudioFrame::dataSize
std::uint32_t dataSize
Definition: MediaParser.h:456
gnash::media::VideoInfo::width
std::uint16_t width
Definition: MediaParser.h:368
gnash::media::EncodedAudioFrame::data
std::unique_ptr< std::uint8_t[]> data
Definition: MediaParser.h:457
gnash::media::AudioInfo::AudioInfo
AudioInfo(int codeci, std::uint16_t sampleRatei, std::uint16_t sampleSizei, bool stereoi, std::uint64_t durationi, codecType typei)
Construct an AudioInfo object.
Definition: MediaParser.h:267
DSOEXPORT
#define DSOEXPORT
Definition: dsodefs.h:55
gnash::media::MediaParser::OrderedMetaTags
std::vector< MetaTags::mapped_type > OrderedMetaTags
Definition: MediaParser.h:482
gnash::media::MediaParser::parsingCompleted
bool parsingCompleted() const
Return true of parsing is completed.
Definition: MediaParser.h:603
gnash::media::MediaParser::indexingCompleted
virtual bool indexingCompleted() const
Return true of indexing is completed.
Definition: MediaParser.h:613
gnash::media::MediaParser::_seekRequest
bool _seekRequest
Definition: MediaParser.h:745
gnash::media::CODEC_TYPE_CUSTOM
@ CODEC_TYPE_CUSTOM
Custom codecs ids.
Definition: MediaParser.h:71
gnash::media::MediaParser::_streamMutex
std::mutex _streamMutex
Definition: MediaParser.h:698
IOChannel.h
gnash::key::e
@ e
Definition: GnashKey.h:151
gnash::media::AudioInfo::type
codecType type
Definition: MediaParser.h:297
gnash::media::MediaParser::pushEncodedAudioFrame
void pushEncodedAudioFrame(std::unique_ptr< EncodedAudioFrame > frame)
Push an encoded audio frame to buffer.
Definition: MediaParser.cpp:299
gnash::media::MediaParser::stopParserThread
void stopParserThread()
Stop the parser thread.
Definition: MediaParser.cpp:271
gnash::media::AudioInfo::ExtraInfo
Extra info about an audio stream.
Definition: MediaParser.h:304
gnash::media::VIDEO_CODEC_SCREENVIDEO2
@ VIDEO_CODEC_SCREENVIDEO2
Screenvideo2 codec.
Definition: MediaParser.h:93
gnash::media::MediaParser::getBytesTotal
std::uint64_t getBytesTotal() const
Return total number of bytes in input.
Definition: MediaParser.h:619
gnash::media::MediaParser::getBufferTime
DSOEXPORT std::uint_fast64_t getBufferTime() const
Return the time we want the parser thread to maintain in the buffer.
Definition: MediaParser.h:522