You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
if (send_packet_err < 0 && send_packet_err != AVERROR_EOF) {
1115
-
ZmqLogger::Instance()->AppendDebugMethod("FFmpegReader::GetAVFrame (Packet not sent)",
1116
-
"send_packet_err", send_packet_err);
1117
-
}
1118
-
else {
1119
-
int receive_frame_err = 0;
1120
-
AVFrame *next_frame2;
1121
-
#if USE_HW_ACCEL
1122
-
if (hw_de_on && hw_de_supported) {
1123
-
next_frame2 = AV_ALLOCATE_FRAME();
1130
+
ZmqLogger::Instance()->AppendDebugMethod("FFmpegReader::GetAVFrame (send packet: Not sent [" + av_err2string(send_packet_err) + "])", "send_packet_err", send_packet_err, "send_packet_pts", send_packet_pts);
1131
+
if (send_packet_err == AVERROR(EAGAIN)) {
1132
+
hold_packet = true;
1133
+
ZmqLogger::Instance()->AppendDebugMethod("FFmpegReader::GetAVFrame (send packet: AVERROR(EAGAIN): user must read output with avcodec_receive_frame()", "send_packet_pts", send_packet_pts);
1124
1134
}
1125
-
else
1126
-
#endif// USE_HW_ACCEL
1127
-
{
1128
-
next_frame2 = next_frame;
1135
+
if (send_packet_err == AVERROR(EINVAL)) {
1136
+
ZmqLogger::Instance()->AppendDebugMethod("FFmpegReader::GetAVFrame (send packet: AVERROR(EINVAL): codec not opened, it is an encoder, or requires flush", "send_packet_pts", send_packet_pts);
1137
+
}
1138
+
if (send_packet_err == AVERROR(ENOMEM)) {
1139
+
ZmqLogger::Instance()->AppendDebugMethod("FFmpegReader::GetAVFrame (send packet: AVERROR(ENOMEM): failed to add packet to internal queue, or legitimate decoding errors", "send_packet_pts", send_packet_pts);
ZmqLogger::Instance()->AppendDebugMethod("FFmpegReader::GetAVFrame (frame not ready yet from decoder)");
1144
-
break;
1175
+
if (receive_frame_err == AVERROR(EAGAIN)) {
1176
+
ZmqLogger::Instance()->AppendDebugMethod(
1177
+
"FFmpegReader::GetAVFrame (receive frame: AVERROR(EAGAIN): output is not available in this state - user must try to send new input)", "send_packet_pts", send_packet_pts);
1145
1178
}
1146
-
1147
-
#if USE_HW_ACCEL
1148
-
if (hw_de_on && hw_de_supported) {
1149
-
int err;
1150
-
if (next_frame2->format == hw_de_av_pix_fmt) {
1151
-
next_frame->format = AV_PIX_FMT_YUV420P;
1152
-
if ((err = av_hwframe_transfer_data(next_frame,next_frame2,0)) < 0) {
1153
-
ZmqLogger::Instance()->AppendDebugMethod("FFmpegReader::GetAVFrame (Failed to transfer data to output frame)");
1154
-
}
1155
-
if ((err = av_frame_copy_props(next_frame,next_frame2)) < 0) {
1156
-
ZmqLogger::Instance()->AppendDebugMethod("FFmpegReader::GetAVFrame (Failed to copy props to output frame)");
1157
-
}
1158
-
}
1159
-
}
1160
-
else
1161
-
#endif// USE_HW_ACCEL
1162
-
{ // No hardware acceleration used -> no copy from GPU memory needed
1163
-
next_frame = next_frame2;
1164
-
}
1165
-
1166
-
// TODO also handle possible further frames
1167
-
// Use only the first frame like avcodec_decode_video2
"FFmpegReader::GetAVFrame (receive frame: AVERROR_INPUT_CHANGED: current decoded frame has changed parameters with respect to first decoded frame)", "send_packet_pts", send_packet_pts);
1186
1182
}
1187
1183
1188
-
// break out of loop after each successful image returned
1184
+
// Break out of decoding loop
1185
+
// Nothing ready for decoding yet
1189
1186
break;
1190
1187
}
1191
-
#if USE_HW_ACCEL
1188
+
1189
+
#if USE_HW_ACCEL
1192
1190
if (hw_de_on && hw_de_supported) {
1193
-
AV_FREE_FRAME(&next_frame2);
1191
+
int err;
1192
+
if (next_frame2->format == hw_de_av_pix_fmt) {
1193
+
next_frame->format = AV_PIX_FMT_YUV420P;
1194
+
if ((err = av_hwframe_transfer_data(next_frame,next_frame2,0)) < 0) {
1195
+
ZmqLogger::Instance()->AppendDebugMethod("FFmpegReader::GetAVFrame (Failed to transfer data to output frame)", "hw_de_on", hw_de_on);
1196
+
}
1197
+
if ((err = av_frame_copy_props(next_frame,next_frame2)) < 0) {
1198
+
ZmqLogger::Instance()->AppendDebugMethod("FFmpegReader::GetAVFrame (Failed to copy props to output frame)", "hw_de_on", hw_de_on);
1199
+
}
1200
+
}
1194
1201
}
1195
-
#endif// USE_HW_ACCEL
1202
+
else
1203
+
#endif// USE_HW_ACCEL
1204
+
{ // No hardware acceleration used -> no copy from GPU memory needed
1205
+
next_frame = next_frame2;
1206
+
}
1207
+
1208
+
// TODO also handle possible further frames
1209
+
// Use only the first frame like avcodec_decode_video2
0 commit comments