mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 10:47:18 +00:00 
			
		
		
		
	Merge "res_rtp_asterisk: Add frame list cleanups to ast_rtp_read"
This commit is contained in:
		| @@ -7561,7 +7561,9 @@ static struct ast_frame *ast_rtp_read(struct ast_rtp_instance *instance, int rtc | ||||
|  | ||||
| 	if (!rtp->recv_buffer) { | ||||
| 		/* If there is no receive buffer then we can pass back the frame directly */ | ||||
| 		return ast_rtp_interpret(instance, srtp, &addr, read_area, res, prev_seqno); | ||||
| 		frame = ast_rtp_interpret(instance, srtp, &addr, read_area, res, prev_seqno); | ||||
| 		AST_LIST_INSERT_TAIL(&frames, frame, frame_list); | ||||
| 		return AST_LIST_FIRST(&frames); | ||||
| 	} else if (rtp->expectedrxseqno == -1 || seqno == rtp->expectedrxseqno) { | ||||
| 		rtp->expectedrxseqno = seqno + 1; | ||||
|  | ||||
| @@ -7569,7 +7571,9 @@ static struct ast_frame *ast_rtp_read(struct ast_rtp_instance *instance, int rtc | ||||
| 		 * return it directly without duplicating it. | ||||
| 		 */ | ||||
| 		if (!ast_data_buffer_count(rtp->recv_buffer)) { | ||||
| 			return ast_rtp_interpret(instance, srtp, &addr, read_area, res, prev_seqno); | ||||
| 			frame = ast_rtp_interpret(instance, srtp, &addr, read_area, res, prev_seqno); | ||||
| 			AST_LIST_INSERT_TAIL(&frames, frame, frame_list); | ||||
| 			return AST_LIST_FIRST(&frames); | ||||
| 		} | ||||
|  | ||||
| 		if (!AST_VECTOR_REMOVE_CMP_ORDERED(&rtp->missing_seqno, seqno, find_by_value, | ||||
| @@ -7582,7 +7586,9 @@ static struct ast_frame *ast_rtp_read(struct ast_rtp_instance *instance, int rtc | ||||
| 		 * chance it will be overwritten. | ||||
| 		 */ | ||||
| 		if (!ast_data_buffer_get(rtp->recv_buffer, seqno + 1)) { | ||||
| 			return ast_rtp_interpret(instance, srtp, &addr, read_area, res, prev_seqno); | ||||
| 			frame = ast_rtp_interpret(instance, srtp, &addr, read_area, res, prev_seqno); | ||||
| 			AST_LIST_INSERT_TAIL(&frames, frame, frame_list); | ||||
| 			return AST_LIST_FIRST(&frames); | ||||
| 		} | ||||
|  | ||||
| 		/* Otherwise we need to dupe the frame so that the potential processing of frames placed after | ||||
| @@ -7696,7 +7702,12 @@ static struct ast_frame *ast_rtp_read(struct ast_rtp_instance *instance, int rtc | ||||
| 		AST_VECTOR_RESET(&rtp->missing_seqno, AST_VECTOR_ELEM_CLEANUP_NOOP); | ||||
|  | ||||
| 		return AST_LIST_FIRST(&frames); | ||||
| 	} else if (seqno < rtp->expectedrxseqno) { | ||||
| 	} | ||||
|  | ||||
| 	/* We're finished with the frames list */ | ||||
| 	ast_frame_free(AST_LIST_FIRST(&frames), 0); | ||||
|  | ||||
| 	if (seqno < rtp->expectedrxseqno) { | ||||
| 		/* If this is a packet from the past then we have received a duplicate packet, so just drop it */ | ||||
| 		ast_debug(2, "Received an old packet with sequence number '%d' on RTP instance '%p', dropping it\n", | ||||
| 			seqno, instance); | ||||
| @@ -7807,8 +7818,6 @@ static struct ast_frame *ast_rtp_read(struct ast_rtp_instance *instance, int rtc | ||||
| 				ast_rtcp_calculate_sr_rr_statistics(instance, rtcp_report, remote_address, ice, sr); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		return &ast_null_frame; | ||||
| 	} | ||||
|  | ||||
| 	return &ast_null_frame; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user