From 190ac6997536ada195548cd2d4db87f252c4d1bc Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 8 May 2018 12:02:08 -0400 Subject: [PATCH] reintroduce FfmpegInterruptCallBack so that av_read_frame can be made to quit --- src/zm_ffmpeg_camera.cpp | 8 +++++++- src/zm_ffmpeg_camera.h | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/zm_ffmpeg_camera.cpp b/src/zm_ffmpeg_camera.cpp index 4cf405b50..591bef464 100644 --- a/src/zm_ffmpeg_camera.cpp +++ b/src/zm_ffmpeg_camera.cpp @@ -341,11 +341,13 @@ int FfmpegCamera::OpenFfmpeg() { Debug(1, "Calling avformat_open_input for %s", mPath.c_str()); - //mFormatContext = avformat_alloc_context( ); + mFormatContext = avformat_alloc_context( ); // Speed up find_stream_info //FIXME can speed up initial analysis but need sensible parameters... //mFormatContext->probesize = 32; //mFormatContext->max_analyze_duration = 32; + mFormatContext->interrupt_callback.callback = FfmpegInterruptCallback; + mFormatContext->interrupt_callback.opaque = this; if ( avformat_open_input(&mFormatContext, mPath.c_str(), NULL, &opts) != 0 ) #endif @@ -978,6 +980,10 @@ int FfmpegCamera::CaptureAndRecord( Image &image, timeval recording, char* event return frameCount; } // end FfmpegCamera::CaptureAndRecord +int FfmpegCamera::FfmpegInterruptCallback(void *ctx) { + //FfmpegCamera* camera = reinterpret_cast(ctx); + return zm_terminate; +} #endif // HAVE_LIBAVFORMAT diff --git a/src/zm_ffmpeg_camera.h b/src/zm_ffmpeg_camera.h index db7ff8684..d41518bb7 100644 --- a/src/zm_ffmpeg_camera.h +++ b/src/zm_ffmpeg_camera.h @@ -99,11 +99,12 @@ class FfmpegCamera : public Camera { void Initialise(); void Terminate(); + static int FfmpegInterruptCallback(void*ctx); + int PrimeCapture(); int PreCapture(); int Capture( Image &image ); int CaptureAndRecord( Image &image, timeval recording, char* event_directory ); int PostCapture(); }; - #endif // ZM_FFMPEG_CAMERA_H