Skip to content

Commit d5a155a

Browse files
author
Clement Champetier
committed
AudioEncoder: refactored encodeFrame method
Add private method encode.
1 parent 5828fe3 commit d5a155a

File tree

2 files changed

+17
-31
lines changed

2 files changed

+17
-31
lines changed

src/AvTranscoder/encoder/AudioEncoder.cpp

Lines changed: 14 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,6 @@ bool AudioEncoder::encodeFrame(const Frame& sourceFrame, CodedData& codedFrame)
9696
AVCodecContext& avCodecContext = _codec.getAVCodecContext();
9797

9898
AVPacket& packet = codedFrame.getAVPacket();
99-
packet.data = NULL;
100-
packet.stream_index = 0;
101-
10299
if((avCodecContext.coded_frame) && (avCodecContext.coded_frame->pts != (int)AV_NOPTS_VALUE))
103100
{
104101
packet.pts = avCodecContext.coded_frame->pts;
@@ -109,53 +106,39 @@ bool AudioEncoder::encodeFrame(const Frame& sourceFrame, CodedData& codedFrame)
109106
packet.flags |= AV_PKT_FLAG_KEY;
110107
}
111108

112-
#if LIBAVCODEC_VERSION_MAJOR > 53
113-
int gotPacket = 0;
114-
int ret = avcodec_encode_audio2(&avCodecContext, &packet, &sourceFrame.getAVFrame(), &gotPacket);
115-
if(ret != 0)
116-
{
117-
throw std::runtime_error("Encode audio frame error: avcodec encode audio frame - " +
118-
getDescriptionFromErrorCode(ret));
119-
}
120-
return ret == 0 && gotPacket == 1;
121-
#else
122-
int ret = avcodec_encode_audio(&avCodecContext, packet.data, packet.size, &sourceFrame.getAVFrame());
123-
if(ret < 0)
124-
{
125-
throw std::runtime_error("Encode audio frame error: avcodec encode audio frame - " +
126-
getDescriptionFromErrorCode(ret));
127-
}
128-
return ret == 0;
129-
#endif
109+
return encode(&sourceFrame.getAVFrame(), packet);
130110
}
131111

132112
bool AudioEncoder::encodeFrame(CodedData& codedFrame)
133113
{
134-
AVCodecContext& avCodecContext = _codec.getAVCodecContext();
114+
return encode(NULL, codedFrame.getAVPacket());
115+
}
135116

136-
AVPacket& packet = codedFrame.getAVPacket();
137-
packet.data = NULL;
138-
packet.stream_index = 0;
117+
bool AudioEncoder::encode(const AVFrame* decodedData, AVPacket& encodedData)
118+
{
119+
// Be sure that data of AVPacket is NULL so that the encoder will allocate it
120+
encodedData.data = NULL;
121+
encodedData.stream_index = 0;
139122

123+
AVCodecContext& avCodecContext = _codec.getAVCodecContext();
140124
#if LIBAVCODEC_VERSION_MAJOR > 53
141125
int gotPacket = 0;
142-
int ret = avcodec_encode_audio2(&avCodecContext, &packet, NULL, &gotPacket);
126+
const int ret = avcodec_encode_audio2(&avCodecContext, &encodedData, decodedData, &gotPacket);
143127
if(ret != 0)
144128
{
145-
throw std::runtime_error("Encode audio frame error: avcodec encode last audio frame - " +
129+
throw std::runtime_error("Encode audio frame error: avcodec encode audio frame - " +
146130
getDescriptionFromErrorCode(ret));
147131
}
148132
return ret == 0 && gotPacket == 1;
149-
150133
#else
151-
int ret = avcodec_encode_audio(&avCodecContext, packet.data, packet.size, NULL);
134+
const int ret = avcodec_encode_audio(&avCodecContext, encodedData.data, encodedData.size, decodedData);
152135
if(ret < 0)
153136
{
154-
throw std::runtime_error("Encode audio frame error: avcodec encode last audio frame - " +
137+
throw std::runtime_error("Encode audio frame error: avcodec encode audio frame - " +
155138
getDescriptionFromErrorCode(ret));
156139
}
157140
return ret == 0;
158-
159141
#endif
160142
}
143+
161144
}

src/AvTranscoder/encoder/AudioEncoder.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ class AvExport AudioEncoder : public IEncoder
2424
ICodec& getCodec() { return _codec; }
2525
AudioCodec& getAudioCodec() { return _codec; }
2626

27+
private:
28+
bool encode(const AVFrame* decodedData, AVPacket& encodedData);
29+
2730
private:
2831
AudioCodec _codec;
2932
};

0 commit comments

Comments
 (0)