@@ -289,40 +289,44 @@ geode::Result<> Recorder::Impl::filterFrame(AVFrame* inputFrame, AVFrame* output
289289}
290290
291291void 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
328332END_FFMPEG_NAMESPACE_V
0 commit comments