diff options
author | Sascha Volkenandt <sascha@akv-soft.de> | 2004-01-02 23:13:00 +0100 |
---|---|---|
committer | Sascha Volkenandt <sascha@akv-soft.de> | 2004-01-02 23:13:00 +0100 |
commit | 4a775c82c82597c65345b3b1fdad71792ef2e486 (patch) | |
tree | d3a5fc2a34e6746f8d7ee51e793ff3645bf3e814 /libdvbmpeg/cpptools.hh | |
download | vdr-plugin-osdpip-0.0.1.tar.gz vdr-plugin-osdpip-0.0.1.tar.bz2 |
Release version 0.0.1v0.0.1
- Initial revision.
Diffstat (limited to 'libdvbmpeg/cpptools.hh')
-rw-r--r-- | libdvbmpeg/cpptools.hh | 330 |
1 files changed, 330 insertions, 0 deletions
diff --git a/libdvbmpeg/cpptools.hh b/libdvbmpeg/cpptools.hh new file mode 100644 index 0000000..49ea5de --- /dev/null +++ b/libdvbmpeg/cpptools.hh @@ -0,0 +1,330 @@ +/* + * dvb-mpegtools for the Siemens Fujitsu DVB PCI card + * + * Copyright (C) 2000, 2001 Marcus Metzler + * for convergence integrated media GmbH + * Copyright (C) 2002 Marcus Metzler + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + + * 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. + * Or, point your browser to http://www.gnu.org/copyleft/gpl.html + * + + * The author can be reached at mocm@metzlerbros.de, + */ + +#include <fstream> +#include <sstream> +#include <iostream> +#include <iomanip> +using namespace std; + + +#ifndef _CPPTOOLS_HH_ +#define _CPPTOOLS_HH_ + +#include "ctools.h" + + +class PES_Packet{ + int info; + pes_packet p; +public: + PES_Packet(){ + info = 0; + init_pes(&p); + } + + ~PES_Packet(){ + if (p.pack_header) + delete [] p.pack_header; + if (p.pes_ext) + delete [] p.pes_ext; + if (p.pes_pckt_data) + delete [] p.pes_pckt_data; + if (p.mpeg1_headr) + delete [] p.mpeg1_headr; + } + + inline void init(){ + if (p.pack_header) + delete [] p.pack_header; + if (p.pes_ext) + delete [] p.pes_ext; + if (p.pes_pckt_data) + delete [] p.pes_pckt_data; + if (p.mpeg1_headr) + delete [] p.mpeg1_headr; + + info = 0; + init_pes(&p); + } + + inline pes_packet *P(){ + return &p; + } + + inline void setlength(){ + setlength_pes(&p); + if (p.length) + p.pes_pckt_data = new uint8_t[p.length]; + } + + inline void Nlength(){ + nlength_pes(&p); + p.pes_pckt_data = new uint8_t[p.length]; + } + + + inline uint8_t &Stream_ID(){ + return p.stream_id; + } + + inline uint8_t &Flags1(){ + return p.flags1; + } + + inline uint8_t &Flags2(){ + return p.flags2; + } + + inline uint32_t &Length(){ + return p.length; + } + + inline uint8_t &HLength(){ + return p.pes_hlength; + } + + inline uint8_t &Stuffing(){ + return p.stuffing; + } + + inline uint8_t *Data(){ + return p.pes_pckt_data; + } + + inline int has_pts(){ + return (p.flags2 & PTS_DTS); + } + + inline int &MPEG(){ + return p.mpeg; + } + inline uint8_t *PTS(){ + return p.pts; + } + + inline uint8_t *DTS(){ + return p.dts; + } + + inline int &Info(){ + return info; + } + + + + inline uint8_t high_pts(){ + if (has_pts()) + return ((p.pts[0] & 0x08)>>3); + else + return 0; + } + + inline uint8_t high_dts(){ + return ((p.dts[0] & 0x08)>>3); + } + + inline int WDTS(){ + int w_dts; + w_dts = (int)trans_pts_dts(p.dts); + return w_dts; + } + + inline int WPTS(){ + int w_dts; + w_dts = (int)trans_pts_dts(p.pts); + return w_dts; + } + + friend ostream & operator << (ostream & stream, PES_Packet & x); + friend istream & operator >> (istream & stream, PES_Packet & x); + +}; + + +class TS_Packet{ + ts_packet p; + int info; + +public: + TS_Packet(){ + init_ts(&p); + info = 0; + } + + ~TS_Packet(){ + if (p.priv_dat) + delete [] p.priv_dat; + } + + inline void init(){ + if (p.priv_dat) + delete [] p.priv_dat; + + init_ts(&p); + info = 0; + } + + inline ts_packet *P(){ + return &p; + } + + inline int &Rest(){ + return p.rest; + } + + inline uint8_t *Data(){ + return p.data; + } + + inline short PID(){ + return pid_ts(&p); + } + + inline uint8_t FLAG1(){ + return (p.pid[0] & ~PID_MASK_HI); + } + + inline int &Info(){ + return info; + } + + friend ostream & operator << (ostream & stream, TS_Packet & x); + friend istream & operator >> (istream & stream, TS_Packet & x); +}; + + +class PS_Packet{ + int info; + ps_packet p; +public: + + PS_Packet(){ + init_ps(&p); + info = 0; + } + + ~PS_Packet(){ + if (p.data) + delete [] p.data; + } + + inline void init(){ + if (p.data) + delete [] p.data; + + init_ps(&p); + info = 0; + } + + inline ps_packet *P(){ + return &p; + } + + inline int MUX(){ + return mux_ps(&p); + } + + inline int Rate(){ + return rate_ps(&p); + } + + inline void setlength(){ + setlength_ps(&p); + p.data = new uint8_t[p.sheader_length]; + } + + inline int Stuffing(){ + return p.stuff_length & PACK_STUFF_MASK; + } + + inline int NPES(){ + return p.npes; + } + + inline int &MPEG(){ + return p.mpeg; + } + + inline uint8_t &operator()(int l){ + return p.data[l]; + } + + inline char * Data() { + return (char *)p.data+p.stuff_length; + } + + inline int &SLENGTH(){ + return p.sheader_length; + } + + inline int &Info(){ + return info; + } + + uint32_t SCR_base(){ + return scr_base_ps(&p); + } + + uint16_t SCR_ext(){ + return scr_ext_ps(&p); + } + + friend ostream & operator << (ostream & stream, PS_Packet & x); + friend istream & operator >> (istream & stream, PS_Packet & x); +}; + + +typedef void (* FILTER)(istream &in, ostream &out); + +typedef struct thread_args_{ + FILTER function; + int *fd; + int in; + int out; +} thread_args; + + +void extract_audio_from_PES(istream &in, ostream &out); +void extract_video_from_PES(istream &in, ostream &out); +void extract_es_audio_from_PES(istream &in, ostream &out); +void extract_es_video_from_PES(istream &in, ostream &out); +int TS_PIDS(istream &in, ostream &out); +int ifilter (istream &in, FILTER function); +int ofilter (istream &in, FILTER function); +int itfilter (int in, FILTER function); +int otfilter (istream &in, FILTER function); +int stream_type(int fd); +int stream_type(istream &stream); +int tv_norm(istream &fin); + +void analyze(istream &fin); + + +#endif //_CPPTOOLS_HH_ + |