1 /*************************************************************************** 2 ADM_pics.h - description 3 ------------------- 4 begin : Mon Jun 3 2002 5 copyright : (C) 2002/2009 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 ADM_ASF_H 19 #define ADM_ASF_H 20 #include <vector> 21 using std::vector; 22 #include "ADM_Video.h" 23 //#include "ADM_queue.h" 24 25 26 #define ASF_MAX_AUDIO_TRACK 8 27 28 #define WTV_CHUNK_SIZE (0x40*0x1000) 29 30 class wtvHeader; 31 32 typedef enum 33 { 34 ADM_CHUNK_WTV_TIMING_CHUNK, 35 ADM_CHUNK_WTV_DATA_CHUNK, 36 ADM_CHUNK_WTV_STREAM_CHUNK, 37 ADM_CHUNK_WTV_SUBTITLE_CHUNK, 38 ADM_CHUNK_WTV_LANGUAGE_CHUNK, 39 40 ADM_CHUNK_WTV_UNKNOWN_CHUNK 41 }ADM_KNOWN_CHUNK; 42 43 typedef struct 44 { 45 const char *name; 46 uint32_t len; 47 uint8_t val[16]; 48 ADM_KNOWN_CHUNK id; 49 }chunky; 50 51 typedef struct 52 { 53 uint32_t streamIndex; 54 uint32_t extraDataLen; 55 uint8_t *extraData; 56 uint32_t nbPackets; 57 uint32_t length; 58 uint64_t lastDts; 59 WAVHeader wavHeader; 60 }wtvAudioTrak; 61 62 /** 63 \class wtvAudioAccess 64 \brief Audio access class for asf/wmv 65 */ 66 class wtvAudioAccess : public ADM_audioAccess 67 { 68 protected: 69 uint32_t _myRank; 70 char *myName; 71 uint32_t _streamId; 72 uint32_t _dataStart; 73 FILE *_fd; 74 //ADM_queue readQueue; 75 uint32_t _packetSize; 76 class wtvHeader *_father; 77 wtvAudioTrak *_track; 78 public: 79 wtvAudioAccess(wtvHeader *father,uint32_t rank); 80 virtual ~wtvAudioAccess(); 81 canSeekTime(void)82 virtual bool canSeekTime(void) {return true;}; canSeekOffset(void)83 virtual bool canSeekOffset(void) {return true;}; canGetDuration(void)84 virtual bool canGetDuration(void) {return true;}; 85 getLength(void)86 virtual uint32_t getLength(void) {return _track->length;} 87 virtual bool goToTime(uint64_t timeUs) ; isCBR(void)88 virtual bool isCBR(void) {return true;}; 89 90 91 virtual uint64_t getPos(void); 92 virtual bool setPos(uint64_t pos); 93 virtual uint64_t getDurationInUs(void) ; 94 95 virtual bool getPacket(uint8_t *buffer, uint32_t *size, uint32_t maxSize,uint64_t *dts); 96 97 }; 98 99 /** 100 \class wtvHeader 101 \brief Asf Demuxer 102 */ 103 104 class wtvHeader :public vidHeader 105 { 106 protected: 107 uint64_t _duration; // Duration 100 ns 108 protected: 109 110 FILE *_fd; 111 112 int32_t _videoIndex; 113 uint32_t _videoStreamId; 114 115 uint8_t close(void); 116 117 118 public: // Shared with audio track 119 char *myName; 120 121 uint32_t nbImage; 122 uint32_t _nbAudioTrack; 123 wtvAudioAccess *_audioAccess[ASF_MAX_AUDIO_TRACK]; 124 wtvAudioTrak _allAudioTracks[ASF_MAX_AUDIO_TRACK]; 125 ADM_audioStream *_audioStreams[ASF_MAX_AUDIO_TRACK]; 126 // / Shared 127 public: 128 wtvHeader(void); 129 virtual ~wtvHeader(); 130 uint8_t open(const char *name); 131 //__________________________ 132 // Audio 133 //__________________________ 134 135 virtual WAVHeader *getAudioInfo(uint32_t i ) ; 136 virtual uint8_t getAudioStream(uint32_t i,ADM_audioStream **audio); 137 virtual uint8_t getNbAudioStreams(void); 138 // Frames 139 //__________________________ 140 // video 141 //__________________________ 142 143 virtual uint8_t setFlag(uint32_t frame,uint32_t flags); 144 virtual uint32_t getFlags(uint32_t frame,uint32_t *flags); 145 virtual uint8_t getFrameSize(uint32_t frame,uint32_t *size); 146 virtual uint8_t getFrame(uint32_t framenum,ADMCompressedImage *img); 147 148 virtual void Dump(void); 149 virtual uint64_t getTime(uint32_t frameNum); 150 virtual uint64_t getVideoDuration(void); 151 152 // Return true if the container provides pts informations providePts(void)153 virtual bool providePts(void) {return false;}; 154 // 155 virtual bool getPtsDts(uint32_t frame,uint64_t *pts,uint64_t *dts); 156 virtual bool setPtsDts(uint32_t frame,uint64_t pts,uint64_t dts); 157 158 159 }; 160 #endif 161 162 163