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