Skip to content

Commit b92a264

Browse files
adding OutputStream to have the same architecture as the InputStream
1 parent 4a27899 commit b92a264

File tree

9 files changed

+127
-13
lines changed

9 files changed

+127
-13
lines changed

src/AvTranscoder/AvOutputStream.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include "AvOutputStream.hpp"
2+
3+
#include "OutputFile.hpp"
4+
5+
namespace avtranscoder
6+
{
7+
8+
AvOutputStream::AvOutputStream( )
9+
: _outputFile( NULL )
10+
, _streamIndex( 0 )
11+
{
12+
}
13+
14+
AvOutputStream::AvOutputStream( OutputFile& outputFile, const size_t streamIndex )
15+
: _outputFile( &outputFile )
16+
, _streamIndex( streamIndex )
17+
{
18+
}
19+
20+
AvOutputStream::~AvOutputStream()
21+
{
22+
}
23+
24+
bool AvOutputStream::wrap( DataStream& data )
25+
{
26+
_outputFile->wrap( data, _streamIndex );
27+
}
28+
29+
VideoDesc AvOutputStream::getVideoDesc() const
30+
{
31+
return _videoDesc;
32+
}
33+
34+
AudioDesc AvOutputStream::getAudioDesc() const
35+
{
36+
return _audioDesc;
37+
}
38+
39+
}

src/AvTranscoder/AvOutputStream.hpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#ifndef _AV_TRANSCODER_AV_OUTPUT_STREAM_HPP_
2+
#define _AV_TRANSCODER_AV_OUTPUT_STREAM_HPP_
3+
4+
#include <AvTranscoder/OutputStream.hpp>
5+
6+
namespace avtranscoder
7+
{
8+
9+
class OutputFile;
10+
11+
class AvExport AvOutputStream : public OutputStream
12+
{
13+
public:
14+
AvOutputStream( );
15+
16+
AvOutputStream( OutputFile& outputFile, const size_t streamIndex );
17+
~AvOutputStream( );
18+
19+
AvOutputStream( const AvOutputStream& outputStream )
20+
: OutputStream( )
21+
, _outputFile( outputStream._outputFile )
22+
, _streamIndex( outputStream._streamIndex )
23+
{
24+
}
25+
26+
size_t getStreamIndex() const { return _streamIndex; }
27+
28+
bool wrap( DataStream& data );
29+
30+
// Stream propeerties
31+
VideoDesc getVideoDesc() const;
32+
AudioDesc getAudioDesc() const;
33+
34+
private:
35+
OutputFile* _outputFile;
36+
37+
VideoDesc _videoDesc;
38+
AudioDesc _audioDesc;
39+
40+
size_t _streamIndex;
41+
};
42+
43+
}
44+
45+
#endif

src/AvTranscoder/OutputFile.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ bool OutputFile::setup()
5959
return formatContext != NULL;
6060
}
6161

62-
void OutputFile::addVideoStream( const VideoDesc& videoDesc )
62+
AvOutputStream& OutputFile::addVideoStream( const VideoDesc& videoDesc )
6363
{
6464
assert( formatContext != NULL );
6565

@@ -78,9 +78,10 @@ void OutputFile::addVideoStream( const VideoDesc& videoDesc )
7878
stream->codec->level = videoDesc.getCodecContext()->level;
7979

8080
stream->time_base = stream->codec->time_base;
81+
return _outputStreams.back();
8182
}
8283

83-
void OutputFile::addAudioStream( const AudioDesc& audioDesc )
84+
AvOutputStream& OutputFile::addAudioStream( const AudioDesc& audioDesc )
8485
{
8586
assert( formatContext != NULL );
8687

@@ -92,6 +93,13 @@ void OutputFile::addAudioStream( const AudioDesc& audioDesc )
9293
stream->codec->sample_rate = audioDesc.getCodecContext()->sample_rate;
9394
stream->codec->channels = audioDesc.getCodecContext()->channels;
9495
stream->codec->sample_fmt = audioDesc.getCodecContext()->sample_fmt;
96+
97+
return _outputStreams.back();
98+
}
99+
100+
AvOutputStream& OutputFile::getStream( const size_t streamId )
101+
{
102+
return _outputStreams.at( streamId );
95103
}
96104

97105
bool OutputFile::beginWrap( )

src/AvTranscoder/OutputFile.hpp

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
#ifndef _AV_TRANSCODER_OUTPUT_FILE_HPP_
22
#define _AV_TRANSCODER_OUTPUT_FILE_HPP_
33

4-
#include "DatasStructures/Image.hpp"
5-
#include "DatasStructures/DataStreamDesc.hpp"
6-
#include "DatasStructures/VideoDesc.hpp"
7-
#include "DatasStructures/AudioDesc.hpp"
4+
#include <AvTranscoder/DatasStructures/Image.hpp>
5+
#include <AvTranscoder/DatasStructures/DataStreamDesc.hpp>
6+
#include <AvTranscoder/DatasStructures/VideoDesc.hpp>
7+
#include <AvTranscoder/DatasStructures/AudioDesc.hpp>
8+
9+
#include <AvTranscoder/AvOutputStream.hpp>
810

911
#include <string>
1012
#include <vector>
@@ -45,14 +47,21 @@ class AvExport OutputFile
4547
* @note call setup() before adding any stream
4648
* @param videoDesc description of output stream
4749
**/
48-
virtual void addVideoStream( const VideoDesc& videoDesc );
50+
virtual AvOutputStream& addVideoStream( const VideoDesc& videoDesc );
4951

5052
/**
5153
* @brief Add an audio output stream using the description.
5254
* @note call setup() before adding any stream
5355
* @param audioDesc description of output stream
5456
**/
55-
virtual void addAudioStream( const AudioDesc& audioDesc );
57+
virtual AvOutputStream& addAudioStream( const AudioDesc& audioDesc );
58+
59+
/**
60+
* @brief get the output stream description.
61+
* @param streamId select the output stream
62+
* @return the output stream reference
63+
**/
64+
virtual AvOutputStream& getStream( const size_t streamId );
5665

5766
/**
5867
* @brief Initialise the wrapping
@@ -74,6 +83,7 @@ class AvExport OutputFile
7483
virtual bool endWrap( );
7584

7685
private:
86+
std::vector<AvOutputStream> _outputStreams;
7787
AVOutputFormat* outputFormat;
7888
AVFormatContext* formatContext;
7989

src/AvTranscoder/OutputStream.cpp

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/AvTranscoder/OutputStream.hpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
#ifndef _AV_TRANSCODER_OUTPUT_STREAM_HPP_
22
#define _AV_TRANSCODER_OUTPUT_STREAM_HPP_
33

4+
#include "DatasStructures/DataStreamDesc.hpp"
5+
#include "DatasStructures/AudioDesc.hpp"
6+
#include "DatasStructures/VideoDesc.hpp"
7+
48
namespace avtranscoder
59
{
610

711
class OutputStream
812
{
913
public:
10-
OutputStream(){};
14+
OutputStream( );
15+
16+
virtual ~OutputStream() {};
17+
18+
virtual size_t getStreamIndex() const = 0;
1119

12-
private:
20+
virtual bool wrap( DataStream& data ) = 0;
1321

22+
// Stream properties
23+
virtual VideoDesc getVideoDesc() const = 0;
24+
virtual AudioDesc getAudioDesc() const = 0;
1425
};
1526

1627
}

src/AvTranscoder/OutputStreamAudio.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
namespace avtranscoder
1010
{
1111

12-
class OutputStreamAudio : public OutputStream
12+
class OutputStreamAudio
1313
{
1414
public:
1515
OutputStreamAudio();

src/AvTranscoder/OutputStreamVideo.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class AVCodecContext;
2323
namespace avtranscoder
2424
{
2525

26-
class AvExport OutputStreamVideo : public OutputStream
26+
class AvExport OutputStreamVideo
2727
{
2828
public:
2929
OutputStreamVideo();

src/AvTranscoder/avTranscoder.i

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <AvTranscoder/Metadatas/MediaMetadatasStructures.hpp>
2222

2323
#include <AvTranscoder/OutputStream.hpp>
24+
#include <AvTranscoder/AvOutputStream.hpp>
2425
#include <AvTranscoder/OutputStreamAudio.hpp>
2526
#include <AvTranscoder/OutputStreamVideo.hpp>
2627

@@ -61,6 +62,7 @@ namespace std {
6162
%include <AvTranscoder/Metadatas/MediaMetadatasStructures.hpp>
6263

6364
%include <AvTranscoder/OutputStream.hpp>
65+
%include <AvTranscoder/AvOutputStream.hpp>
6466
%include <AvTranscoder/OutputStreamAudio.hpp>
6567
%include <AvTranscoder/OutputStreamVideo.hpp>
6668

0 commit comments

Comments
 (0)