Skip to content

Commit f536dc8

Browse files
author
Clement Champetier
committed
2 parents 2be3e90 + 1337383 commit f536dc8

File tree

10 files changed

+97
-39
lines changed

10 files changed

+97
-39
lines changed

app/optionChecker/optionChecker.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ void displayOptions( avtranscoder::OptionLoader::OptionArray& options )
6060
}
6161
}
6262

63-
int optionChecker( const std::string& inputfilename )
63+
void optionChecker( const std::string& inputfilename )
6464
{
6565
avtranscoder::OptionLoader optionLoader;
6666

src/AvTranscoder/EssenceTransform/AudioEssenceTransform.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,11 @@ AudioEssenceTransform::AudioEssenceTransform()
3939
{
4040
}
4141

42-
bool AudioEssenceTransform::init( const AudioFrame& src, const AudioFrame& dst )
42+
bool AudioEssenceTransform::init( const Frame& srcFrame, const Frame& dstFrame )
4343
{
44+
const AudioFrame& src = static_cast<const AudioFrame&>( srcFrame );
45+
const AudioFrame& dst = static_cast<const AudioFrame&>( dstFrame );
46+
4447
_audioConvertContext = AllocResampleContext();
4548

4649
if( !_audioConvertContext )
@@ -64,27 +67,24 @@ bool AudioEssenceTransform::init( const AudioFrame& src, const AudioFrame& dst )
6467
return true;
6568
}
6669

67-
void AudioEssenceTransform::convert( const AudioFrame& src, AudioFrame& dst )
70+
void AudioEssenceTransform::convert( const Frame& srcFrame, Frame& dstFrame )
6871
{
6972
if( ! _isInit )
70-
{
71-
_isInit = init( src, dst );
72-
_isInit = true;
73-
}
73+
_isInit = init( srcFrame, dstFrame );
7474

75-
if( dst.getSize() != src.getSize() )
76-
dst.getBuffer().resize( src.getSize(), 0 );
75+
if( dstFrame.getSize() != srcFrame.getSize() )
76+
dstFrame.getBuffer().resize( srcFrame.getSize(), 0 );
7777

78-
const unsigned char* srcData = src.getPtr();
79-
unsigned char* dstData = dst.getPtr();
78+
const unsigned char* srcData = srcFrame.getPtr();
79+
unsigned char* dstData = dstFrame.getPtr();
8080

8181
#ifdef AV_RESAMPLE_LIBRARY
82-
avresample_convert( _audioConvertContext, (uint8_t**)&dstData, 0, dst.getSize(), (uint8_t**)&srcData, 0, src.getSize() );
82+
avresample_convert( _audioConvertContext, (uint8_t**)&dstData, 0, dstFrame.getSize(), (uint8_t**)&srcData, 0, srcFrame.getSize() );
8383
#else
84-
swr_convert( _audioConvertContext, &dstData, dst.getSize(), &srcData, src.getSize() );
84+
swr_convert( _audioConvertContext, &dstData, dstFrame.getSize(), &srcData, srcFrame.getSize() );
8585
#endif
8686

87-
dst.setNbSamples( src.getNbSamples() );
87+
static_cast<AudioFrame&>( dstFrame ).setNbSamples( static_cast<const AudioFrame&>( srcFrame ).getNbSamples() );
8888
}
8989

9090
}

src/AvTranscoder/EssenceTransform/AudioEssenceTransform.hpp

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

4-
#include <AvTranscoder/common.hpp>
4+
#include <AvTranscoder/DatasStructures/Frame.hpp>
5+
#include "EssenceTransform.hpp"
56

67
#ifdef AV_RESAMPLE_LIBRARY
78
#define ResampleContext AVAudioResampleContext
@@ -14,17 +15,15 @@ class ResampleContext;
1415
namespace avtranscoder
1516
{
1617

17-
class AudioFrame;
18-
19-
class AvExport AudioEssenceTransform
18+
class AvExport AudioEssenceTransform : public EssenceTransform
2019
{
2120
public:
2221
AudioEssenceTransform();
2322

24-
void convert( const AudioFrame& src, AudioFrame& dst );
23+
void convert( const Frame& srcFrame, Frame& dstFrame );
2524

2625
private:
27-
bool init( const AudioFrame& src, const AudioFrame& dst );
26+
bool init( const Frame& srcFrame, const Frame& dstFrame );
2827

2928
ResampleContext* _audioConvertContext;
3029

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#ifndef _AV_TRANSCODER_ESSENCE_TRANSFORM_ESSENCE_TRANSFORM_HPP_
2+
#define _AV_TRANSCODER_ESSENCE_TRANSFORM_ESSENCE_TRANSFORM_HPP_
3+
4+
#include <AvTranscoder/DatasStructures/Frame.hpp>
5+
6+
namespace avtranscoder
7+
{
8+
9+
class AvExport EssenceTransform
10+
{
11+
public:
12+
EssenceTransform()
13+
{}
14+
15+
virtual ~EssenceTransform()
16+
{}
17+
18+
virtual void convert( const Frame& src, Frame& dst ) = 0;
19+
20+
protected:
21+
virtual bool init( const Frame& src, const Frame& dst ) = 0;
22+
};
23+
24+
}
25+
26+
#endif

src/AvTranscoder/EssenceTransform/VideoEssenceTransform.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ extern "C" {
1414
#endif
1515
}
1616

17+
#include <AvTranscoder/DatasStructures/Pixel.hpp>
18+
#include <AvTranscoder/DatasStructures/Image.hpp>
19+
1720
#include <iostream>
1821
#include <iomanip>
1922
#include <cassert>
@@ -34,8 +37,11 @@ VideoEssenceTransform::VideoEssenceTransform()
3437
{
3538
}
3639

37-
bool VideoEssenceTransform::init( const Image& src, const Image& dst )
40+
bool VideoEssenceTransform::init( const Frame& srcFrame, const Frame& dstFrame )
3841
{
42+
const Image& src = static_cast<const Image&>( srcFrame );
43+
const Image& dst = static_cast<const Image&>( dstFrame );
44+
3945
assert( src.desc().getWidth() != 0 );
4046
assert( src.desc().getHeight() != 0 );
4147
assert( src.desc().getWidth() == dst.desc().getWidth() );
@@ -76,8 +82,11 @@ bool VideoEssenceTransform::init( const Image& src, const Image& dst )
7682
return true;
7783
}
7884

79-
void VideoEssenceTransform::convert( const Image& src, Image& dst )
85+
void VideoEssenceTransform::convert( const Frame& srcFrame, Frame& dstFrame )
8086
{
87+
const Image& src = static_cast<const Image&>( srcFrame );
88+
Image& dst = static_cast<Image&>( dstFrame );
89+
8190
assert( src.desc().getWidth() != 0 );
8291
assert( src.desc().getHeight() != 0 );
8392
assert( src.desc().getWidth() == dst.desc().getWidth() );
@@ -86,12 +95,12 @@ void VideoEssenceTransform::convert( const Image& src, Image& dst )
8695
assert( src.desc().getPixelDesc().getComponents() == dst.desc().getPixelDesc().getComponents() );
8796

8897
if( ! _isInit )
89-
_isInit = init( src, dst );
98+
_isInit = init( srcFrame, dstFrame );
9099

91100
for( size_t plane = 0; plane < MAX_SWS_PLANE; ++plane )
92101
{
93-
_srcData.at( plane ) = (uint8_t*)const_cast< unsigned char* >( src.getPtr() + _srcOffsets.at( plane ) );
94-
_dstData.at( plane ) = (uint8_t*)dst.getPtr() + _dstOffsets.at( plane );
102+
_srcData.at( plane ) = (uint8_t*) const_cast< unsigned char* >( src.getPtr() + _srcOffsets.at( plane ) );
103+
_dstData.at( plane ) = (uint8_t*) dst.getPtr() + _dstOffsets.at( plane );
95104
}
96105

97106
if( !_imageConvertContext )

src/AvTranscoder/EssenceTransform/VideoEssenceTransform.hpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
11
#ifndef _AV_TRANSCODER_ESSENCE_TRANSFORM_VIDEO_ESSENCE_TRANSFORM_HPP
22
#define _AV_TRANSCODER_ESSENCE_TRANSFORM_VIDEO_ESSENCE_TRANSFORM_HPP
33

4-
#include <AvTranscoder/DatasStructures/Pixel.hpp>
5-
#include <AvTranscoder/DatasStructures/Image.hpp>
4+
#include <AvTranscoder/DatasStructures/Frame.hpp>
5+
#include "EssenceTransform.hpp"
66

77
#include <vector>
8-
#include <string>
98

109
class SwsContext;
1110

1211
namespace avtranscoder
1312
{
1413

15-
class AvExport VideoEssenceTransform
14+
class AvExport VideoEssenceTransform : public EssenceTransform
1615
{
1716
public:
1817
VideoEssenceTransform();
1918

20-
void convert( const Image& src, Image& dst );
19+
void convert( const Frame& srcFrame, Frame& dstFrame );
2120

2221
private:
23-
bool init( const Image& src, const Image& dst );
22+
bool init( const Frame& srcFrame, const Frame& dstFrame );
2423

2524
SwsContext* _imageConvertContext;
2625

src/AvTranscoder/File/OutputFile.cpp

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

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

@@ -93,7 +93,7 @@ AvOutputStream& OutputFile::addVideoStream( const VideoDesc& videoDesc )
9393
return *_outputStreams.back();
9494
}
9595

96-
AvOutputStream& OutputFile::addAudioStream( const AudioDesc& audioDesc )
96+
OutputStream& OutputFile::addAudioStream( const AudioDesc& audioDesc )
9797
{
9898
assert( _formatContext != NULL );
9999

@@ -112,7 +112,7 @@ AvOutputStream& OutputFile::addAudioStream( const AudioDesc& audioDesc )
112112
return *_outputStreams.back();
113113
}
114114

115-
AvOutputStream& OutputFile::getStream( const size_t streamId )
115+
OutputStream& OutputFile::getStream( const size_t streamId )
116116
{
117117
if( streamId >= _outputStreams.size() )
118118
throw std::runtime_error( "unable to get output stream (out of range)" );

src/AvTranscoder/File/OutputFile.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,21 +47,21 @@ class AvExport OutputFile
4747
* @note call setup() before adding any stream
4848
* @param videoDesc description of output stream
4949
**/
50-
virtual AvOutputStream& addVideoStream( const VideoDesc& videoDesc );
50+
virtual OutputStream& addVideoStream( const VideoDesc& videoDesc );
5151

5252
/**
5353
* @brief Add an audio output stream using the description.
5454
* @note call setup() before adding any stream
5555
* @param audioDesc description of output stream
5656
**/
57-
virtual AvOutputStream& addAudioStream( const AudioDesc& audioDesc );
57+
virtual OutputStream& addAudioStream( const AudioDesc& audioDesc );
5858

5959
/**
6060
* @brief get the output stream description.
6161
* @param streamId select the output stream
6262
* @return the output stream reference
6363
**/
64-
virtual AvOutputStream& getStream( const size_t streamId );
64+
virtual OutputStream& getStream( const size_t streamId );
6565

6666
/**
6767
* @brief Initialise the wrapping

src/AvTranscoder/Transcoder/StreamTranscoder.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33

44
#include <AvTranscoder/CodedStream/AvInputStream.hpp>
55

6+
#include <AvTranscoder/EssenceTransform/AudioEssenceTransform.hpp>
7+
#include <AvTranscoder/EssenceTransform/VideoEssenceTransform.hpp>
8+
69
#include <cassert>
710

811
namespace avtranscoder
@@ -14,11 +17,13 @@ StreamTranscoder::StreamTranscoder(
1417
)
1518
: _inputStream( &inputStream )
1619
, _outputStream( NULL )
20+
, _sourceBuffer( NULL )
1721
, _frameBuffer( NULL )
1822
, _videoFrameBuffer( NULL )
1923
, _audioFrameBuffer( NULL )
2024
, _inputEssence( NULL )
2125
, _outputEssence( NULL )
26+
, _transform( NULL )
2227
, _transcodeStream( false )
2328
{
2429
// create a re-wrapping case
@@ -46,11 +51,13 @@ StreamTranscoder::StreamTranscoder(
4651
)
4752
: _inputStream( &inputStream )
4853
, _outputStream( NULL )
54+
, _sourceBuffer( NULL )
4955
, _frameBuffer( NULL )
5056
, _videoFrameBuffer( NULL )
5157
, _audioFrameBuffer( NULL )
5258
, _inputEssence( NULL )
5359
, _outputEssence( NULL )
60+
, _transform( NULL )
5461
, _transcodeStream( true )
5562
{
5663
// create a transcode case
@@ -67,9 +74,13 @@ StreamTranscoder::StreamTranscoder(
6774
outputVideo->setProfile( profile, _inputStream->getVideoDesc().getImageDesc() );
6875

6976
_outputStream = &outputFile.addVideoStream( outputVideo->getVideoDesc() );
77+
78+
_sourceBuffer = new Image( _inputStream->getVideoDesc().getImageDesc() );
7079
_videoFrameBuffer = new Image( outputVideo->getVideoDesc().getImageDesc() );
7180
_frameBuffer = _videoFrameBuffer;
7281

82+
_transform = new VideoEssenceTransform();
83+
7384
break;
7485
}
7586
case AVMEDIA_TYPE_AUDIO :
@@ -83,9 +94,13 @@ StreamTranscoder::StreamTranscoder(
8394
outputAudio->setProfile( profile, _inputStream->getAudioDesc().getFrameDesc() );
8495

8596
_outputStream = &outputFile.addAudioStream( outputAudio->getAudioDesc() );
97+
98+
_sourceBuffer = new AudioFrame( _inputStream->getAudioDesc().getFrameDesc() );
8699
_audioFrameBuffer = new AudioFrame( outputAudio->getAudioDesc().getFrameDesc() );
87100
_frameBuffer = _audioFrameBuffer;
88101

102+
_transform = new AudioEssenceTransform();
103+
89104
break;
90105
}
91106
default:
@@ -103,11 +118,13 @@ StreamTranscoder::StreamTranscoder(
103118
)
104119
: _inputStream( NULL )
105120
, _outputStream( NULL )
121+
, _sourceBuffer( NULL )
106122
, _frameBuffer( NULL )
107123
, _videoFrameBuffer( NULL )
108124
, _audioFrameBuffer( NULL )
109125
, _inputEssence( &inputEssence )
110126
, _outputEssence( NULL )
127+
, _transform( NULL )
111128
, _transcodeStream( true )
112129
{
113130
if( ! profile.count( Profile::avProfileType ) )
@@ -150,6 +167,8 @@ StreamTranscoder::~StreamTranscoder()
150167
delete _inputEssence;
151168
if( _outputEssence )
152169
delete _outputEssence;
170+
if( _transform )
171+
delete _transform;
153172
}
154173

155174

@@ -177,14 +196,15 @@ bool StreamTranscoder::processTranscode()
177196
{
178197
assert( _inputEssence != NULL );
179198
assert( _outputEssence != NULL );
199+
assert( _sourceBuffer != NULL );
180200
assert( _frameBuffer != NULL );
181201

182202
std::cout << "transcode" << std::endl;
183203

184204
DataStream dataStream;
185-
if( _inputEssence->readNextFrame( *_frameBuffer ) )
205+
if( _inputEssence->readNextFrame( *_sourceBuffer ) )
186206
{
187-
std::cout << "encode" << std::endl;
207+
_transform->convert( *_sourceBuffer, *_frameBuffer );
188208
_outputEssence->encodeFrame( *_frameBuffer, dataStream );
189209
}
190210
else

src/AvTranscoder/Transcoder/StreamTranscoder.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
namespace avtranscoder
1717
{
1818

19+
class EssenceTransform;
20+
1921
class StreamTranscoder
2022
{
2123
public:
@@ -52,13 +54,16 @@ class StreamTranscoder
5254
InputStream* _inputStream;
5355
OutputStream* _outputStream;
5456

57+
Frame* _sourceBuffer;
5558
Frame* _frameBuffer;
5659
Image* _videoFrameBuffer;
5760
AudioFrame* _audioFrameBuffer;
5861

5962
InputEssence* _inputEssence;
6063
OutputEssence* _outputEssence;
6164

65+
EssenceTransform* _transform;
66+
6267
bool _transcodeStream;
6368

6469

0 commit comments

Comments
 (0)