return when ReopenFfmpeg fails

This commit is contained in:
Isaac Connor 2018-02-13 10:11:05 -05:00
parent 9fa28106e5
commit 162a08e81d
1 changed files with 16 additions and 4 deletions

View File

@ -109,7 +109,6 @@ FfmpegCamera::FfmpegCamera( int p_id, const std::string &p_path, const std::stri
frameCount = 0; frameCount = 0;
startTime = 0; startTime = 0;
mCanCapture = false; mCanCapture = false;
mOpenStart = 0;
videoStore = NULL; videoStore = NULL;
video_last_pts = 0; video_last_pts = 0;
have_video_keyframe = false; have_video_keyframe = false;
@ -161,7 +160,7 @@ void FfmpegCamera::Terminate() {
int FfmpegCamera::PrimeCapture() { int FfmpegCamera::PrimeCapture() {
if ( mCanCapture ) { if ( mCanCapture ) {
Info( "Priming capture from %s", mPath.c_str() ); Info( "Priming capture from %s, CLosing", mPath.c_str() );
CloseFfmpeg(); CloseFfmpeg();
} }
mVideoStreamId = -1; mVideoStreamId = -1;
@ -200,7 +199,10 @@ int FfmpegCamera::Capture( Image &image ) {
(avResult == -110) (avResult == -110)
) { ) {
Info( "av_read_frame returned \"%s\". Reopening stream.", errbuf ); Info( "av_read_frame returned \"%s\". Reopening stream.", errbuf );
ReopenFfmpeg(); if ( (ret= ReopenFfmpeg() ) < 0 ) {
// OpenFfmpeg will do enough logging.
return -1;
}
continue; continue;
} }
@ -321,7 +323,6 @@ int FfmpegCamera::OpenFfmpeg() {
int ret; int ret;
mOpenStart = time(NULL);
have_video_keyframe = false; have_video_keyframe = false;
// Open the input, not necessarily a file // Open the input, not necessarily a file
@ -364,12 +365,21 @@ int FfmpegCamera::OpenFfmpeg() {
#endif #endif
{ {
Error("Unable to open input %s due to: %s", mPath.c_str(), strerror(errno)); Error("Unable to open input %s due to: %s", mPath.c_str(), strerror(errno));
#if !LIBAVFORMAT_VERSION_CHECK(53, 17, 0, 25, 0)
av_close_input_file( mFormatContext );
#else
avformat_close_input( &mFormatContext );
#endif
mFormatContext = NULL;
av_dict_free(&opts);
return -1; return -1;
} }
AVDictionaryEntry *e=NULL; AVDictionaryEntry *e=NULL;
while ( (e = av_dict_get(opts, "", e, AV_DICT_IGNORE_SUFFIX)) != NULL ) { while ( (e = av_dict_get(opts, "", e, AV_DICT_IGNORE_SUFFIX)) != NULL ) {
Warning( "Option %s not recognized by ffmpeg", e->key); Warning( "Option %s not recognized by ffmpeg", e->key);
} }
av_dict_free(&opts);
Debug(1, "Opened input"); Debug(1, "Opened input");
@ -517,6 +527,7 @@ int FfmpegCamera::OpenFfmpeg() {
Warning( "Option %s not recognized by ffmpeg", e->key); Warning( "Option %s not recognized by ffmpeg", e->key);
} }
Error( "Unable to open codec for video stream from %s", mPath.c_str() ); Error( "Unable to open codec for video stream from %s", mPath.c_str() );
av_dict_free(&opts);
return -1; return -1;
} else { } else {
@ -524,6 +535,7 @@ int FfmpegCamera::OpenFfmpeg() {
if ( (e = av_dict_get(opts, "", e, AV_DICT_IGNORE_SUFFIX)) != NULL ) { if ( (e = av_dict_get(opts, "", e, AV_DICT_IGNORE_SUFFIX)) != NULL ) {
Warning( "Option %s not recognized by ffmpeg", e->key); Warning( "Option %s not recognized by ffmpeg", e->key);
} }
av_dict_free(&opts);
} }
} }