1
1
2
+ #include < AvTranscoder/EssenceTransform/AudioTransform.hpp>
3
+ #include < AvTranscoder/EssenceTransform/ColorTransform.hpp>
4
+
2
5
#include " StreamTranscoder.hpp"
3
6
4
7
namespace avtranscoder
5
8
{
6
9
7
10
StreamTranscoder::StreamTranscoder ( AvInputStream& stream, OutputFile& outputFile, const size_t & streamId )
8
11
: _stream( &stream )
12
+ , _sourceBuffer( NULL )
9
13
, _frameBuffer( NULL )
14
+ , _transform( NULL )
10
15
, _inputStreamReader( NULL )
11
16
, _outputStreamWriter( NULL )
12
17
, _outputFile( &outputFile )
@@ -17,6 +22,8 @@ StreamTranscoder::StreamTranscoder( AvInputStream& stream, OutputFile& outputFil
17
22
18
23
StreamTranscoder::~StreamTranscoder ()
19
24
{
25
+ if ( _sourceBuffer )
26
+ delete _sourceBuffer;
20
27
if ( _frameBuffer )
21
28
delete _frameBuffer;
22
29
if ( _inputStreamReader )
@@ -33,16 +40,20 @@ void StreamTranscoder::init( const std::string& profile )
33
40
{
34
41
case AVMEDIA_TYPE_VIDEO :
35
42
{
36
- _inputStreamReader = new InputStreamVideo ( *_stream );
37
- _inputStreamReader->setup ();
38
-
39
43
// re-wrap only, get output descriptor from input
40
44
if ( profile.empty () )
41
45
{
42
46
_outputFile->addVideoStream ( _stream->getVideoDesc () );
43
47
break ;
44
48
}
45
49
50
+ _inputStreamReader = new InputStreamVideo ( *_stream );
51
+ _inputStreamReader->setup ();
52
+
53
+ _sourceBuffer = new Image ( _stream->getVideoDesc ().getImageDesc () );
54
+
55
+ _transform = new ColorTransform ();
56
+
46
57
OutputStreamVideo* outputStreamVideo = new OutputStreamVideo ();
47
58
_outputStreamWriter = outputStreamVideo;
48
59
@@ -55,16 +66,20 @@ void StreamTranscoder::init( const std::string& profile )
55
66
}
56
67
case AVMEDIA_TYPE_AUDIO :
57
68
{
58
- _inputStreamReader = new InputStreamAudio ( *_stream );
59
- _inputStreamReader->setup ();
60
-
61
69
// re-wrap only, get output descriptor from input
62
70
if ( profile.empty () )
63
71
{
64
72
_outputFile->addAudioStream ( _stream->getAudioDesc () );
65
73
break ;
66
74
}
67
-
75
+
76
+ _inputStreamReader = new InputStreamAudio ( *_stream );
77
+ _inputStreamReader->setup ();
78
+
79
+ _sourceBuffer = new AudioFrame ( _stream->getAudioDesc ().getFrameDesc () );
80
+
81
+ _transform = new AudioTransform ();
82
+
68
83
OutputStreamAudio* outputStreamAudio = new OutputStreamAudio ();
69
84
_outputStreamWriter = outputStreamAudio;
70
85
@@ -92,9 +107,9 @@ bool StreamTranscoder::processFrame()
92
107
}
93
108
94
109
// std::cout << "encode & wrap" << _streamIndex << std::endl;
95
-
96
- if ( _inputStreamReader->readNextFrame ( *_frameBuffer ) )
110
+ if ( _inputStreamReader->readNextFrame ( *_sourceBuffer ) )
97
111
{
112
+ _transform->convert ( *_sourceBuffer, *_frameBuffer );
98
113
_outputStreamWriter->encodeFrame ( *_frameBuffer, dataStream );
99
114
}
100
115
else if ( ! _outputStreamWriter->encodeFrame ( dataStream ) )
0 commit comments