File tree Expand file tree Collapse file tree 6 files changed +31
-74
lines changed Expand file tree Collapse file tree 6 files changed +31
-74
lines changed Original file line number Diff line number Diff line change @@ -41,6 +41,29 @@ ICodec::~ICodec()
41
41
_avCodecContext = NULL ;
42
42
}
43
43
44
+ void ICodec::open ()
45
+ {
46
+ if ( ! _avCodecContext )
47
+ throw std::runtime_error ( " unable to open a codec with no codec context" );
48
+
49
+ int ret = avcodec_open2 ( _avCodecContext, _avCodec, NULL );
50
+ if ( ret < 0 )
51
+ {
52
+ std::string msg = " unable open codec: " ;
53
+ msg += _avCodec->long_name ;
54
+ msg += " (" ;
55
+ msg += _avCodec->name ;
56
+ msg += " ) " ;
57
+ avcodec_close ( _avCodecContext );
58
+
59
+ char err[AV_ERROR_MAX_STRING_SIZE];
60
+ av_strerror ( ret, err, sizeof (err) );
61
+ msg += err;
62
+
63
+ throw std::runtime_error ( msg );
64
+ }
65
+ }
66
+
44
67
std::string ICodec::getCodecName () const
45
68
{
46
69
assert ( _avCodec != NULL );
Original file line number Diff line number Diff line change @@ -26,6 +26,9 @@ class AvExport ICodec
26
26
27
27
virtual ~ICodec () = 0 ;
28
28
29
+ // / Initialize the codec context.
30
+ void open ();
31
+
29
32
std::string getCodecName () const ;
30
33
AVCodecID getCodecId () const ;
31
34
ECodecType getCodecType () const { return _type; }
Original file line number Diff line number Diff line change @@ -44,28 +44,7 @@ AudioDecoder::~AudioDecoder()
44
44
45
45
void AudioDecoder::setup ()
46
46
{
47
- AVCodecContext& avCodecContext = _inputStream->getAudioCodec ().getAVCodecContext ();
48
- AVCodec& avCodec = _inputStream->getAudioCodec ().getAVCodec ();
49
-
50
- avCodecContext.channels = _inputStream->getAudioCodec ().getAudioFrameDesc ().getChannels ();
51
-
52
- int ret = avcodec_open2 ( &avCodecContext, &avCodec, NULL );
53
-
54
- if ( ret < 0 || &avCodecContext == NULL || &avCodec == NULL )
55
- {
56
- std::string msg = " unable open audio codec: " ;
57
- msg += avCodec.long_name ;
58
- msg += " (" ;
59
- msg += avCodec.name ;
60
- msg += " ) " ;
61
- avcodec_close ( &avCodecContext );
62
-
63
- char err[AV_ERROR_MAX_STRING_SIZE];
64
- av_strerror ( ret, err, sizeof (err) );
65
- msg += err;
66
-
67
- throw std::runtime_error ( msg );
68
- }
47
+ _inputStream->getAudioCodec ().open ();
69
48
70
49
#if LIBAVCODEC_VERSION_MAJOR > 54
71
50
_frame = av_frame_alloc ();
Original file line number Diff line number Diff line change @@ -42,24 +42,8 @@ VideoDecoder::~VideoDecoder()
42
42
43
43
void VideoDecoder::setup ()
44
44
{
45
- AVCodecContext& avCodecContext = _inputStream->getVideoCodec ().getAVCodecContext ();
46
- AVCodec& avCodec = _inputStream->getVideoCodec ().getAVCodec ();
47
-
48
- // if( avCodec->capabilities & CODEC_CAP_TRUNCATED )
49
- // avCodecContext->flags |= CODEC_FLAG_TRUNCATED;
50
-
51
- int ret = avcodec_open2 ( &avCodecContext, &avCodec, NULL );
52
-
53
- if ( ret < 0 || &avCodecContext == NULL || &avCodec == NULL )
54
- {
55
- std::string msg = " unable open video codec: " ;
56
- msg += avCodec.long_name ;
57
- msg += " (" ;
58
- msg += avCodec.name ;
59
- msg += " )" ;
60
- avcodec_close ( &avCodecContext );
61
- throw std::runtime_error ( msg );
62
- }
45
+
46
+ _inputStream->getVideoCodec ().open ();
63
47
64
48
#if LIBAVCODEC_VERSION_MAJOR > 54
65
49
_frame = av_frame_alloc ();
Original file line number Diff line number Diff line change @@ -19,21 +19,7 @@ AudioEncoder::AudioEncoder( const std::string& audioCodecName )
19
19
20
20
void AudioEncoder::setup ()
21
21
{
22
- av_register_all ();
23
-
24
- AVCodecContext& avCodecContext = _codec.getAVCodecContext ();
25
- const AVCodec& avCodec = _codec.getAVCodec ();
26
-
27
- // try to open encoder with parameters.
28
- int ret = avcodec_open2 ( &avCodecContext, &avCodec, NULL );
29
- if ( ret < 0 )
30
- {
31
- char err[AV_ERROR_MAX_STRING_SIZE];
32
- av_strerror ( ret, err, sizeof (err) );
33
- std::string msg = " could not open audio encoder " + _codec.getCodecName () +" : " ;
34
- msg += err;
35
- throw std::runtime_error ( msg );
36
- }
22
+ _codec.open ();
37
23
}
38
24
39
25
bool AudioEncoder::encodeFrame ( const Frame& sourceFrame, Frame& codedFrame )
Original file line number Diff line number Diff line change @@ -20,25 +20,7 @@ VideoEncoder::VideoEncoder( const std::string& videoCodecName )
20
20
21
21
void VideoEncoder::setup ()
22
22
{
23
- av_register_all ();
24
-
25
- AVCodecContext& avCodecContext ( _codec.getAVCodecContext () );
26
-
27
- if ( &avCodecContext == NULL )
28
- {
29
- throw std::runtime_error ( " could not allocate video codec context" );
30
- }
31
-
32
- // try to open encoder with parameters
33
- int ret = avcodec_open2 ( &avCodecContext, &_codec.getAVCodec (), NULL );
34
- if ( ret < 0 )
35
- {
36
- char err[AV_ERROR_MAX_STRING_SIZE];
37
- av_strerror ( ret, err, sizeof (err) );
38
- std::string msg = " could not open video encoder " + _codec.getCodecName () +" : " ;
39
- msg += err;
40
- throw std::runtime_error ( msg );
41
- }
23
+ _codec.open ();
42
24
}
43
25
44
26
You can’t perform that action at this time.
0 commit comments