Skip to content

Commit 86d6724

Browse files
author
Valentin Noel
committed
Add InputStreamReader base class for InputStreamVideo and InputStreamAudio
1 parent 14ac3b9 commit 86d6724

File tree

5 files changed

+115
-67
lines changed

5 files changed

+115
-67
lines changed

src/AvTranscoder/InputStreamAudio.cpp

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,41 @@ extern "C" {
1919
namespace avtranscoder
2020
{
2121

22-
InputStreamAudio::InputStreamAudio( AvInputStream& inputStream )
23-
: m_inputStream ( &inputStream )
22+
InputStreamAudio::InputStreamAudio( AvInputStream& inputStream )
23+
: InputStreamReader::InputStreamReader( inputStream )
24+
, m_inputStream ( &inputStream )
2425
, m_codec ( NULL )
2526
, m_codecContext ( NULL )
2627
, m_frame ( NULL )
2728
, m_selectedStream( -1 )
29+
{
30+
}
31+
32+
InputStreamAudio::~InputStreamAudio()
33+
{
34+
if( m_codecContext != NULL )
35+
{
36+
avcodec_close( m_codecContext );
37+
av_free( m_codecContext );
38+
m_codecContext = NULL;
39+
}
40+
if( m_frame != NULL )
41+
{
42+
#if LIBAVCODEC_VERSION_MAJOR > 54
43+
av_frame_free( &m_frame );
44+
#else
45+
#if LIBAVCODEC_VERSION_MAJOR > 53
46+
avcodec_free_frame( &m_frame );
47+
#else
48+
av_free( m_frame );
49+
#endif
50+
#endif
51+
m_frame = NULL;
52+
}
53+
}
54+
55+
56+
void InputStreamAudio::setup()
2857
{
2958
avcodec_register_all();
3059

@@ -77,30 +106,7 @@ InputStreamAudio::InputStreamAudio( AvInputStream& inputStream )
77106
}
78107
}
79108

80-
InputStreamAudio::~InputStreamAudio()
81-
{
82-
if( m_codecContext != NULL )
83-
{
84-
avcodec_close( m_codecContext );
85-
av_free( m_codecContext );
86-
m_codecContext = NULL;
87-
}
88-
if( m_frame != NULL )
89-
{
90-
#if LIBAVCODEC_VERSION_MAJOR > 54
91-
av_frame_free( &m_frame );
92-
#else
93-
#if LIBAVCODEC_VERSION_MAJOR > 53
94-
avcodec_free_frame( &m_frame );
95-
#else
96-
av_free( m_frame );
97-
#endif
98-
#endif
99-
m_frame = NULL;
100-
}
101-
}
102-
103-
bool InputStreamAudio::readNextFrame( AudioFrame& audioFrameBuffer )
109+
bool InputStreamAudio::readNextFrame( Frame& frameBuffer )
104110
{
105111
int got_frame = 0;
106112
while( ! got_frame )
@@ -133,14 +139,16 @@ bool InputStreamAudio::readNextFrame( AudioFrame& audioFrameBuffer )
133139
m_frame->nb_samples,
134140
m_codecContext->sample_fmt, 1);
135141

136-
audioFrameBuffer.setNbSamples( m_frame->nb_samples );
142+
AudioFrame& audioBuffer = static_cast<AudioFrame&>( frameBuffer );
143+
144+
audioBuffer.setNbSamples( m_frame->nb_samples );
137145

138146
if( decodedSize )
139147
{
140-
if( audioFrameBuffer.getSize() != decodedSize )
141-
audioFrameBuffer.getBuffer().resize( decodedSize, 0 );
148+
if( audioBuffer.getSize() != decodedSize )
149+
audioBuffer.getBuffer().resize( decodedSize, 0 );
142150

143-
unsigned char* dst = audioFrameBuffer.getPtr();
151+
unsigned char* dst = audioBuffer.getPtr();
144152
av_samples_copy(&dst, (uint8_t* const* )m_frame->data, 0,
145153
0, m_frame->nb_samples, m_codecContext->channels,
146154
m_codecContext->sample_fmt);

src/AvTranscoder/InputStreamAudio.hpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
11
#ifndef _AV_TRANSCODER_INPUT_STREAM_AUDIO_HPP_
22
#define _AV_TRANSCODER_INPUT_STREAM_AUDIO_HPP_
33

4-
#include "InputStream.hpp"
4+
#include "InputStreamReader.hpp"
55
#include "DatasStructures/AudioFrame.hpp"
66

7+
class AVFormatContext;
8+
class AVCodec;
9+
class AVCodecContext;
10+
class AVFrame;
11+
712
namespace avtranscoder
813
{
914

1015
class AvInputStream;
1116

12-
class AvExport InputStreamAudio
17+
class AvExport InputStreamAudio : public InputStreamReader
1318
{
1419
public:
1520
InputStreamAudio( AvInputStream& inputStream );
1621
~InputStreamAudio();
1722

18-
bool readNextFrame( AudioFrame& audioFrameBuffer );
23+
void setup();
24+
25+
bool readNextFrame( Frame& frameBuffer );
1926

2027
private:
2128
AvInputStream* m_inputStream;
@@ -31,4 +38,4 @@ class AvExport InputStreamAudio
3138

3239
}
3340

34-
#endif
41+
#endif
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#ifndef _AV_TRANSCODER_IPUT_STREAM_READER_HPP_
2+
#define _AV_TRANSCODER_IPUT_STREAM_READER_HPP_
3+
4+
#include "DatasStructures/Frame.hpp"
5+
6+
namespace avtranscoder
7+
{
8+
9+
class AvInputStream;
10+
11+
class AvExport InputStreamReader
12+
{
13+
public:
14+
InputStreamReader( AvInputStream& inputStream ) {};
15+
// virtual ~InputStreamReader() = 0;
16+
17+
virtual void setup() = 0;
18+
19+
virtual bool readNextFrame( Frame& frameBuffer ) = 0;
20+
};
21+
22+
}
23+
24+
#endif

src/AvTranscoder/InputStreamVideo.cpp

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,39 @@ namespace avtranscoder
2020
{
2121

2222
InputStreamVideo::InputStreamVideo( AvInputStream& inputStream )
23-
: m_inputStream ( &inputStream )
23+
: InputStreamReader::InputStreamReader( inputStream )
24+
, m_inputStream ( &inputStream )
2425
, m_codec ( NULL )
2526
, m_codecContext ( NULL )
2627
, m_frame ( NULL )
2728
, m_selectedStream( -1 )
29+
{
30+
}
31+
32+
InputStreamVideo::~InputStreamVideo()
33+
{
34+
if( m_codecContext != NULL )
35+
{
36+
//avcodec_close( m_codecContext );
37+
av_free( m_codecContext );
38+
m_codecContext = NULL;
39+
}
40+
if( m_frame != NULL )
41+
{
42+
#if LIBAVCODEC_VERSION_MAJOR > 54
43+
av_frame_free( &m_frame );
44+
#else
45+
#if LIBAVCODEC_VERSION_MAJOR > 53
46+
avcodec_free_frame( &m_frame );
47+
#else
48+
av_free( m_frame );
49+
#endif
50+
#endif
51+
m_frame = NULL;
52+
}
53+
}
54+
55+
void InputStreamVideo::setup()
2856
{
2957
av_register_all();
3058

@@ -67,30 +95,7 @@ InputStreamVideo::InputStreamVideo( AvInputStream& inputStream )
6795
}
6896
}
6997

70-
InputStreamVideo::~InputStreamVideo()
71-
{
72-
if( m_codecContext != NULL )
73-
{
74-
//avcodec_close( m_codecContext );
75-
av_free( m_codecContext );
76-
m_codecContext = NULL;
77-
}
78-
if( m_frame != NULL )
79-
{
80-
#if LIBAVCODEC_VERSION_MAJOR > 54
81-
av_frame_free( &m_frame );
82-
#else
83-
#if LIBAVCODEC_VERSION_MAJOR > 53
84-
avcodec_free_frame( &m_frame );
85-
#else
86-
av_free( m_frame );
87-
#endif
88-
#endif
89-
m_frame = NULL;
90-
}
91-
}
92-
93-
bool InputStreamVideo::readNextFrame( Image& frameBuffer )
98+
bool InputStreamVideo::readNextFrame( Frame& frameBuffer )
9499
{
95100
int got_frame = 0;
96101

@@ -120,12 +125,14 @@ bool InputStreamVideo::readNextFrame( Image& frameBuffer )
120125
av_free_packet( &packet );
121126
}
122127

128+
Image& imageBuffer = static_cast<Image&>( frameBuffer );
129+
123130
size_t decodedSize = avpicture_get_size( (AVPixelFormat)m_frame->format, m_frame->width, m_frame->height );
124-
if( frameBuffer.getBuffer().size() != decodedSize )
125-
frameBuffer.getBuffer().resize( decodedSize );
131+
if( imageBuffer.getBuffer().size() != decodedSize )
132+
imageBuffer.getBuffer().resize( decodedSize );
126133

127134
// Copy pixel data from an AVPicture into one contiguous buffer.
128-
avpicture_layout( (AVPicture*)m_frame, (AVPixelFormat)m_frame->format, m_frame->width, m_frame->height, &frameBuffer.getBuffer()[0], frameBuffer.getBuffer().size() );
135+
avpicture_layout( (AVPicture*)m_frame, (AVPixelFormat)m_frame->format, m_frame->width, m_frame->height, &imageBuffer.getBuffer()[0], frameBuffer.getBuffer().size() );
129136

130137
return true;
131138
}
@@ -135,4 +142,4 @@ void InputStreamVideo::flushDecoder()
135142
avcodec_flush_buffers( m_codecContext );
136143
}
137144

138-
}
145+
}

src/AvTranscoder/InputStreamVideo.hpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef _AV_TRANSCODER_INPUT_STREAM_VIDEO_HPP_
22
#define _AV_TRANSCODER_INPUT_STREAM_VIDEO_HPP_
33

4-
#include "InputFile.hpp"
4+
#include "InputStreamReader.hpp"
55
#include "DatasStructures/Image.hpp"
66

77
#include <vector>
@@ -16,13 +16,15 @@ namespace avtranscoder
1616

1717
class AvInputStream;
1818

19-
class AvExport InputStreamVideo
19+
class AvExport InputStreamVideo : public InputStreamReader
2020
{
2121
public:
2222
InputStreamVideo( AvInputStream& inputStream );
2323
~InputStreamVideo();
2424

25-
bool readNextFrame( Image& frameBuffer );
25+
void setup();
26+
27+
bool readNextFrame( Frame& frameBuffer );
2628

2729
void flushDecoder();
2830

@@ -37,4 +39,4 @@ class AvExport InputStreamVideo
3739

3840
}
3941

40-
#endif
42+
#endif

0 commit comments

Comments
 (0)