From 64fed650d429fdbdfa4011956a2c057dd0348914 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期三, 13 十一月 2019 14:21:59 +0800
Subject: [PATCH] bug fix

---
 csrc/ffmpeg/format/FormatIn.cpp |   54 +++++++++++++++++++++++++++---------------------------
 1 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/csrc/ffmpeg/format/FormatIn.cpp b/csrc/ffmpeg/format/FormatIn.cpp
index 9f743f8..376c9de 100644
--- a/csrc/ffmpeg/format/FormatIn.cpp
+++ b/csrc/ffmpeg/format/FormatIn.cpp
@@ -38,39 +38,32 @@
 
 	FormatIn::~FormatIn()
 	{
-		if(io_ctx_){
-			if(read_io_buff_){
-				// av_free(read_io_buff_);
-				read_io_buff_ = NULL;
-			}
-			avio_context_free(&io_ctx_);
-			io_ctx_ = NULL;
+		logIt("free format in");
+		if(dec_ctx_){
+			avcodec_close(dec_ctx_);
+			avcodec_free_context(&dec_ctx_);
+			dec_ctx_ = NULL;
 		}
+
 		if(ctx_){
-			if (!ctx_->oformat){
-				avformat_free_context(ctx_);
-			}else{
-				avformat_close_input(&ctx_);
-			}
+			avformat_close_input(&ctx_);
 			ctx_ = NULL;
-			if(dec_ctx_){
-				avcodec_close(dec_ctx_);
-				dec_ctx_ = NULL;
-			}
-			
 		}
+		
 		if (handle_gb28181){
 			delete handle_gb28181;
 		}
+
+		if(io_ctx_){
+			av_freep(&io_ctx_->buffer);
+			avio_context_free(&io_ctx_);
+			io_ctx_ = NULL;
+		}
+
 	}
 
 ////////////////////////////////////////////////////////////////////////
 	int FormatIn::openWithCustomIO(void *opaque, read_packet fn, AVDictionary **options/*=NULL*/){
-		ctx_ = avformat_alloc_context();
-		if(!ctx_){
-			logIt("open with custom io create format error\n");
-			return -1;
-		}
 		read_io_buff_ = (uint8_t*)av_malloc(read_io_buff_size_);
 		if(!read_io_buff_){
 			logIt("open with custom io alloc read io buff error\n");
@@ -82,14 +75,21 @@
 			logIt("open with custom io create custom avio error\n");
 			return -1;
 		}
-		ctx_->pb = io_ctx_;
-
-		auto err = av_probe_input_buffer(ctx_->pb, &ctx_->iformat, NULL, NULL, 0, read_io_buff_size_);
-		if(err != 0){
-			logIt("open with custom io prob input buffer error:%d err: %s\n", err, getAVErrorDesc(err).c_str());
+		
+		ctx_ = avformat_alloc_context();
+		if(!ctx_){
+			logIt("open with custom io create format error\n");
 			return -1;
 		}
 
+		ctx_->pb = io_ctx_;
+
+		// auto err = av_probe_input_buffer(ctx_->pb, &ctx_->iformat, NULL, NULL, 0, 0);
+		// if(err != 0){
+		// 	logIt("open with custom io prob input buffer error:%d err: %s\n", err, getAVErrorDesc(err).c_str());
+		// 	return -1;
+		// }
+
 		return 0;
 	}
 

--
Gitblit v1.8.0