Skip to content

Commit 2464b4a

Browse files
committed
Merge pull request #41 from cchampet/dev_refactore_codec
Refactore codec & clean in project
2 parents 5a2baea + 3705c04 commit 2464b4a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+686
-801
lines changed

app/avTranscoder/avTranscoder.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@
77

88
#include <AvTranscoder/frame/Frame.hpp>
99

10-
#include <AvTranscoder/essenceStream/AvInputAudio.hpp>
11-
#include <AvTranscoder/essenceStream/AvInputVideo.hpp>
12-
#include <AvTranscoder/essenceStream/AvOutputAudio.hpp>
13-
#include <AvTranscoder/essenceStream/AvOutputVideo.hpp>
10+
#include <AvTranscoder/decoder/VideoDecoder.hpp>
11+
#include <AvTranscoder/encoder/VideoEncoder.hpp>
1412

1513
#include <AvTranscoder/transform/VideoTransform.hpp>
1614

@@ -31,12 +29,12 @@ void transcodeVideo( const char* inputfilename, const char* outputFilename )
3129
input.activateStream( input.getProperties().getVideoProperties().at( 0 ).getStreamId() );
3230

3331
// init video decoders
34-
AvInputVideo inputVideo( input.getStream( 0 ) );
32+
VideoDecoder inputVideo( input.getStream( 0 ) );
3533
VideoFrameDesc VideoFrameDesc = input.getStream( 0 ).getVideoCodec().getVideoFrameDesc();
3634
VideoFrame sourceImage( VideoFrameDesc );
3735

3836
// init video encoder
39-
AvOutputVideo outputVideo;
37+
VideoEncoder outputVideo( "mpeg2video" );
4038
outputVideo.setProfile( profileLoader.getProfile( "xdcamhd422" ), VideoFrameDesc );
4139
VideoFrame imageToEncode( outputVideo.getVideoCodec().getVideoFrameDesc() );
4240

app/avplay/AvReader.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
#define _AVPLAYER_AVREADER_
33

44
#include <AvTranscoder/file/InputFile.hpp>
5-
#include <AvTranscoder/essenceStream/AvInputAudio.hpp>
6-
#include <AvTranscoder/essenceStream/AvInputVideo.hpp>
7-
#include <AvTranscoder/transform/VideoTransform.hpp>
5+
#include <AvTranscoder/progress/ConsoleProgress.hpp>
86
#include <AvTranscoder/mediaProperty/print.hpp>
97

10-
#include <AvTranscoder/progress/ConsoleProgress.hpp>
8+
#include <AvTranscoder/decoder/VideoDecoder.hpp>
9+
10+
#include <AvTranscoder/transform/VideoTransform.hpp>
1111

1212
#include "Reader.hpp"
1313

@@ -26,7 +26,7 @@ class AvReader : public Reader
2626
_videoStream = _inputFile.getProperties().getVideoProperties().at(0).getStreamId();
2727
_inputFile.activateStream( _videoStream );
2828

29-
_inputVideo = new avtranscoder::AvInputVideo( _inputFile.getStream( _videoStream ) );
29+
_inputVideo = new avtranscoder::VideoDecoder( _inputFile.getStream( _videoStream ) );
3030
_inputVideo->setup();
3131

3232
_sourceImage = new avtranscoder::VideoFrame( _inputFile.getStream( _videoStream ).getVideoCodec().getVideoFrameDesc() );
@@ -97,7 +97,7 @@ class AvReader : public Reader
9797
private:
9898
avtranscoder::InputFile _inputFile;
9999

100-
avtranscoder::AvInputVideo* _inputVideo;
100+
avtranscoder::VideoDecoder* _inputVideo;
101101

102102
avtranscoder::VideoFrame* _sourceImage;
103103
avtranscoder::VideoFrame* _imageToDisplay;

app/optionChecker/optionChecker.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#include <AvTranscoder/util.hpp>
2-
#include "AvTranscoder/option/FormatContext.hpp"
3-
#include <AvTranscoder/option/CodecContext.hpp>
4-
#include <AvTranscoder/option/Option.hpp>
2+
#include <AvTranscoder/Option.hpp>
3+
#include <AvTranscoder/file/FormatContext.hpp>
54
#include <AvTranscoder/file/InputFile.hpp>
5+
#include <AvTranscoder/codec/VideoCodec.hpp>
66

77
#include <string>
88
#include <iostream>
@@ -73,8 +73,8 @@ void optionChecker( const std::string& inputfilename )
7373
displayOptions( formatOptions );
7474

7575
// codec options
76-
avtranscoder::CodecContext codecContext( AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM );
77-
std::vector<avtranscoder::Option> codecOptions = codecContext.getOptions();
76+
avtranscoder::VideoCodec codec( avtranscoder::eCodecTypeDecoder, "mpeg2video" );
77+
std::vector<avtranscoder::Option> codecOptions = codec.getOptions();
7878
displayOptions( codecOptions );
7979

8080
// pixel formats

app/presetChecker/presetChecker.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
#include <iomanip>
44
#include <AvTranscoder/ProfileLoader.hpp>
55

6-
#include <AvTranscoder/essenceStream/AvOutputVideo.hpp>
7-
#include <AvTranscoder/essenceStream/AvOutputAudio.hpp>
6+
#include <AvTranscoder/encoder/VideoEncoder.hpp>
7+
#include <AvTranscoder/encoder/AudioEncoder.hpp>
88

99

1010
int main( int argc, char** argv )
@@ -27,13 +27,13 @@ int main( int argc, char** argv )
2727
try{
2828
if( profile.find( avtranscoder::constants::avProfileType )->second == avtranscoder::constants::avProfileTypeVideo )
2929
{
30-
avtranscoder::AvOutputVideo outputVideo;
30+
avtranscoder::VideoEncoder outputVideo( profile.at( avtranscoder::constants::avProfileCodec ) );
3131
outputVideo.setProfile( profile, outputVideo.getVideoCodec().getVideoFrameDesc() );
3232
}
3333

3434
if( profile.find( avtranscoder::constants::avProfileType )->second == avtranscoder::constants::avProfileTypeAudio )
3535
{
36-
avtranscoder::AvOutputAudio outputAudio;
36+
avtranscoder::AudioEncoder outputAudio( profile.at( avtranscoder::constants::avProfileCodec ) );
3737
outputAudio.setProfile( profile, outputAudio.getAudioCodec().getAudioFrameDesc() );
3838
}
3939
}

src/AvTranscoder/option/Option.cpp renamed to src/AvTranscoder/Option.cpp

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ extern "C" {
44
#include <libavutil/error.h>
55
}
66

7+
#include <iostream>
78
#include <sstream>
89
#include <stdexcept>
910

@@ -226,4 +227,82 @@ void Option::checkFFmpegSetOption( const int ffmpegReturnCode, const std::string
226227
}
227228
}
228229

230+
void loadOptions( OptionMap& outOptions, void* av_class, int req_flags )
231+
{
232+
if( ! av_class )
233+
return;
234+
235+
std::multimap<std::string, std::string> optionUnitToParentName;
236+
std::vector<Option> childOptions;
237+
238+
const AVOption* avOption = NULL;
239+
240+
// iterate on options
241+
#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT( 51, 12, 0 )
242+
while( ( avOption = av_next_option( av_class, avOption ) ) )
243+
#else
244+
while( ( avOption = av_opt_next( av_class, avOption ) ) )
245+
#endif
246+
{
247+
if( ! avOption ||
248+
! avOption->name ||
249+
( avOption->flags & req_flags ) != req_flags )
250+
{
251+
continue;
252+
}
253+
254+
Option option( *const_cast<AVOption*>( avOption ), av_class );
255+
256+
if( option.getType() == eOptionBaseTypeChild )
257+
{
258+
childOptions.push_back( option );
259+
}
260+
else
261+
{
262+
outOptions.insert( std::make_pair( option.getName(), option ) );
263+
optionUnitToParentName.insert( std::make_pair( option.getUnit(), option.getName() ) );
264+
}
265+
}
266+
267+
// iterate on child options
268+
for( std::vector<Option>::iterator itOption = childOptions.begin(); itOption != childOptions.end(); ++itOption )
269+
{
270+
bool parentFound = false;
271+
for( std::multimap<std::string, std::string>::iterator itUnit = optionUnitToParentName.begin(); itUnit != optionUnitToParentName.end(); ++itUnit )
272+
{
273+
if( itUnit->first == itOption->getUnit() )
274+
{
275+
std::string nameParentOption = itUnit->second;
276+
Option& parentOption = outOptions.at( nameParentOption );
277+
278+
parentOption.appendChild( *itOption );
279+
280+
// child of a Choice
281+
if( parentOption.getType() == eOptionBaseTypeChoice )
282+
{
283+
if( itOption->getDefaultInt() == parentOption.getDefaultInt() )
284+
parentOption.setDefaultChildIndex( parentOption.getChilds().size() - 1 );
285+
}
286+
287+
parentFound = true;
288+
break;
289+
}
290+
}
291+
292+
if( ! parentFound )
293+
{
294+
std::cout << "Warning: Can't find a choice option for " << itOption->getName() << std::endl;
295+
}
296+
}
297+
}
298+
299+
void loadOptions( OptionArray& outOptions, void* av_class, int req_flags )
300+
{
301+
OptionMap optionMap;
302+
loadOptions( optionMap, av_class, req_flags );
303+
304+
for( OptionMap::iterator it = optionMap.begin(); it != optionMap.end(); ++it )
305+
outOptions.push_back( it->second );
306+
}
307+
229308
}

src/AvTranscoder/option/Option.hpp renamed to src/AvTranscoder/Option.hpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ extern "C" {
99

1010
#include <vector>
1111
#include <string>
12+
#include <map>
1213
#include <utility>
1314

1415
namespace avtranscoder
@@ -114,6 +115,17 @@ class AvExport Option
114115
size_t _defaultChildIndex;
115116
};
116117

118+
typedef std::vector<Option> OptionArray;
119+
typedef std::map<std::string, Option> OptionMap; ///< Key: option name / value: option
120+
121+
/**
122+
* @param outOptions: map or array of options
123+
* @param av_class: a libav context (could be an AVFormatContext or an AVCodecContext).
124+
* @param req_flags: libav flag (AV_OPT_FLAG_XXX), which is a filter for AVOption loaded by the Context (default = 0: no flag restriction).
125+
*/
126+
void loadOptions( OptionMap& outOptions, void* av_class, int req_flags = 0 );
127+
void loadOptions( OptionArray& outOptions, void* av_class, int req_flags = 0 );
128+
117129
}
118130

119131
#endif

src/AvTranscoder/avTranscoder.i

Lines changed: 8 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -14,67 +14,26 @@
1414

1515
%{
1616
#include <AvTranscoder/ProfileLoader.hpp>
17-
18-
#include <AvTranscoder/codec/ICodec.hpp>
19-
#include <AvTranscoder/codec/VideoCodec.hpp>
20-
#include <AvTranscoder/codec/AudioCodec.hpp>
21-
#include <AvTranscoder/codec/DataCodec.hpp>
22-
23-
#include <AvTranscoder/codedStream/IOutputStream.hpp>
24-
#include <AvTranscoder/codedStream/AvOutputStream.hpp>
25-
26-
#include <AvTranscoder/codedStream/IInputStream.hpp>
27-
#include <AvTranscoder/codedStream/AvInputStream.hpp>
28-
29-
#include <AvTranscoder/essenceStream/IOutputEssence.hpp>
30-
#include <AvTranscoder/essenceStream/AvOutputAudio.hpp>
31-
#include <AvTranscoder/essenceStream/AvOutputVideo.hpp>
32-
33-
#include <AvTranscoder/essenceStream/IInputEssence.hpp>
34-
#include <AvTranscoder/essenceStream/AvInputAudio.hpp>
35-
#include <AvTranscoder/essenceStream/AvInputVideo.hpp>
36-
#include <AvTranscoder/essenceStream/GeneratorVideo.hpp>
37-
#include <AvTranscoder/essenceStream/GeneratorAudio.hpp>
38-
39-
#include <AvTranscoder/transcoder/StreamTranscoder.hpp>
40-
#include <AvTranscoder/transcoder/Transcoder.hpp>
17+
#include <AvTranscoder/Option.hpp>
4118
%}
4219

4320
namespace std {
4421
%template(IntPair) pair< size_t, size_t >;
4522
%template(ProfileMap) map< string, string >;
4623
%template(ProfilesVector) vector< map< string, string > >;
47-
%template(DataBuffer) std::vector< unsigned char >;
4824
}
4925

5026
%include "AvTranscoder/progress/progress.i"
5127
%include "AvTranscoder/mediaProperty/mediaProperty.i"
5228
%include "AvTranscoder/frame/frame.i"
5329

5430
%include <AvTranscoder/ProfileLoader.hpp>
31+
%include <AvTranscoder/Option.hpp>
5532

56-
%include <AvTranscoder/codec/ICodec.hpp>
57-
%include <AvTranscoder/codec/VideoCodec.hpp>
58-
%include <AvTranscoder/codec/AudioCodec.hpp>
59-
%include <AvTranscoder/codec/DataCodec.hpp>
60-
61-
%include <AvTranscoder/codedStream/IOutputStream.hpp>
62-
%include <AvTranscoder/codedStream/AvOutputStream.hpp>
63-
64-
%include <AvTranscoder/codedStream/IInputStream.hpp>
65-
%include <AvTranscoder/codedStream/AvInputStream.hpp>
66-
67-
%include <AvTranscoder/essenceStream/IOutputEssence.hpp>
68-
%include <AvTranscoder/essenceStream/AvOutputAudio.hpp>
69-
%include <AvTranscoder/essenceStream/AvOutputVideo.hpp>
70-
71-
%include <AvTranscoder/essenceStream/IInputEssence.hpp>
72-
%include <AvTranscoder/essenceStream/AvInputAudio.hpp>
73-
%include <AvTranscoder/essenceStream/AvInputVideo.hpp>
74-
%include <AvTranscoder/essenceStream/GeneratorVideo.hpp>
75-
%include <AvTranscoder/essenceStream/GeneratorAudio.hpp>
76-
33+
%include "AvTranscoder/codec/codec.i"
34+
%include "AvTranscoder/stream/stream.i"
35+
%include "AvTranscoder/decoder/decoder.i"
36+
%include "AvTranscoder/encoder/encoder.i"
37+
%include "AvTranscoder/transform/transform.i"
7738
%include "AvTranscoder/file/file.i"
78-
79-
%include <AvTranscoder/transcoder/StreamTranscoder.hpp>
80-
%include <AvTranscoder/transcoder/Transcoder.hpp>
39+
%include "AvTranscoder/transcoder/transcoder.i"

src/AvTranscoder/codec/AudioCodec.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,9 @@ AudioCodec::AudioCodec( const ICodec& codec )
2222

2323
AudioFrameDesc AudioCodec::getAudioFrameDesc() const
2424
{
25-
assert( _codecContext != NULL );
26-
27-
AudioFrameDesc audioFrameDesc( _codecContext->sample_rate, _codecContext->channels, _codecContext->sample_fmt );
25+
assert( _avCodecContext != NULL );
26+
AudioFrameDesc audioFrameDesc( _avCodecContext->sample_rate, _avCodecContext->channels, _avCodecContext->sample_fmt );
2827
// audioFrameDesc.setFps( 25 );
29-
3028
return audioFrameDesc;
3129
}
3230

@@ -37,9 +35,9 @@ void AudioCodec::setAudioParameters( const AudioFrameDesc& audioFrameDesc )
3735

3836
void AudioCodec::setAudioParameters( const size_t sampleRate, const size_t channels, const AVSampleFormat sampleFormat )
3937
{
40-
_codecContext->sample_rate = sampleRate;
41-
_codecContext->channels = channels;
42-
_codecContext->sample_fmt = sampleFormat;
38+
_avCodecContext->sample_rate = sampleRate;
39+
_avCodecContext->channels = channels;
40+
_avCodecContext->sample_fmt = sampleFormat;
4341
}
4442

4543
}

0 commit comments

Comments
 (0)