1 /***************************************************************************
2                           Base class for Mpeg Demuxer
3                              -------------------
4 
5     copyright            : (C) 2005--2008 by mean
6     email                : fixounet@free.fr
7  ***************************************************************************/
8 
9 /***************************************************************************
10  *                                                                         *
11  *   This program is free software; you can redistribute it and/or modify  *
12  *   it under the terms of the GNU General Public License as published by  *
13  *   the Free Software Foundation; either version 2 of the License, or     *
14  *   (at your option) any later version.                                   *
15  *                                                                         *
16  ***************************************************************************/
17 
18  #ifndef DMX_DMX
19  #define DMX_DMX
20 
21 #include "ADM_coreDemuxerMpeg6_export.h"
22 #include "dmx_io.h"
23 
24 #include "dmx_indexer.h"
25 
26 typedef enum
27 {
28   DMX_PAYLOAD_ERROR=0,
29   DMX_PAYLOAD_MPEG2=1,
30   DMX_PAYLOAD_MPEG4,
31   DMX_PAYLOAD_H264
32 }dmx_payloadType;
33 /**
34     \class dmx_demuxer
35     \brief low level mpeg demuxer, also used for the hack called MS-DVR
36 
37 */
38 class ADM_COREDEMUXER6_EXPORT dmx_demuxer
39  {
40   protected :
41 
42     uint64_t  _size;
43     uint8_t   _lastErr;   // Very important : The derivated signals an error using that!
44 
45   public:
46                             dmx_demuxer();
47     virtual                 ~dmx_demuxer();
48 
49     virtual uint8_t         open(const char *name)=0;
hasAudio(void)50     virtual uint8_t         hasAudio(void) { return 0;}
51 
52     virtual uint8_t         forward(uint32_t f)=0;
53     virtual uint8_t         stamp(void)=0;
54     virtual uint64_t        elapsed(void)=0;
55 
56     virtual uint8_t         getPos( uint64_t *abs,uint64_t *rel)=0;
57     virtual uint8_t         setPos( uint64_t abs,uint64_t  rel)=0;
58 
getSize(void)59     virtual uint64_t        getSize( void) { return _size;}
60     virtual uint8_t         getStats(uint64_t *stat)=0;
getAllPTS(uint64_t * stat)61     virtual uint8_t         getAllPTS(uint64_t *stat) {return 0;};
62 
63     virtual uint32_t        read(uint8_t *w,uint32_t len)=0;
64     virtual uint8_t	        read8i(void)=0;
65     virtual uint16_t        read16i(void)=0;
66     virtual uint32_t        read32i(void)=0;
67 
syncH264(uint8_t * stream,uint64_t * abs,uint64_t * r,uint64_t * pts,uint64_t * dts)68     virtual uint8_t         syncH264( uint8_t *stream,uint64_t *abs,uint64_t *r,uint64_t *pts, uint64_t *dts) {return 0;};
69 
70     virtual uint8_t         sync( uint8_t *stream,uint64_t *abs,uint64_t *r,uint64_t *pts, uint64_t *dts)=0;
changePid(uint32_t pid,uint32_t pes)71     virtual uint8_t         changePid(uint32_t pid,uint32_t pes) {return 0;}
72     // Read a PES packet
readPes(uint8_t * data,uint32_t * pesBlockLen,uint32_t * dts,uint32_t * pts)73     virtual uint8_t         readPes(uint8_t *data, uint32_t *pesBlockLen, uint32_t *dts,uint32_t *pts) {return 0;}
74 };
75 
76 
77 #endif
78