Skip to content

Commit 41e4cec

Browse files
author
Clement Champetier
committed
AvInputVideo: refactore readNextFrame
Symmetry with AvInputAudio: add private function decodeNextFrame.
1 parent 76e9ba7 commit 41e4cec

File tree

2 files changed

+27
-20
lines changed

2 files changed

+27
-20
lines changed

src/AvTranscoder/essenceStream/AvInputVideo.cpp

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,36 @@ void AvInputVideo::setup()
7777

7878
bool AvInputVideo::readNextFrame( Frame& frameBuffer )
7979
{
80-
int got_frame = 0;
80+
if( ! decodeNextFrame() )
81+
return false;
82+
83+
VideoFrame& imageBuffer = static_cast<VideoFrame&>( frameBuffer );
84+
85+
size_t decodedSize = avpicture_get_size( (AVPixelFormat)_frame->format, _frame->width, _frame->height );
86+
if( ! decodedSize )
87+
return false;
88+
89+
if( imageBuffer.getBuffer().size() != decodedSize )
90+
imageBuffer.getBuffer().resize( decodedSize );
91+
92+
// Copy pixel data from an AVPicture into one contiguous buffer.
93+
avpicture_layout( (AVPicture*)_frame, (AVPixelFormat)_frame->format, _frame->width, _frame->height, &imageBuffer.getBuffer()[0], frameBuffer.getBuffer().size() );
94+
95+
return true;
96+
}
97+
98+
bool AvInputVideo::readNextFrame( Frame& frameBuffer, const size_t subStreamIndex )
99+
{
100+
return false;
101+
}
81102

103+
bool AvInputVideo::decodeNextFrame()
104+
{
105+
int got_frame = 0;
82106
while( ! got_frame )
83107
{
84108
CodedData data;
85-
if( ! _inputStream->readNextPacket( data ) )
109+
if( ! _inputStream->readNextPacket( data ) ) // error or end of file
86110
return false;
87111

88112
AVPacket packet;
@@ -104,27 +128,9 @@ bool AvInputVideo::readNextFrame( Frame& frameBuffer )
104128

105129
av_free_packet( &packet );
106130
}
107-
108-
VideoFrame& imageBuffer = static_cast<VideoFrame&>( frameBuffer );
109-
110-
size_t decodedSize = avpicture_get_size( (AVPixelFormat)_frame->format, _frame->width, _frame->height );
111-
if( ! decodedSize )
112-
return false;
113-
114-
if( imageBuffer.getBuffer().size() != decodedSize )
115-
imageBuffer.getBuffer().resize( decodedSize );
116-
117-
// Copy pixel data from an AVPicture into one contiguous buffer.
118-
avpicture_layout( (AVPicture*)_frame, (AVPixelFormat)_frame->format, _frame->width, _frame->height, &imageBuffer.getBuffer()[0], frameBuffer.getBuffer().size() );
119-
120131
return true;
121132
}
122133

123-
bool AvInputVideo::readNextFrame( Frame& frameBuffer, const size_t subStreamIndex )
124-
{
125-
return false;
126-
}
127-
128134
void AvInputVideo::flushDecoder()
129135
{
130136
avcodec_flush_buffers( _codec->getAVCodecContext() );

src/AvTranscoder/essenceStream/AvInputVideo.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class AvExport AvInputVideo : public IInputEssence
2828
void setProfile( const Profile::ProfileDesc& desc );
2929

3030
private:
31+
bool decodeNextFrame();
3132

3233
AvInputStream* _inputStream; ///< Stream from which we read next frames
3334
const VideoCodec* _codec; ///< Video decoder. Has link (no ownership)

0 commit comments

Comments
 (0)