@@ -96,9 +96,6 @@ bool AudioEncoder::encodeFrame(const Frame& sourceFrame, CodedData& codedFrame)
96
96
AVCodecContext& avCodecContext = _codec.getAVCodecContext ();
97
97
98
98
AVPacket& packet = codedFrame.getAVPacket ();
99
- packet.data = NULL ;
100
- packet.stream_index = 0 ;
101
-
102
99
if ((avCodecContext.coded_frame ) && (avCodecContext.coded_frame ->pts != (int )AV_NOPTS_VALUE))
103
100
{
104
101
packet.pts = avCodecContext.coded_frame ->pts ;
@@ -109,53 +106,39 @@ bool AudioEncoder::encodeFrame(const Frame& sourceFrame, CodedData& codedFrame)
109
106
packet.flags |= AV_PKT_FLAG_KEY;
110
107
}
111
108
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);
130
110
}
131
111
132
112
bool AudioEncoder::encodeFrame (CodedData& codedFrame)
133
113
{
134
- AVCodecContext& avCodecContext = _codec.getAVCodecContext ();
114
+ return encode (NULL , codedFrame.getAVPacket ());
115
+ }
135
116
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 ;
139
122
123
+ AVCodecContext& avCodecContext = _codec.getAVCodecContext ();
140
124
#if LIBAVCODEC_VERSION_MAJOR > 53
141
125
int gotPacket = 0 ;
142
- int ret = avcodec_encode_audio2 (&avCodecContext, &packet, NULL , &gotPacket);
126
+ const int ret = avcodec_encode_audio2 (&avCodecContext, &encodedData, decodedData , &gotPacket);
143
127
if (ret != 0 )
144
128
{
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 - " +
146
130
getDescriptionFromErrorCode (ret));
147
131
}
148
132
return ret == 0 && gotPacket == 1 ;
149
-
150
133
#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 );
152
135
if (ret < 0 )
153
136
{
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 - " +
155
138
getDescriptionFromErrorCode (ret));
156
139
}
157
140
return ret == 0 ;
158
-
159
141
#endif
160
142
}
143
+
161
144
}
0 commit comments