@@ -16,6 +16,7 @@ IReader::IReader(const std::string& filename, const size_t streamIndex, const in
16
16
, _channelIndex(channelIndex)
17
17
, _currentFrame(-1 )
18
18
, _inputFileAllocated(true )
19
+ , _continueWithGenerator(false )
19
20
{
20
21
_inputFile = new InputFile (filename);
21
22
}
@@ -31,6 +32,7 @@ IReader::IReader(InputFile& inputFile, const size_t streamIndex, const int chann
31
32
, _channelIndex(channelIndex)
32
33
, _currentFrame(-1 )
33
34
, _inputFileAllocated(false )
35
+ , _continueWithGenerator(false )
34
36
{
35
37
}
36
38
@@ -53,6 +55,7 @@ Frame* IReader::readPrevFrame()
53
55
Frame* IReader::readFrameAt (const size_t frame)
54
56
{
55
57
assert (_decoder != NULL );
58
+ assert (_generator != NULL );
56
59
assert (_transform != NULL );
57
60
assert (_srcFrame != NULL );
58
61
assert (_dstFrame != NULL );
@@ -70,10 +73,20 @@ Frame* IReader::readFrameAt(const size_t frame)
70
73
decodingStatus = _decoder->decodeNextFrame (*_srcFrame, _channelIndex);
71
74
else
72
75
decodingStatus = _decoder->decodeNextFrame (*_srcFrame);
76
+ // if decoding failed
73
77
if (!decodingStatus)
74
78
{
75
- _dstFrame->clear ();
76
- return _dstFrame;
79
+ // generate data (ie silence or black)
80
+ if (_continueWithGenerator)
81
+ {
82
+ _generator->decodeNextFrame (*_srcFrame);
83
+ }
84
+ // or return an empty frame
85
+ else
86
+ {
87
+ _dstFrame->clear ();
88
+ return _dstFrame;
89
+ }
77
90
}
78
91
// transform
79
92
_transform->convert (*_srcFrame, *_dstFrame);
0 commit comments