⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 systems.hpp

📁 Motion JPEG编解码器源代码
💻 HPP
字号:
/* *  interact.h:  Program/System stream packet generator * *  Copyright (C) 2003 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 __SYSTEMS_HH__#define __SYSTEMS_HH__#include "inputstrm.hpp"#include "outputstrm.hpp"#include <vector>using std::vector;/* Buffer size parameters */#define MAX_SECTOR_SIZE         16384#define MAX_PACK_HEADER_SIZE	255#define MAX_SYS_HEADER_SIZE     255typedef struct sector_struc	/* Ein Sektor, kann Pack, Sys Header	*//* und Packet enthalten.		*/{   unsigned char  buf [MAX_SECTOR_SIZE] ;  unsigned int   length_of_packet_data ;  //clockticks TS                ;} Sector_struc;struct Pack_struc	/* Pack Info				*/{     uint8_t buf[MAX_PACK_HEADER_SIZE];    int length;    clockticks SCR;};struct Sys_header_struc	/* System Header Info			*/{       uint8_t buf[MAX_SYS_HEADER_SIZE];    int length;};class PS_Stream{public:    PS_Stream( unsigned _mpeg,               unsigned int _sector_size,               OutputStream &_output_strm,                off_t max_segment_size // 0 = No Limit        );    virtual ~PS_Stream();    unsigned int PacketPayload( MuxStream &strm,                                Sys_header_struc *sys_header,                                 Pack_struc *pack_header,                                 int buffers, int PTSstamp, int DTSstamp );    unsigned int CreateSector (Pack_struc	 	 *pack,                               Sys_header_struc *sys_header,                               unsigned int     max_packet_data_size,                               MuxStream        &strm,                               bool 	 buffers,                               bool      end_marker,                               clockticks   	 PTS,                               clockticks   	 DTS,                               uint8_t 	 timestamps        );    static void BufferSectorHeader( uint8_t *buf,                             Pack_struc	 	 *pack,                             Sys_header_struc *sys_header,                             uint8_t *&header_end );    static void BufferPacketHeader( uint8_t *buf,                                    uint8_t type,                                    unsigned int mpeg_version,                                    bool buffers,                                    unsigned int buffer_size,                                    uint8_t buffer_scale,                                    clockticks   	 PTS,                                    clockticks   	 DTS,                                    uint8_t 	 timestamps,                                    unsigned int min_pes_hdr_len,                                    uint8_t     *&size_field,                                    uint8_t     *&header_end );        static inline void     BufferPacketSize( uint8_t *size_field, uint8_t *packet_end )        {            unsigned int packet_size = packet_end-size_field-2;            size_field[0] = static_cast<uint8_t>(packet_size>>8);            size_field[1] = static_cast<uint8_t>(packet_size&0xff);        }    virtual void CreatePack ( Pack_struc	 *pack,                      clockticks   SCR,                      unsigned int 	 mux_rate        );    virtual void CreateSysHeader ( Sys_header_struc *sys_header,                           unsigned int	 rate_bound,                           bool	 fixed,                           int	     CSPS,                           bool	 audio_lock,                           bool	 video_lock,                           vector<MuxStream *> &streams        );    inline int Open() { return output_strm.Open(); }    inline void Close() { output_strm.Close(); }    inline void RawWrite(uint8_t *data, unsigned int len)        {            return output_strm.Write( data, len );        }    inline void NextSegment() { output_strm.NextSegment(); }    bool SegmentLimReached();private:    static void     BufferDtsPtsMpeg1ScrTimecode (clockticks    timecode,                                  uint8_t  marker,                                  uint8_t *&buffer);    static void BufferMpeg2ScrTimecode( clockticks    timecode,                                        uint8_t *&buffer);    void BufferPaddingPacket( int padding,                              uint8_t *&buffer );private:    OutputStream &output_strm;     unsigned int mpeg_version;    unsigned int sector_size;    off_t max_segment_size;    uint8_t *sector_buf;};#endif // __SYSTEMS_HH__/*  * Local variables: *  c-file-style: "stroustrup" *  tab-width: 4 *  indent-tabs-mode: nil * End: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -