handling some cases of wrong pts/dts
This commit is contained in:
parent
141e8bdd4c
commit
db9d3c39a1
15
main.cpp
15
main.cpp
@ -78,6 +78,7 @@ int main(int argc, char** argv) {
|
||||
|
||||
AVFrame* frame = nullptr;
|
||||
int gotPicture = 0, gotPacket = 0, decodedFrames = 1;
|
||||
int64_t oldPts = 0, oldDts = 0;
|
||||
while(true) {
|
||||
AVPacket packet;
|
||||
packet.data = nullptr;
|
||||
@ -112,6 +113,20 @@ int main(int argc, char** argv) {
|
||||
if(res < 0) break;
|
||||
if(!gotPacket) continue;
|
||||
|
||||
// try to recover in case of bad pts/dts
|
||||
if(encPacket.pts < encPacket.dts) {
|
||||
encPacket.dts = encPacket.pts;
|
||||
}
|
||||
|
||||
if(encPacket.pts < oldPts)
|
||||
encPacket.pts = oldPts;
|
||||
|
||||
if(encPacket.dts < oldDts)
|
||||
encPacket.dts = oldDts;
|
||||
|
||||
oldPts = encPacket.pts;
|
||||
oldDts = encPacket.dts;
|
||||
|
||||
av_packet_rescale_ts(&encPacket, videoStream->time_base, outVideoStream->time_base);
|
||||
|
||||
res = av_interleaved_write_frame(outFmtCtx, &encPacket);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user