Skip to content

Commit 1480ad4

Browse files
author
Valentin Noel
committed
Transcoding: empty encoder buffer at the end of the process
1 parent 804ac76 commit 1480ad4

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

src/AvTranscoder/essenceStream/AvInputVideo.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ AvInputVideo::AvInputVideo( AvInputStream& inputStream )
2222
, _inputStream ( &inputStream )
2323
, _codec( eCodecTypeDecoder, inputStream.getVideoCodec().getCodecId() )
2424
, _frame ( NULL )
25-
, _selectedStream( -1 )
25+
, _selectedStream( inputStream.getStreamIndex() )
2626
{
2727
}
2828

@@ -82,27 +82,30 @@ bool AvInputVideo::readNextFrame( Frame& frameBuffer )
8282
while( ! got_frame )
8383
{
8484
CodedData data;
85-
if( ! _inputStream->readNextPacket( data ) )
86-
return false;
8785

8886
AVPacket packet;
8987
av_init_packet( &packet );
9088

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

97+
av_free_packet( &packet );
98+
99+
if( ! nextPacketRead && ret == 0 && got_frame == 0 )
100+
return false;
101+
97102
if( ret < 0 )
98103
{
99104
char err[250];
100105
av_strerror( ret, err, 250);
101106

102107
throw std::runtime_error( "an error occured during video decoding - " + std::string(err) );
103108
}
104-
105-
av_free_packet( &packet );
106109
}
107110

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

0 commit comments

Comments
 (0)