You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	fftools/ffmpeg: fix for all forced key frames when 'copyts' is enabled
Forced key frames generation functionality was assuming the first PTS value as zero, but, when 'copyts' is enabled, the first PTS can be any big number. This was eventually forcing all the frames as key frames. To resolve this issue, update has been made to use first input pts as reference pts. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
		
				
					committed by
					
						 Michael Niedermayer
						Michael Niedermayer
					
				
			
			
				
	
			
			
			
						parent
						
							f56a0b02cd
						
					
				
				
					commit
					146cdf7e4b
				
			| @@ -1236,8 +1236,12 @@ static void do_video_out(OutputFile *of, | ||||
|         in_picture->quality = enc->global_quality; | ||||
|         in_picture->pict_type = 0; | ||||
|  | ||||
|         if (ost->forced_kf_ref_pts == AV_NOPTS_VALUE && | ||||
|             in_picture->pts != AV_NOPTS_VALUE) | ||||
|             ost->forced_kf_ref_pts = in_picture->pts; | ||||
|  | ||||
|         pts_time = in_picture->pts != AV_NOPTS_VALUE ? | ||||
|             in_picture->pts * av_q2d(enc->time_base) : NAN; | ||||
|             (in_picture->pts - ost->forced_kf_ref_pts) * av_q2d(enc->time_base) : NAN; | ||||
|         if (ost->forced_kf_index < ost->forced_kf_count && | ||||
|             in_picture->pts >= ost->forced_kf_pts[ost->forced_kf_index]) { | ||||
|             ost->forced_kf_index++; | ||||
|   | ||||
| @@ -484,6 +484,7 @@ typedef struct OutputStream { | ||||
|     AVRational frame_aspect_ratio; | ||||
|  | ||||
|     /* forced key frames */ | ||||
|     int64_t forced_kf_ref_pts; | ||||
|     int64_t *forced_kf_pts; | ||||
|     int forced_kf_count; | ||||
|     int forced_kf_index; | ||||
|   | ||||
| @@ -1324,6 +1324,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e | ||||
|     ost->file_index = nb_output_files - 1; | ||||
|     ost->index      = idx; | ||||
|     ost->st         = st; | ||||
|     ost->forced_kf_ref_pts = AV_NOPTS_VALUE; | ||||
|     st->codecpar->codec_type = type; | ||||
|  | ||||
|     ret = choose_encoder(o, oc, ost); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user