@@ -289,40 +289,44 @@ geode::Result<> Recorder::Impl::filterFrame(AVFrame* inputFrame, AVFrame* output
289
289
}
290
290
291
291
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
+ }
303
300
}
304
301
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);
306
307
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)
310
311
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);
313
318
}
314
- avformat_free_context (m_formatContext);
315
319
316
320
if (m_filterGraph) {
317
321
avfilter_graph_free (&m_filterGraph);
318
322
av_frame_free (&m_filteredFrame);
319
323
}
320
324
321
- if (m_hwDevice) {
325
+ if (m_hwDevice)
322
326
av_buffer_unref (&m_hwDevice);
323
- }
324
327
325
- av_packet_free (&m_packet);
328
+ if (m_packet)
329
+ av_packet_free (&m_packet);
326
330
}
327
331
328
332
END_FFMPEG_NAMESPACE_V
0 commit comments