Skip to content

Commit 66102e3

Browse files
author
Clement Champetier
committed
Video/AudioDecoder: fixed decoding if the reading process failed
It could be possible to have no more data to read from the input, but to have data stored in the decoder.
1 parent 94d4600 commit 66102e3

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

src/AvTranscoder/decoder/AudioDecoder.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,8 @@ bool AudioDecoder::decodeNextFrame(Frame& frameBuffer)
8787
{
8888
CodedData data;
8989

90+
// reading
9091
const bool nextPacketRead = _inputStream->readNextPacket(data);
91-
// if error or end of file
92-
if(!nextPacketRead && !decodeNextFrame)
93-
{
94-
data.clear();
95-
return false;
96-
}
9792

9893
// decoding
9994
// @note could be called several times to return the remaining frames (last call with an empty packet)
@@ -110,6 +105,13 @@ bool AudioDecoder::decodeNextFrame(Frame& frameBuffer)
110105
decodeNextFrame = false;
111106
else
112107
decodeNextFrame = true;
108+
109+
// if no frame read and decompressed
110+
if(!nextPacketRead && !decodeNextFrame)
111+
{
112+
data.clear();
113+
return false;
114+
}
113115
}
114116
return decodeNextFrame;
115117
}

src/AvTranscoder/decoder/VideoDecoder.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,8 @@ bool VideoDecoder::decodeNextFrame(Frame& frameBuffer)
8585
{
8686
CodedData data;
8787

88+
// reading
8889
const bool nextPacketRead = _inputStream->readNextPacket(data);
89-
// if error or end of file
90-
if(!nextPacketRead && !decodeNextFrame)
91-
{
92-
data.clear();
93-
return false;
94-
}
9590

9691
// decoding
9792
// @note could be called several times to return the remaining frames (last call with an empty packet)
@@ -108,6 +103,13 @@ bool VideoDecoder::decodeNextFrame(Frame& frameBuffer)
108103
decodeNextFrame = false;
109104
else
110105
decodeNextFrame = true;
106+
107+
// if no frame read and decompressed
108+
if(!nextPacketRead && !decodeNextFrame)
109+
{
110+
data.clear();
111+
return false;
112+
}
111113
}
112114
return decodeNextFrame;
113115
}

0 commit comments

Comments
 (0)