Skip to content

Commit fba1268

Browse files
committed
ICodec: add enum ECodecType to define if it's for encoding or decoding
* Codec class represents a codec. Currently it concerns only encoding codec (see Codec::setCodec, avcodec_find_encoder). * With this commit, the class can manage encoding or decoding codecs. * Update constructors of subclasses (VideoCodec, AudioCodec, DataCodec). * Update constructors of CodedStream and EssenceStream which use these codec objects. * Update genericProcessor app: add type when create the codec for dummy.
1 parent 5dc073d commit fba1268

File tree

13 files changed

+67
-31
lines changed

13 files changed

+67
-31
lines changed

app/genericProcessor/genericProcessor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ void parseConfigFile( const std::string& configFilename, avtranscoder::Transcode
6666
avtranscoder::Pixel inputPixel( dummyPixelFormat );
6767
imageDesc.setPixel( inputPixel );
6868

69-
avtranscoder::VideoCodec inputVideoCodec( dummyVideoCodec );
69+
avtranscoder::VideoCodec inputVideoCodec( avtranscoder::eCodecTypeEncoder, dummyVideoCodec );
7070
inputVideoCodec.setImageParameters( imageDesc );
7171

7272
transcoder.add( filename, streamIndex, subStreamIndex, transcodeProfile, inputVideoCodec );

src/AvTranscoder/codec/AudioCodec.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
namespace avtranscoder
66
{
77

8-
AudioCodec::AudioCodec( const std::string& codecName )
9-
: ICodec( codecName )
8+
AudioCodec::AudioCodec( const ECodecType type, const std::string& codecName )
9+
: ICodec( type, codecName )
1010
{
1111
}
1212

13-
AudioCodec::AudioCodec( const AVCodecID codecId )
14-
: ICodec( codecId )
13+
AudioCodec::AudioCodec( const ECodecType type, const AVCodecID codecId )
14+
: ICodec( type, codecId )
1515
{
1616
}
1717

src/AvTranscoder/codec/AudioCodec.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ namespace avtranscoder
1010
class AvExport AudioCodec : public ICodec
1111
{
1212
public:
13-
AudioCodec( const std::string& codecName = "" );
14-
AudioCodec( const AVCodecID codecId );
13+
AudioCodec( const ECodecType type, const std::string& codecName = "" );
14+
AudioCodec( const ECodecType type, const AVCodecID codecId );
1515
AudioCodec( const ICodec& codec );
1616

1717
AudioFrameDesc getFrameDesc() const;

src/AvTranscoder/codec/DataCodec.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
namespace avtranscoder
44
{
55

6-
DataCodec::DataCodec( const std::string& codecName )
7-
: ICodec( "" )
6+
DataCodec::DataCodec( const ECodecType type, const std::string& codecName )
7+
: ICodec( type, codecName )
88
{
99
}
1010

11-
DataCodec::DataCodec( const AVCodecID codecId )
12-
: ICodec( "" )
11+
DataCodec::DataCodec( const ECodecType type, const AVCodecID codecId )
12+
: ICodec( type, codecId )
1313
{
1414
}
1515

src/AvTranscoder/codec/DataCodec.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ namespace avtranscoder
99
class AvExport DataCodec : public ICodec
1010
{
1111
public:
12-
DataCodec( const std::string& codecName = "" );
13-
DataCodec( const AVCodecID codecId );
12+
DataCodec( const ECodecType type, const std::string& codecName = "" );
13+
DataCodec( const ECodecType type, const AVCodecID codecId );
1414
DataCodec( const ICodec& codec );
1515
};
1616

src/AvTranscoder/codec/ICodec.cpp

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,27 @@
55

66
namespace avtranscoder {
77

8-
ICodec::ICodec( const std::string& codecName )
8+
ICodec::ICodec( const ECodecType type, const std::string& codecName )
99
: _codec( NULL )
1010
, _codecContext( NULL )
1111
{
1212
if( codecName.size() )
13-
setEncoderCodec( codecName );
13+
{
14+
if( type == eCodecTypeEncoder )
15+
setEncoderCodec( codecName );
16+
else if( type == eCodecTypeDecoder )
17+
setDecoderCodec( codecName );
18+
}
1419
}
1520

16-
ICodec::ICodec( const AVCodecID codecId )
21+
ICodec::ICodec( const ECodecType type, const AVCodecID codecId )
1722
: _codec( NULL )
1823
, _codecContext( NULL )
1924
{
20-
setEncoderCodec( codecId );
25+
if( type == eCodecTypeEncoder )
26+
setEncoderCodec( codecId );
27+
else if( type == eCodecTypeDecoder )
28+
setDecoderCodec( codecId );
2129
}
2230

2331
std::string ICodec::getCodecName() const
@@ -52,6 +60,20 @@ void ICodec::setEncoderCodec( const AVCodecID codecId )
5260
initCodecContext();
5361
}
5462

63+
void ICodec::setDecoderCodec( const std::string& codecName )
64+
{
65+
avcodec_register_all(); // Warning: should be called only once
66+
_codec = avcodec_find_decoder_by_name( codecName.c_str() );
67+
initCodecContext();
68+
}
69+
70+
void ICodec::setDecoderCodec( const AVCodecID codecId )
71+
{
72+
avcodec_register_all(); // Warning: should be called only once
73+
_codec = avcodec_find_decoder( codecId );
74+
initCodecContext();
75+
}
76+
5577
void ICodec::initCodecContext( )
5678
{
5779
if( _codec == NULL )

src/AvTranscoder/codec/ICodec.hpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,21 @@ enum AVCodecID;
1212
namespace avtranscoder
1313
{
1414

15+
/**
16+
* @brief Define if a codec is for encoding or decoding.
17+
*/
18+
enum ECodecType
19+
{
20+
eCodecTypeEncoder,
21+
eCodecTypeDecoder
22+
};
23+
1524
class AvExport ICodec
1625
{
1726
public:
18-
ICodec( const std::string& codecName );
19-
ICodec( const AVCodecID codecId );
20-
27+
ICodec( const ECodecType type, const std::string& codecName );
28+
ICodec( const ECodecType type, const AVCodecID codecId );
29+
2130
virtual ~ICodec() {};
2231

2332
std::string getCodecName() const;
@@ -27,6 +36,9 @@ class AvExport ICodec
2736

2837
void setEncoderCodec( const std::string& codecName );
2938
void setEncoderCodec( const AVCodecID codecId );
39+
40+
void setDecoderCodec( const std::string& codecName );
41+
void setDecoderCodec( const AVCodecID codecId );
3042

3143
#ifndef SWIG
3244
AVCodec* getAVCodec() const { return _codec; }

src/AvTranscoder/codec/VideoCodec.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
namespace avtranscoder
66
{
77

8-
VideoCodec::VideoCodec( const std::string& codecName )
9-
: ICodec( codecName )
8+
VideoCodec::VideoCodec( const ECodecType type, const std::string& codecName )
9+
: ICodec( type, codecName )
1010
{
1111
}
1212

13-
VideoCodec::VideoCodec( const AVCodecID codecId )
14-
: ICodec( codecId )
13+
VideoCodec::VideoCodec( const ECodecType type, const AVCodecID codecId )
14+
: ICodec( type, codecId )
1515
{
1616
}
1717

src/AvTranscoder/codec/VideoCodec.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ namespace avtranscoder
1212
class AvExport VideoCodec : public ICodec
1313
{
1414
public:
15-
VideoCodec( const std::string& codecName = "" );
16-
VideoCodec( const AVCodecID codecId );
15+
VideoCodec( const ECodecType type, const std::string& codecName = "" );
16+
VideoCodec( const ECodecType type, const AVCodecID codecId );
1717
VideoCodec( const ICodec& codec );
1818

1919
VideoFrameDesc getVideoFrameDesc() const;

src/AvTranscoder/codedStream/AvInputStream.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ AvInputStream::AvInputStream( InputFile& inputFile, const size_t streamIndex )
2727
{
2828
case AVMEDIA_TYPE_VIDEO:
2929
{
30-
VideoCodec* videoCodec = new VideoCodec( context->codec_id );
30+
VideoCodec* videoCodec = new VideoCodec( eCodecTypeDecoder, context->codec_id );
3131
videoCodec->setImageParameters( context->width, context->height, context->pix_fmt );
3232
videoCodec->setTimeBase( context->time_base.num, context->time_base.den, context->ticks_per_frame );
3333

@@ -43,15 +43,15 @@ AvInputStream::AvInputStream( InputFile& inputFile, const size_t streamIndex )
4343
// std::cout << "channels " << context->channel_layout << std::endl;
4444
// std::cout << "audio buffer read size " << context->block_align << std::endl;
4545

46-
AudioCodec* audioCodec = new AudioCodec( context->codec_id );
46+
AudioCodec* audioCodec = new AudioCodec( eCodecTypeDecoder, context->codec_id );
4747
audioCodec->setAudioParameters( context->sample_rate, context->channels, context->sample_fmt );
4848

4949
_codec = audioCodec;
5050
break;
5151
}
5252
case AVMEDIA_TYPE_DATA:
5353
{
54-
DataCodec* dataCodec = new DataCodec( context->codec_id );
54+
DataCodec* dataCodec = new DataCodec( eCodecTypeDecoder, context->codec_id );
5555

5656
_codec= dataCodec;
5757
break;

src/AvTranscoder/essenceStream/GeneratorAudio.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ namespace avtranscoder
66
GeneratorAudio::GeneratorAudio( )
77
: IInputEssence( )
88
, _inputFrame( NULL )
9+
, _audioDesc( eCodecTypeEncoder )
10+
, _frameDesc()
911
{
1012
}
1113

src/AvTranscoder/essenceStream/GeneratorVideo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace avtranscoder
88
GeneratorVideo::GeneratorVideo( )
99
: IInputEssence( )
1010
, _inputFrame( NULL )
11-
, _videoDesc()
11+
, _videoDesc( eCodecTypeEncoder )
1212
, _videoFrameDesc()
1313
, _numberOfView( 1 )
1414
{

src/AvTranscoder/essenceStream/IOutputEssence.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class AvExport IOutputEssence
1111
{
1212
public:
1313
IOutputEssence( const std::string& codecName )
14-
: _codedDesc( codecName )
14+
: _codedDesc( eCodecTypeEncoder, codecName )
1515
{}
1616

1717
virtual ~IOutputEssence()

0 commit comments

Comments
 (0)