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