diff options
author | David Schleef <ds@schleef.org> | 2003-07-27 05:24:15 +0000 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2003-07-27 05:24:15 +0000 |
commit | d1f62e8a4f976e11634d2f9187821e8686cec76d (patch) | |
tree | 7aeb45681425dc71469510056d67f4aa20d3574b /ext/mplex/inputstrm.hh | |
parent | a10432d76cb431d03e27b97d790d2ba7ae34f4b8 (diff) | |
download | gst-plugins-bad-d1f62e8a4f976e11634d2f9187821e8686cec76d.tar.gz gst-plugins-bad-d1f62e8a4f976e11634d2f9187821e8686cec76d.tar.bz2 gst-plugins-bad-d1f62e8a4f976e11634d2f9187821e8686cec76d.zip |
Moved to gst-libs/ext/mplex
Original commit message from CVS:
Moved to gst-libs/ext/mplex
Diffstat (limited to 'ext/mplex/inputstrm.hh')
-rw-r--r-- | ext/mplex/inputstrm.hh | 278 |
1 files changed, 0 insertions, 278 deletions
diff --git a/ext/mplex/inputstrm.hh b/ext/mplex/inputstrm.hh deleted file mode 100644 index a4247495..00000000 --- a/ext/mplex/inputstrm.hh +++ /dev/null @@ -1,278 +0,0 @@ - -/* - * inptstrm.hh: Input stream classes for MPEG multiplexing - * TODO: Split into the base classes and the different types of - * actual input stream. - * - * Copyright (C) 2001 Andrew Stevens <andrew.stevens@philips.com> - * - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public License - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef __INPUTSTRM_H__ -#define __INPUTSTRM_H__ - -#include <config.h> -#include <stdio.h> -#include <vector> -#include <sys/stat.h> - -#include "mjpeg_types.h" -#include "mpegconsts.h" -#include "format_codes.h" -#include "mjpeg_logging.h" - -#include "mplexconsts.hh" -#include "bits.hh" -#include "aunit.hh" -#include "vector.hh" -#include "buffer.hh" - - -class InputStream -{ -public: - InputStream (IBitStream & istream):bs (istream), - eoscan (false), stream_length (0), last_buffered_AU (0), decoding_order (0), old_frames (0) - { - } - - void SetBufSize (unsigned int buf_size) - { - bs.SetBufSize (buf_size); - } - -protected: - IBitStream & bs; - bool eoscan; - bitcount_t stream_length; - off_t file_length; - - unsigned int last_buffered_AU; // decode seq num of last buffered frame + 1 - bitcount_t AU_start; - uint32_t syncword; - bitcount_t prev_offset; - unsigned int decoding_order; - unsigned int old_frames; - -}; - -// -// Abstract forward reference... -// - -class OutputStream; - - -class MuxStream -{ -public: - MuxStream (); - - void Init (const int strm_id, - const unsigned int _buf_scale, - const unsigned int buf_size, - const unsigned int _zero_stuffing, const bool bufs_in_first, const bool always_bufs); - - unsigned int BufferSizeCode (); - inline unsigned int BufferSize () - { - return buffer_size; - } - inline unsigned int BufferScale () - { - return buffer_scale; - } - - - inline void SetMaxPacketData (unsigned int max) - { - max_packet_data = max; - } - inline void SetMinPacketData (unsigned int min) - { - min_packet_data = min; - } - inline unsigned int MaxPacketData () - { - return max_packet_data; - } - inline unsigned int MinPacketData () - { - return min_packet_data; - } - inline bool NewAUNextSector () - { - return new_au_next_sec; - } - - // - // Read the next packet payload (sub-stream headers plus - // parsed and spliced stream data) for a packet with the - // specified payload capacity. Update the AU info. - // - - virtual unsigned int ReadPacketPayload (uint8_t * dst, unsigned int to_read) = 0; - - // - // Return the size of the substream headers... - // - virtual unsigned int StreamHeaderSize () - { - return 0; - } - -public: // TODO should go protected once encapsulation complete - int stream_id; - unsigned int buffer_scale; - unsigned int buffer_size; - BufferModel bufmodel; - unsigned int max_packet_data; - unsigned int min_packet_data; - unsigned int zero_stuffing; - unsigned int nsec; - bool buffers_in_header; - bool always_buffers_in_header; - bool new_au_next_sec; - bool init; -}; - -class DummyMuxStream:public MuxStream -{ -public: - DummyMuxStream (const int strm_id, const unsigned int buf_scale, unsigned int buf_size) - { - stream_id = strm_id; - buffer_scale = buf_scale; - buffer_size = buf_size; - } - - unsigned int ReadPacketPayload (uint8_t * dst, unsigned int to_read) - { - abort (); - return 0; - } -}; - - -class ElementaryStream:public InputStream, public MuxStream -{ -public: - enum stream_kind - { audio, video, dummy }; - ElementaryStream (IBitStream & ibs, OutputStream & into, stream_kind kind); - virtual void Close () = 0; - - bool NextAU (); - Aunit *Lookahead (); - unsigned int BytesToMuxAUEnd (unsigned int sector_transport_size); - bool MuxCompleted (); - virtual bool MuxPossible (clockticks currentSCR); - void DemuxedTo (clockticks SCR); - void SetTSOffset (clockticks baseTS); - void AllDemuxed (); - inline stream_kind Kind () - { - return kind; - } - inline int BufferMin () - { - return buffer_min; - } - inline int BufferMax () - { - return buffer_max; - } - inline clockticks RequiredDTS () - { - return au->DTS + timestamp_delay; - }; - inline clockticks RequiredPTS () - { - return au->PTS + timestamp_delay; - }; - inline clockticks NextRequiredDTS () - { - Aunit *next = Lookahead (); - - if (next != 0) - return next->DTS + timestamp_delay; - else - return 0; - }; - inline clockticks NextRequiredPTS () - { - Aunit *next = Lookahead (); - - if (next != 0) - return next->PTS + timestamp_delay; - else - return 0; - }; - - void UpdateBufferMinMax (); - - void SetSyncOffset (clockticks timestamp_delay); - - - inline bool BuffersInHeader () - { - return buffers_in_header; - } - virtual unsigned int NominalBitRate () = 0; - virtual bool RunOutComplete () = 0; - virtual void OutputSector () = 0; - - virtual unsigned int ReadPacketPayload (uint8_t * dst, unsigned int to_read); - - -protected: - virtual void FillAUbuffer (unsigned int frames_to_buffer) = 0; - virtual void InitAUbuffer () = 0; - virtual bool AUBufferNeedsRefill () = 0; - AUStream aunits; - void Muxed (unsigned int bytes_muxed); - -public: // TODO should go protected once encapsulation complete - // N.b. currently length=0 is used to indicate an ended - // stream. - // au itself should simply disappear - Aunit * au; - clockticks timestamp_delay; - -protected: - unsigned int au_unsent; - Aunit *next (); - - OutputStream & muxinto; - stream_kind kind; - int buffer_min; - int buffer_max; - int FRAME_CHUNK; - -}; - - - -#endif // __INPUTSTRM_H__ - - -/* - * Local variables: - * c-file-style: "stroustrup" - * tab-width: 4 - * indent-tabs-mode: nil - * End: - */ |