Skip to content

Commit 88e13ba

Browse files
committed
make stop cleanup properly even if uninitialized
1 parent fc15de2 commit 88e13ba

File tree

2 files changed

+26
-22
lines changed

2 files changed

+26
-22
lines changed

mod.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
},
1414
"id": "eclipse.ffmpeg-api",
1515
"name": "FFmpeg API",
16-
"version": "v1.2.0",
16+
"version": "v1.2.1",
1717
"developers": ["Eclipse Team", "maxnu", "Prevter"],
1818
"description": "Interaction with FFmpeg made easy",
1919
"tags": ["utility", "offline", "developer"],

src/recorder.cpp

+25-21
Original file line numberDiff line numberDiff line change
@@ -289,40 +289,44 @@ geode::Result<> Recorder::Impl::filterFrame(AVFrame* inputFrame, AVFrame* output
289289
}
290290

291291
void Recorder::Impl::stop() {
292-
if(!m_init)
293-
return;
294-
295-
m_init = false;
296-
297-
avcodec_send_frame(m_codecContext, nullptr);
298-
while (avcodec_receive_packet(m_codecContext, m_packet) == 0) {
299-
av_packet_rescale_ts(m_packet, m_codecContext->time_base, m_videoStream->time_base);
300-
m_packet->stream_index = m_videoStream->index;
301-
av_interleaved_write_frame(m_formatContext, m_packet);
302-
av_packet_unref(m_packet);
292+
if(m_codecContext && m_videoStream && m_formatContext && m_packet) {
293+
avcodec_send_frame(m_codecContext, nullptr);
294+
while (avcodec_receive_packet(m_codecContext, m_packet) == 0) {
295+
av_packet_rescale_ts(m_packet, m_codecContext->time_base, m_videoStream->time_base);
296+
m_packet->stream_index = m_videoStream->index;
297+
av_interleaved_write_frame(m_formatContext, m_packet);
298+
av_packet_unref(m_packet);
299+
}
303300
}
304301

305-
av_write_trailer(m_formatContext);
302+
if(m_formatContext)
303+
av_write_trailer(m_formatContext);
304+
305+
if(m_codecContext)
306+
avcodec_free_context(&m_codecContext);
306307

307-
avcodec_free_context(&m_codecContext);
308-
av_frame_free(&m_frame);
309-
if(m_convertedFrame) //m_convertedFrame could be pointing to m_frame
308+
if(m_frame)
309+
av_frame_free(&m_frame);
310+
if(m_convertedFrame)
310311
av_frame_free(&m_convertedFrame);
311-
if (!(m_formatContext->oformat->flags & AVFMT_NOFILE)) {
312-
avio_close(m_formatContext->pb);
312+
313+
if(m_formatContext) {
314+
if (!(m_formatContext->oformat->flags & AVFMT_NOFILE)) {
315+
avio_close(m_formatContext->pb);
316+
}
317+
avformat_free_context(m_formatContext);
313318
}
314-
avformat_free_context(m_formatContext);
315319

316320
if(m_filterGraph) {
317321
avfilter_graph_free(&m_filterGraph);
318322
av_frame_free(&m_filteredFrame);
319323
}
320324

321-
if (m_hwDevice) {
325+
if (m_hwDevice)
322326
av_buffer_unref(&m_hwDevice);
323-
}
324327

325-
av_packet_free(&m_packet);
328+
if(m_packet)
329+
av_packet_free(&m_packet);
326330
}
327331

328332
END_FFMPEG_NAMESPACE_V

0 commit comments

Comments
 (0)