@@ -145,6 +145,8 @@ StreamTranscoder::StreamTranscoder(const InputStreamDesc& inputStreamDesc, IInpu
145
145
_inputStreamDesc.push_back (inputStreamDesc);
146
146
_inputStreams.push_back (&inputStream);
147
147
148
+ addDecoder (inputStreamDesc, inputStream);
149
+
148
150
// create a transcode case
149
151
switch (inputStream.getProperties ().getStreamType ())
150
152
{
@@ -153,12 +155,6 @@ StreamTranscoder::StreamTranscoder(const InputStreamDesc& inputStreamDesc, IInpu
153
155
// filter
154
156
_filterGraph = new FilterGraph (inputStream.getVideoCodec ());
155
157
156
- // input decoder
157
- VideoDecoder* inputVideo = new VideoDecoder (*static_cast <InputStream*>(&inputStream));
158
- inputVideo->setupDecoder ();
159
- _inputDecoders.push_back (inputVideo);
160
- _currentDecoder = inputVideo;
161
-
162
158
// output encoder
163
159
VideoEncoder* outputVideo = new VideoEncoder (profile.at (constants::avProfileCodec));
164
160
_outputEncoder = outputVideo;
@@ -171,29 +167,19 @@ StreamTranscoder::StreamTranscoder(const InputStreamDesc& inputStreamDesc, IInpu
171
167
_outputStream = &outputFile.addVideoStream (outputVideo->getVideoCodec ());
172
168
173
169
// buffers to process
174
- _decodedData.push_back (VideoFrame (inputStream.getVideoCodec ().getVideoFrameDesc ()));
175
170
_filteredData = VideoFrame (inputStream.getVideoCodec ().getVideoFrameDesc ());
176
171
_transformedData = VideoFrame (outputVideo->getVideoCodec ().getVideoFrameDesc ());
177
172
178
173
// transform
179
174
_transform = new VideoTransform ();
180
175
181
- // generator decoder
182
- _generators.push_back (new VideoGenerator ());
183
-
184
176
break ;
185
177
}
186
178
case AVMEDIA_TYPE_AUDIO:
187
179
{
188
180
// filter
189
181
_filterGraph = new FilterGraph (inputStream.getAudioCodec ());
190
182
191
- // input decoder
192
- AudioDecoder* inputAudio = new AudioDecoder (*static_cast <InputStream*>(&inputStream));
193
- inputAudio->setupDecoder ();
194
- _inputDecoders.push_back (inputAudio);
195
- _currentDecoder = inputAudio;
196
-
197
183
// output encoder
198
184
AudioEncoder* outputAudio = new AudioEncoder (profile.at (constants::avProfileCodec));
199
185
_outputEncoder = outputAudio;
@@ -212,25 +198,70 @@ StreamTranscoder::StreamTranscoder(const InputStreamDesc& inputStreamDesc, IInpu
212
198
if (inputStreamDesc.demultiplexing ())
213
199
inputFrameDesc._nbChannels = inputStreamDesc._channelIndexArray .size ();
214
200
215
- _decodedData.push_back (AudioFrame (inputFrameDesc));
216
201
_filteredData = AudioFrame (inputFrameDesc);
217
202
_transformedData = AudioFrame (outputAudio->getAudioCodec ().getAudioFrameDesc ());
218
203
219
204
// transform
220
205
_transform = new AudioTransform ();
221
206
207
+ break ;
208
+ }
209
+ default :
210
+ {
211
+ throw std::runtime_error (" unupported stream type" );
212
+ break ;
213
+ }
214
+ }
215
+ setOffset (offset);
216
+ }
217
+
218
+ void StreamTranscoder::addDecoder (const InputStreamDesc& inputStreamDesc, IInputStream& inputStream)
219
+ {
220
+ // create a transcode case
221
+ switch (inputStream.getProperties ().getStreamType ())
222
+ {
223
+ case AVMEDIA_TYPE_VIDEO:
224
+ {
225
+ // corresponding input decoder
226
+ VideoDecoder* inputVideo = new VideoDecoder (static_cast <InputStream&>(inputStream));
227
+ inputVideo->setupDecoder ();
228
+ _inputDecoders.push_back (inputVideo);
229
+ _currentDecoder = inputVideo;
230
+
231
+ // generator decoder
232
+ _generators.push_back (new VideoGenerator ());
233
+
234
+ // buffers to process
235
+ _decodedData.push_back (VideoFrame (inputStream.getVideoCodec ().getVideoFrameDesc ()));
236
+
237
+ break ;
238
+ }
239
+ case AVMEDIA_TYPE_AUDIO:
240
+ {
241
+ // corresponding input decoder
242
+ AudioDecoder* inputAudio = new AudioDecoder (static_cast <InputStream&>(inputStream));
243
+ inputAudio->setupDecoder ();
244
+ _inputDecoders.push_back (inputAudio);
245
+ _currentDecoder = inputAudio;
246
+
222
247
// generator decoder
223
248
_generators.push_back (new AudioGenerator ());
224
249
250
+ // buffers to process
251
+ AudioFrameDesc inputFrameDesc (inputStream.getAudioCodec ().getAudioFrameDesc ());
252
+ if (inputStreamDesc.demultiplexing ())
253
+ inputFrameDesc._nbChannels = inputStreamDesc._channelIndexArray .size ();
254
+
255
+ _decodedData.push_back (AudioFrame (inputFrameDesc));
256
+
225
257
break ;
226
258
}
227
259
default :
228
260
{
229
- throw std::runtime_error (" unupported stream type" );
261
+ throw std::runtime_error (" Unupported stream type" );
230
262
break ;
231
263
}
232
264
}
233
- setOffset (offset);
234
265
}
235
266
236
267
StreamTranscoder::StreamTranscoder (IOutputFile& outputFile, const ProfileLoader::Profile& profile)
0 commit comments