fftools/ffmpeg: move inter-stream ts discontinuity handling to ts_discontinuity_process()
This commit is contained in:
		
							parent
							
								
									e2d784a5b7
								
							
						
					
					
						commit
						aa6d4a53e3
					
				| @ -3744,7 +3744,22 @@ static void ts_discontinuity_process(InputFile *ifile, InputStream *ist, | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |     } else if (ist->next_dts == AV_NOPTS_VALUE && !copy_ts && | ||||||
|  |                fmt_is_discont && ifile->last_ts != AV_NOPTS_VALUE) { | ||||||
|  |         int64_t delta = pkt_dts - ifile->last_ts; | ||||||
|  |         if (delta < -1LL*dts_delta_threshold*AV_TIME_BASE || | ||||||
|  |             delta >  1LL*dts_delta_threshold*AV_TIME_BASE) { | ||||||
|  |             ifile->ts_offset -= delta; | ||||||
|  |             av_log(NULL, AV_LOG_DEBUG, | ||||||
|  |                    "Inter stream timestamp discontinuity %"PRId64", new offset= %"PRId64"\n", | ||||||
|  |                    delta, ifile->ts_offset); | ||||||
|  |             pkt->dts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); | ||||||
|  |             if (pkt->pts != AV_NOPTS_VALUE) | ||||||
|  |                 pkt->pts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     ifile->last_ts = av_rescale_q(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
| @ -3762,7 +3777,6 @@ static int process_input(int file_index) | |||||||
|     AVPacket *pkt; |     AVPacket *pkt; | ||||||
|     int ret, i, j; |     int ret, i, j; | ||||||
|     int64_t duration; |     int64_t duration; | ||||||
|     int64_t pkt_dts; |  | ||||||
| 
 | 
 | ||||||
|     is  = ifile->ctx; |     is  = ifile->ctx; | ||||||
|     ret = ifile_get_packet(ifile, &pkt); |     ret = ifile_get_packet(ifile, &pkt); | ||||||
| @ -3878,24 +3892,6 @@ static int process_input(int file_index) | |||||||
|     if (pkt->dts != AV_NOPTS_VALUE) |     if (pkt->dts != AV_NOPTS_VALUE) | ||||||
|         pkt->dts *= ist->ts_scale; |         pkt->dts *= ist->ts_scale; | ||||||
| 
 | 
 | ||||||
|     pkt_dts = av_rescale_q_rnd(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); |  | ||||||
|     if ((ist->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO || |  | ||||||
|          ist->st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) && |  | ||||||
|         pkt_dts != AV_NOPTS_VALUE && ist->next_dts == AV_NOPTS_VALUE && !copy_ts |  | ||||||
|         && (is->iformat->flags & AVFMT_TS_DISCONT) && ifile->last_ts != AV_NOPTS_VALUE) { |  | ||||||
|         int64_t delta   = pkt_dts - ifile->last_ts; |  | ||||||
|         if (delta < -1LL*dts_delta_threshold*AV_TIME_BASE || |  | ||||||
|             delta >  1LL*dts_delta_threshold*AV_TIME_BASE){ |  | ||||||
|             ifile->ts_offset -= delta; |  | ||||||
|             av_log(NULL, AV_LOG_DEBUG, |  | ||||||
|                    "Inter stream timestamp discontinuity %"PRId64", new offset= %"PRId64"\n", |  | ||||||
|                    delta, ifile->ts_offset); |  | ||||||
|             pkt->dts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); |  | ||||||
|             if (pkt->pts != AV_NOPTS_VALUE) |  | ||||||
|                 pkt->pts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     duration = av_rescale_q(ifile->duration, ifile->time_base, ist->st->time_base); |     duration = av_rescale_q(ifile->duration, ifile->time_base, ist->st->time_base); | ||||||
|     if (pkt->pts != AV_NOPTS_VALUE) { |     if (pkt->pts != AV_NOPTS_VALUE) { | ||||||
|         pkt->pts += duration; |         pkt->pts += duration; | ||||||
| @ -3912,9 +3908,6 @@ static int process_input(int file_index) | |||||||
|         pkt->dts != AV_NOPTS_VALUE) |         pkt->dts != AV_NOPTS_VALUE) | ||||||
|         ts_discontinuity_process(ifile, ist, pkt); |         ts_discontinuity_process(ifile, ist, pkt); | ||||||
| 
 | 
 | ||||||
|     if (pkt->dts != AV_NOPTS_VALUE) |  | ||||||
|         ifile->last_ts = av_rescale_q(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q); |  | ||||||
| 
 |  | ||||||
|     if (debug_ts) { |     if (debug_ts) { | ||||||
|         av_log(NULL, AV_LOG_INFO, "demuxer+ffmpeg -> ist_index:%d type:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s duration:%s duration_time:%s off:%s off_time:%s\n", |         av_log(NULL, AV_LOG_INFO, "demuxer+ffmpeg -> ist_index:%d type:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s duration:%s duration_time:%s off:%s off_time:%s\n", | ||||||
|                ifile->ist_index + pkt->stream_index, |                ifile->ist_index + pkt->stream_index, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user