Browse Source

add fec_done in fec_group_t

wangyu- 6 years ago
parent
commit
f0a7b28a63
2 changed files with 10 additions and 1 deletions
  1. 8 0
      fec_manager.cpp
  2. 2 1
      fec_manager.h

+ 8 - 0
fec_manager.cpp

@@ -594,6 +594,12 @@ int fec_decode_manager_t::input(char *s,int len)
 		return 0;
 	}
 
+	if(mp[seq].fec_done!=0)
+	{
+		mylog(log_debug,"fec already done, ignore\n");
+		return -1;
+	}
+
 	if(mp[seq].group_mp.find(inner_index)!=mp[seq].group_mp.end() )
 	{
 		mylog(log_debug,"dup fec index\n");//duplicate can happen on  a normal network, so its just log_debug
@@ -730,6 +736,7 @@ int fec_decode_manager_t::input(char *s,int len)
 			}
 			assert(rs_decode2(group_data_num,group_data_num+group_redundant_num,fec_tmp_arr,len)==0); //the input data has been modified in-place
 			//this line should always succeed
+    		mp[seq].fec_done=1;
 
     		if(debug_fec_dec)
     			mylog(log_debug,"[dec]seq=%08x x=%d y=%d len=%d cnt=%d X=%d Y=%d\n",seq,group_data_num,group_redundant_num,len,int(inner_mp.size()),x_got,y_got);
@@ -818,6 +825,7 @@ int fec_decode_manager_t::input(char *s,int len)
 			mylog(log_trace,"fec done,%d %d,missed_packet_counter=%d\n",group_data_num,group_redundant_num,missed_packet_counter);
 
 			assert(rs_decode2(group_data_num,group_data_num+group_redundant_num,output_s_arr_buf,max_len)==0);//this should always succeed
+			mp[seq].fec_done=1;
 
 			int sum_ori=0;
 

+ 2 - 1
fec_manager.h

@@ -196,7 +196,7 @@ struct fec_parameter_t
 extern fec_parameter_t g_fec_par;
 //extern int dynamic_update_fec;
 
-const int anti_replay_timeout=60*1000;// 60s
+const int anti_replay_timeout=120*1000;// 120s
 
 struct anti_replay_t
 {
@@ -423,6 +423,7 @@ struct fec_group_t
 	int data_num=-1;
 	int redundant_num=-1;
 	int len=-1;
+	int fec_done=0;
 	//int data_counter=0;
 	map<int,int>  group_mp;
 };