1 /***************************************************************************
2     \file ADM_avsproxy.h
3     \author (C) 2007-2010 by mean  fixounet@free.fr
4 
5  ***************************************************************************/
6 
7 /***************************************************************************
8  *                                                                         *
9  *   This program is free software; you can redistribute it and/or modify  *
10  *   it under the terms of the GNU General Public License as published by  *
11  *   the Free Software Foundation; either version 2 of the License, or     *
12  *   (at your option) any later version.                                   *
13  *                                                                         *
14  ***************************************************************************/
15 #ifndef AVS_PROXY_H
16 #define AVS_PROXY_H
17 #include "ADM_Video.h"
18 #include "ADM_audioStream.h"
19 #include "ADM_avsproxy_net.h"
20 #define AVS_PROXY_DUMMY_FILE "::ADM_AVS_PROXY::" // warning this is duplicated in main app
21 /**
22     \fn ADM_avsAccess
23 */
24 class ADM_avsAccess : public ADM_audioAccess
25 {
26 protected:
27 
28                 avsNet           *network;
29                 WAVHeader        *wavHeader;
30                 uint64_t         duration;
31                 uint64_t         nextSample;
32                 uint8_t          *audioBuffer;
33                 uint64_t         sampleToTime(uint64_t sample);
34                 void             increment(uint64_t sample);
35 public:
36                                   ADM_avsAccess(avsNet *net, WAVHeader *wav,uint64_t duration);
37                 virtual           ~ADM_avsAccess();
38                                     /// Hint, the stream is pure CBR (AC3,MP2,MP3)
isCBR(void)39                 virtual bool      isCBR(void) { return true;}
40                                     /// Return true if the demuxer can seek in time
canSeekTime(void)41                 virtual bool      canSeekTime(void) {return true;};
42                                     /// Return true if the demuxer can seek by offser
canSeekOffset(void)43                 virtual bool      canSeekOffset(void) {return false;};
44                                     /// Return true if we can have the audio duration
canGetDuration(void)45                 virtual bool      canGetDuration(void) {return true;};
46                                     /// Returns audio duration in us
47                 virtual uint64_t  getDurationInUs(void);
48                                     /// Go to a given time
49                 virtual bool      goToTime(uint64_t timeUs);
50                 virtual bool      getPacket(uint8_t *buffer, uint32_t *size, uint32_t maxSize,uint64_t *dts);
getExtraData(uint32_t * l,uint8_t ** d)51                 bool              getExtraData(uint32_t *l, uint8_t **d){*l=0;*d=NULL;return true;};
52 };
53 /**
54     \class avsHeader
55 */
56 class avsHeader         :public vidHeader
57 {
58     protected:
59         uint64_t                    frameToTime(uint32_t frame);
60         avsNet                      network;
61         WAVHeader                   wavHeader;
62         bool                        haveAudio;
63         ADM_audioStream             *audioStream;
64         ADM_avsAccess               *audioAccess;
65     public:
66 
67 
Dump(void)68         virtual   void 				Dump(void) {};
69 
70                                     avsHeader( void );
71                                     ~avsHeader(  );
72 // AVI io
73         virtual 	uint8_t			open(const char *name);
74         virtual 	uint8_t			close(void) ;
75   //__________________________
76   //				 Info
77   //__________________________
78 
79   //__________________________
80   //				 Audio
81   //__________________________
82 
getAudioInfo(uint32_t i)83 virtual 	WAVHeader              *getAudioInfo(uint32_t i )
84                                     {
85                                         if(true==haveAudio)
86                                             return &wavHeader;
87                                         return NULL;
88                                     };
getAudioStream(uint32_t i,ADM_audioStream ** audio)89 virtual 	uint8_t                 getAudioStream(uint32_t i,ADM_audioStream  **audio)
90                                     {
91                                             *audio=NULL;
92                                             if(false==haveAudio) return 0;
93                                             if(i) return 0;
94                                             *audio= audioStream;
95                                             return true;
96                                     }
getNbAudioStreams(void)97 virtual     uint8_t                 getNbAudioStreams(void)
98                                     {
99                                         if(true==haveAudio)
100                                                 return 1;
101                                         return 0;
102                                     }
103 
104   //__________________________
105   //				 video
106   //__________________________
107  virtual uint8_t                    setFlag(uint32_t frame,uint32_t flags);
108  virtual uint32_t                   getFlags(uint32_t frame,uint32_t *flags);
109  virtual uint8_t                    getFrame(uint32_t framenum,ADMCompressedImage *img);
110  virtual uint64_t                   getTime(uint32_t frame);
111          uint8_t                    getExtraHeaderData(uint32_t *len, uint8_t **data);
112  virtual uint64_t                   getVideoDuration(void);
113 
114 virtual   bool                      getPtsDts(uint32_t frame,uint64_t *pts,uint64_t *dts);
115 virtual   bool                      setPtsDts(uint32_t frame,uint64_t pts,uint64_t dts);
116 
providePts(void)117           bool                      providePts(void) {return true;};
118 virtual   uint8_t                   getFrameSize(uint32_t frame,uint32_t *size);
119 };
120 #endif
121 //EOF
122