summaryrefslogtreecommitdiff
path: root/libdvbmpeg/cpptools.hh
diff options
context:
space:
mode:
authorSascha Volkenandt <sascha@akv-soft.de>2004-01-02 23:13:00 +0100
committerSascha Volkenandt <sascha@akv-soft.de>2004-01-02 23:13:00 +0100
commit4a775c82c82597c65345b3b1fdad71792ef2e486 (patch)
treed3a5fc2a34e6746f8d7ee51e793ff3645bf3e814 /libdvbmpeg/cpptools.hh
downloadvdr-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.hh330
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_
+