Skip to content

Commit 7f789d7

Browse files
committed
Merge pull request mikrosimage#221 from cchampet/dev_setupDecoders
decoders: the user can decode without any call to setup method
2 parents 1ba4ec5 + dc79164 commit 7f789d7

File tree

7 files changed

+19
-9
lines changed

7 files changed

+19
-9
lines changed

src/AvTranscoder/decoder/AudioDecoder.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ namespace avtranscoder
1818
{
1919

2020
AudioDecoder::AudioDecoder( InputStream& inputStream )
21-
: _inputStream ( &inputStream )
22-
, _frame ( NULL )
21+
: _inputStream( &inputStream )
22+
, _frame( NULL )
23+
, _isSetup(false)
2324
{
2425
#if LIBAVCODEC_VERSION_MAJOR > 54
2526
_frame = av_frame_alloc();
@@ -84,6 +85,7 @@ void AudioDecoder::setupDecoder( const ProfileLoader::Profile& profile )
8485

8586
// open decoder
8687
_inputStream->getAudioCodec().openCodec();
88+
_isSetup = true;
8789
}
8890

8991
bool AudioDecoder::decodeNextFrame( Frame& frameBuffer )
@@ -155,6 +157,9 @@ bool AudioDecoder::decodeNextFrame( Frame& frameBuffer, const size_t subStreamIn
155157

156158
bool AudioDecoder::decodeNextFrame()
157159
{
160+
if(!_isSetup)
161+
setupDecoder();
162+
158163
int got_frame = 0;
159164
while( ! got_frame )
160165
{

src/AvTranscoder/decoder/AudioDecoder.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ class AvExport AudioDecoder : public IDecoder
2727
private:
2828
InputStream* _inputStream; ///< Stream from which we read next frames (no ownership, has link)
2929
AVFrame* _frame; ///< Libav object to store decoded data (has ownership)
30+
31+
bool _isSetup;
3032
};
3133

3234
}

src/AvTranscoder/decoder/AudioGenerator.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ class AvExport AudioGenerator : public IDecoder
1616

1717
~AudioGenerator();
1818

19-
void setupDecoder( const ProfileLoader::Profile& profile = ProfileLoader::Profile() ) {}
20-
2119
bool decodeNextFrame( Frame& frameBuffer );
2220
bool decodeNextFrame( Frame& frameBuffer, const size_t subStreamIndex );
2321

src/AvTranscoder/decoder/IDecoder.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class AvExport IDecoder
1818
* @param profile: set decoder parameters from the given profile
1919
* @note Open the decoder.
2020
*/
21-
virtual void setupDecoder( const ProfileLoader::Profile& profile = ProfileLoader::Profile() ) = 0;
21+
virtual void setupDecoder( const ProfileLoader::Profile& profile = ProfileLoader::Profile() ) {}
2222

2323
/**
2424
* @brief Decode next frame

src/AvTranscoder/decoder/VideoDecoder.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ namespace avtranscoder
1717
{
1818

1919
VideoDecoder::VideoDecoder( InputStream& inputStream )
20-
: _inputStream ( &inputStream )
21-
, _frame ( NULL )
20+
: _inputStream( &inputStream )
21+
, _frame( NULL )
22+
, _isSetup(false)
2223
{
2324
#if LIBAVCODEC_VERSION_MAJOR > 54
2425
_frame = av_frame_alloc();
@@ -82,6 +83,7 @@ void VideoDecoder::setupDecoder( const ProfileLoader::Profile& profile )
8283

8384
// open decoder
8485
_inputStream->getVideoCodec().openCodec();
86+
_isSetup = true;
8587
}
8688

8789
bool VideoDecoder::decodeNextFrame( Frame& frameBuffer )
@@ -109,6 +111,9 @@ bool VideoDecoder::decodeNextFrame( Frame& frameBuffer, const size_t subStreamIn
109111

110112
bool VideoDecoder::decodeNextFrame()
111113
{
114+
if(!_isSetup)
115+
setupDecoder();
116+
112117
int got_frame = 0;
113118
while( ! got_frame )
114119
{

src/AvTranscoder/decoder/VideoDecoder.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ class AvExport VideoDecoder : public IDecoder
2929
private:
3030
InputStream* _inputStream; ///< Stream from which we read next frames (no ownership, has link)
3131
AVFrame* _frame; ///< Libav object to store decoded data (has ownership)
32+
33+
bool _isSetup;
3234
};
3335

3436
}

src/AvTranscoder/decoder/VideoGenerator.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ class AvExport VideoGenerator : public IDecoder
1616

1717
~VideoGenerator();
1818

19-
void setupDecoder( const ProfileLoader::Profile& profile = ProfileLoader::Profile() ) {}
20-
2119
bool decodeNextFrame( Frame& frameBuffer );
2220
bool decodeNextFrame( Frame& frameBuffer, const size_t subStreamIndex );
2321

0 commit comments

Comments
 (0)