Skip to content

Commit a078157

Browse files
Merge pull request #132 from valnoel/fix_frame_skipped_at_transcode
Transcoding: empty encoder buffer at the end of the process
2 parents 804ac76 + d2f3d40 commit a078157

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

src/AvTranscoder/essenceStream/AvInputVideo.cpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ AvInputVideo::AvInputVideo( AvInputStream& inputStream )
2222
, _inputStream ( &inputStream )
2323
, _codec( eCodecTypeDecoder, inputStream.getVideoCodec().getCodecId() )
2424
, _frame ( NULL )
25-
, _selectedStream( -1 )
2625
{
2726
}
2827

@@ -82,27 +81,30 @@ bool AvInputVideo::readNextFrame( Frame& frameBuffer )
8281
while( ! got_frame )
8382
{
8483
CodedData data;
85-
if( ! _inputStream->readNextPacket( data ) )
86-
return false;
8784

8885
AVPacket packet;
8986
av_init_packet( &packet );
9087

91-
packet.stream_index = _selectedStream;
92-
packet.data = data.getPtr();
93-
packet.size = data.getSize();
94-
88+
bool nextPacketRead = _inputStream->readNextPacket( data );
89+
90+
packet.stream_index = _inputStream->getStreamIndex();
91+
packet.data = nextPacketRead ? data.getPtr(): NULL;
92+
packet.size = data.getSize();
93+
9594
int ret = avcodec_decode_video2( _codec.getAVCodecContext(), _frame, &got_frame, &packet );
9695

96+
av_free_packet( &packet );
97+
98+
if( ! nextPacketRead && ret == 0 && got_frame == 0 )
99+
return false;
100+
97101
if( ret < 0 )
98102
{
99103
char err[250];
100104
av_strerror( ret, err, 250);
101105

102106
throw std::runtime_error( "an error occured during video decoding - " + std::string(err) );
103107
}
104-
105-
av_free_packet( &packet );
106108
}
107109

108110
VideoFrame& imageBuffer = static_cast<VideoFrame&>( frameBuffer );

src/AvTranscoder/essenceStream/AvInputVideo.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ class AvExport AvInputVideo : public IInputEssence
3131
AvInputStream* _inputStream;
3232
VideoCodec _codec;
3333
AVFrame* _frame;
34-
35-
int _selectedStream;
3634
};
3735

3836
}

0 commit comments

Comments
 (0)