@@ -109,9 +109,6 @@ bool VideoEncoder::encodeFrame(const Frame& sourceFrame, CodedData& codedFrame)
109
109
AVCodecContext& avCodecContext = _codec.getAVCodecContext ();
110
110
111
111
AVPacket& packet = codedFrame.getAVPacket ();
112
- packet.data = NULL ;
113
- packet.stream_index = 0 ;
114
-
115
112
if ((avCodecContext.coded_frame ) && (avCodecContext.coded_frame ->pts != (int )AV_NOPTS_VALUE))
116
113
{
117
114
packet.pts = avCodecContext.coded_frame ->pts ;
@@ -122,51 +119,38 @@ bool VideoEncoder::encodeFrame(const Frame& sourceFrame, CodedData& codedFrame)
122
119
packet.flags |= AV_PKT_FLAG_KEY;
123
120
}
124
121
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);
143
123
}
144
124
145
125
bool VideoEncoder::encodeFrame (CodedData& codedFrame)
146
126
{
147
- AVCodecContext& avCodecContext = _codec.getAVCodecContext ();
127
+ return encode (NULL , codedFrame.getAVPacket ());
128
+ }
148
129
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 ;
152
134
135
+ AVCodecContext& avCodecContext = _codec.getAVCodecContext ();
153
136
#if LIBAVCODEC_VERSION_MAJOR > 53
154
137
int gotPacket = 0 ;
155
- int ret = avcodec_encode_video2 (&avCodecContext, &packet, NULL , &gotPacket);
138
+ int ret = avcodec_encode_video2 (&avCodecContext, &encodedData, decodedData , &gotPacket);
156
139
if (ret != 0 )
157
140
{
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 - " +
159
142
getDescriptionFromErrorCode (ret));
160
143
}
161
144
return ret == 0 && gotPacket == 1 ;
162
145
#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 );
164
147
if (ret < 0 )
165
148
{
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 - " +
167
150
getDescriptionFromErrorCode (ret));
168
151
}
169
152
return ret == 0 ;
170
153
#endif
171
154
}
155
+
172
156
}
0 commit comments