1 /** *************************************************************************
2 \file ADM_wtv.cpp
3 \brief WTV demuxer
4 copyright : (C) 2010 by mean
5 email : fixounet@free.fr
6 ***************************************************************************/
7
8 /***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
16
17 #include "ADM_default.h"
18 #include "ADM_Video.h"
19 #include "ADM_assert.h"
20
21 #include "fourcc.h"
22 #include "DIA_coreToolkit.h"
23 #include "ADM_wtv.h"
24
25 #if 0
26 #define aprintf printf
27 #else
28 #define aprintf(...) {}
29 #endif
30
31 /**
32 \fn getAudioInfo
33 */
getAudioInfo(uint32_t i)34 WAVHeader *wtvHeader::getAudioInfo(uint32_t i )
35 {
36 if(!_nbAudioTrack) return NULL;
37
38 ADM_assert(i<_nbAudioTrack);
39 if(!_audioAccess) return NULL;
40 return &(_allAudioTracks[i].wavHeader);
41 }
42 /**
43 \fn getAudioStream
44 */
getAudioStream(uint32_t i,ADM_audioStream ** audio)45 uint8_t wtvHeader::getAudioStream(uint32_t i,ADM_audioStream **audio)
46 {
47 *audio=NULL;
48 if(!_nbAudioTrack) return true;
49 ADM_assert(i<_nbAudioTrack);
50 *audio=_audioStreams[i];
51 return 1;
52 }
53 /**
54 \fn getNbAudioStreams
55 */
getNbAudioStreams(void)56 uint8_t wtvHeader::getNbAudioStreams(void)
57 {
58 return _nbAudioTrack;
59 }
60
61 /**
62 \fn Dump
63 */
64
Dump(void)65 void wtvHeader::Dump(void)
66 {
67
68 printf("*********** WTV INFO***********\n");
69 }
70
71 /**
72 \fn close
73 */
74
close(void)75 uint8_t wtvHeader::close(void)
76 {
77 if (_fd)
78 fclose(_fd);
79
80 _fd=NULL;
81
82 if(_videoExtraData)
83 {
84 delete [] _videoExtraData;
85 _videoExtraData=NULL;
86 }
87 if(myName)
88 {
89 delete myName;
90 myName=NULL;
91 }
92 if(_videoExtraData)
93 {
94 delete [] _videoExtraData;
95 _videoExtraData=NULL;
96 }
97
98
99
100 for(int i=0;i<_nbAudioTrack;i++)
101 {
102 wtvAudioTrak *trk=&(_allAudioTracks[i]);
103 if(trk->extraData) delete [] trk->extraData;
104 trk->extraData=NULL;
105 delete _audioAccess[i];
106 _audioAccess[i]=NULL;
107 delete _audioStreams[i];
108 _audioStreams[i]=NULL;
109 }
110 return 1;
111 }
112 /**
113 \fn wtvHeader
114 */
115
116
wtvHeader(void)117 wtvHeader::wtvHeader( void ) : vidHeader()
118 {
119 _fd=NULL;
120 _videoIndex=-1;
121 myName=NULL;
122 _videoStreamId=0;
123 nbImage=0;
124 memset(&(_allAudioTracks[0]),0,sizeof(_allAudioTracks));
125 memset(&(_audioAccess[0]),0,sizeof(_audioAccess));
126 memset(&(_audioStreams[0]),0,sizeof(_audioStreams));
127 _nbAudioTrack=0;
128
129 }
130 /**
131 \fn ~ wtvHeader
132 */
133
~wtvHeader()134 wtvHeader::~wtvHeader( )
135 {
136 close();
137 }
138 /**
139 \fn open
140 */
141
open(const char * name)142 uint8_t wtvHeader::open(const char *name)
143 {
144 _fd=ADM_fopen(name,"rb");
145 if(!_fd)
146 {
147 GUI_Error_HIG("File Error.","Cannot open file\n");
148 return 0;
149 }
150 return false;
151 for(int i=0;i<_nbAudioTrack;i++)
152 {
153 _audioAccess[i]=new wtvAudioAccess(this,i);
154 _audioStreams[i]=ADM_audioCreateStream(&(_allAudioTracks[i].wavHeader), _audioAccess[i]);
155 }
156 return 1;
157 }
158 /**
159 \fn setFlag
160 */
161
setFlag(uint32_t frame,uint32_t flags)162 uint8_t wtvHeader::setFlag(uint32_t frame,uint32_t flags)
163 {
164 ADM_assert(frame<nbImage);
165 return 1;
166 }
167 /**
168 \fn getFlags
169 */
170
getFlags(uint32_t frame,uint32_t * flags)171 uint32_t wtvHeader::getFlags(uint32_t frame,uint32_t *flags)
172 {
173 if(frame>=nbImage) return 0;
174 *flags=AVI_KEY_FRAME;
175 return 1;
176 }
177 /**
178 \fn getFrameSize
179 */
getFrameSize(uint32_t frame,uint32_t * size)180 uint8_t wtvHeader::getFrameSize(uint32_t frame,uint32_t *size)
181 {
182 *size=0;
183 if(frame>=nbImage) return 0;
184 *size=1;
185 return true;
186 }
187 /**
188 \fn getTime
189 */
getTime(uint32_t frameNum)190 uint64_t wtvHeader::getTime(uint32_t frameNum)
191 {
192 if(frameNum>=nbImage) return 0;
193 return ADM_NO_PTS;
194 }
195 /**
196 \fn getTime
197 */
198
getVideoDuration(void)199 uint64_t wtvHeader::getVideoDuration(void)
200 {
201 return 01000000LL;
202 }
203 /**
204 \fn getTime
205 */
206
getPtsDts(uint32_t frame,uint64_t * pts,uint64_t * dts)207 bool wtvHeader::getPtsDts(uint32_t frame,uint64_t *pts,uint64_t *dts)
208 {
209 if(frame>=nbImage) return false;
210 *pts=ADM_NO_PTS;
211 *dts=ADM_NO_PTS;
212 return true;
213 }
214 /**
215 \fn getTime
216 */
217
setPtsDts(uint32_t frame,uint64_t pts,uint64_t dts)218 bool wtvHeader::setPtsDts(uint32_t frame,uint64_t pts,uint64_t dts)
219 {
220 if(frame>=nbImage) return false;
221 return true;
222 }
223 /**
224 \fn getFrame
225 */
getFrame(uint32_t framenum,ADMCompressedImage * img)226 uint8_t wtvHeader::getFrame(uint32_t framenum,ADMCompressedImage *img)
227 {
228 img->dataLength=0;
229 img->flags=AVI_KEY_FRAME;
230 return false;
231 }
232 /*
233 __________________________________________________________
234 */
235
236 //EOF
237