Skip to content

Commit bd2cf15

Browse files
author
Clement Champetier
committed
VideoEncoder: refactored encodeFrame method
Add private method encode.
1 parent 1f12795 commit bd2cf15

File tree

2 files changed

+16
-29
lines changed

2 files changed

+16
-29
lines changed

src/AvTranscoder/encoder/VideoEncoder.cpp

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,6 @@ bool VideoEncoder::encodeFrame(const Frame& sourceFrame, CodedData& codedFrame)
109109
AVCodecContext& avCodecContext = _codec.getAVCodecContext();
110110

111111
AVPacket& packet = codedFrame.getAVPacket();
112-
packet.data = NULL;
113-
packet.stream_index = 0;
114-
115112
if((avCodecContext.coded_frame) && (avCodecContext.coded_frame->pts != (int)AV_NOPTS_VALUE))
116113
{
117114
packet.pts = avCodecContext.coded_frame->pts;
@@ -122,51 +119,38 @@ bool VideoEncoder::encodeFrame(const Frame& sourceFrame, CodedData& codedFrame)
122119
packet.flags |= AV_PKT_FLAG_KEY;
123120
}
124121

125-
#if LIBAVCODEC_VERSION_MAJOR > 53
126-
int gotPacket = 0;
127-
int ret = avcodec_encode_video2(&avCodecContext, &packet, &sourceFrame.getAVFrame(), &gotPacket);
128-
if(ret != 0)
129-
{
130-
throw std::runtime_error("Encode video frame error: avcodec encode video frame - " +
131-
getDescriptionFromErrorCode(ret));
132-
}
133-
return ret == 0 && gotPacket == 1;
134-
#else
135-
int ret = avcodec_encode_video(&avCodecContext, packet.data, packet.size, &sourceFrame.getAVFrame());
136-
if(ret < 0)
137-
{
138-
throw std::runtime_error("Encode video frame error: avcodec encode video frame - " +
139-
getDescriptionFromErrorCode(ret));
140-
}
141-
return ret == 0;
142-
#endif
122+
return encode(&sourceFrame.getAVFrame(), packet);
143123
}
144124

145125
bool VideoEncoder::encodeFrame(CodedData& codedFrame)
146126
{
147-
AVCodecContext& avCodecContext = _codec.getAVCodecContext();
127+
return encode(NULL, codedFrame.getAVPacket());
128+
}
148129

149-
AVPacket& packet = codedFrame.getAVPacket();
150-
packet.data = NULL;
151-
packet.stream_index = 0;
130+
bool VideoEncoder::encode(const AVFrame* decodedData, AVPacket& encodedData)
131+
{
132+
encodedData.data = NULL;
133+
encodedData.stream_index = 0;
152134

135+
AVCodecContext& avCodecContext = _codec.getAVCodecContext();
153136
#if LIBAVCODEC_VERSION_MAJOR > 53
154137
int gotPacket = 0;
155-
int ret = avcodec_encode_video2(&avCodecContext, &packet, NULL, &gotPacket);
138+
int ret = avcodec_encode_video2(&avCodecContext, &encodedData, decodedData, &gotPacket);
156139
if(ret != 0)
157140
{
158-
throw std::runtime_error("Encode video frame error: avcodec encode last video frame - " +
141+
throw std::runtime_error("Encode video frame error: avcodec encode video frame - " +
159142
getDescriptionFromErrorCode(ret));
160143
}
161144
return ret == 0 && gotPacket == 1;
162145
#else
163-
int ret = avcodec_encode_video(&avCodecContext, packet.data, packet.size, NULL);
146+
int ret = avcodec_encode_video(&avCodecContext, encodedData.data, encodedData.size, decodedData);
164147
if(ret < 0)
165148
{
166-
throw std::runtime_error("Encode video frame error: avcodec encode last video frame - " +
149+
throw std::runtime_error("Encode video frame error: avcodec encode video frame - " +
167150
getDescriptionFromErrorCode(ret));
168151
}
169152
return ret == 0;
170153
#endif
171154
}
155+
172156
}

src/AvTranscoder/encoder/VideoEncoder.hpp

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

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

0 commit comments

Comments
 (0)