You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	libswresample: introduce int swr_set_compensation() instead of void swr_compensate()
The new version returns AVERROR(EINVAL) is the specified paramters are invalid, and also creates the resampler if none was used so far. Signed-off-by: Marton Balint <cus@passwd.hu> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
				
					committed by
					
						 Michael Niedermayer
						Michael Niedermayer
					
				
			
			
				
	
			
			
			
						parent
						
							3e9668501d
						
					
				
				
					commit
					741aca7936
				
			
							
								
								
									
										2
									
								
								ffmpeg.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								ffmpeg.c
									
									
									
									
									
								
							| @@ -1160,7 +1160,7 @@ need_realloc: | ||||
|                 av_log(NULL, AV_LOG_VERBOSE, "compensating audio timestamp drift:%f compensation:%d in:%d\n", | ||||
|                        delta, comp, enc->sample_rate); | ||||
| //                fprintf(stderr, "drift:%f len:%d opts:%"PRId64" ipts:%"PRId64" fifo:%d\n", delta, -1, ost->sync_opts, (int64_t)(get_sync_ipts(ost) * enc->sample_rate), av_fifo_size(ost->fifo)/(ost->st->codec->channels * 2)); | ||||
|                 swr_compensate(ost->swr, comp, enc->sample_rate); | ||||
|                 swr_set_compensation(ost->swr, comp, enc->sample_rate); | ||||
|             } | ||||
|         } | ||||
|     } else | ||||
|   | ||||
| @@ -245,11 +245,27 @@ void swri_resample_free(ResampleContext **c){ | ||||
|     av_freep(c); | ||||
| } | ||||
|  | ||||
| void swr_compensate(struct SwrContext *s, int sample_delta, int compensation_distance){ | ||||
|     ResampleContext *c= s->resample; | ||||
| //    sample_delta += (c->ideal_dst_incr - c->dst_incr)*(int64_t)c->compensation_distance / c->ideal_dst_incr; | ||||
| int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensation_distance){ | ||||
|     ResampleContext *c; | ||||
|     int ret; | ||||
|  | ||||
|     if (!s || compensation_distance < 0) | ||||
|         return AVERROR(EINVAL); | ||||
|     if (!compensation_distance && sample_delta) | ||||
|         return AVERROR(EINVAL); | ||||
|     if (!s->resample) { | ||||
|         s->flags |= SWR_FLAG_RESAMPLE; | ||||
|         ret = swr_init(s); | ||||
|         if (ret < 0) | ||||
|             return ret; | ||||
|     } | ||||
|     c= s->resample; | ||||
|     c->compensation_distance= compensation_distance; | ||||
|     c->dst_incr = c->ideal_dst_incr - c->ideal_dst_incr * (int64_t)sample_delta / compensation_distance; | ||||
|     if (compensation_distance) | ||||
|         c->dst_incr = c->ideal_dst_incr - c->ideal_dst_incr * (int64_t)sample_delta / compensation_distance; | ||||
|     else | ||||
|         c->dst_incr = c->ideal_dst_incr; | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| int swri_resample(ResampleContext *c, int16_t *dst, const int16_t *src, int *consumed, int src_size, int dst_size, int update_ctx){ | ||||
|   | ||||
| @@ -30,7 +30,7 @@ | ||||
| #include "libavutil/samplefmt.h" | ||||
|  | ||||
| #define LIBSWRESAMPLE_VERSION_MAJOR 0 | ||||
| #define LIBSWRESAMPLE_VERSION_MINOR 5 | ||||
| #define LIBSWRESAMPLE_VERSION_MINOR 6 | ||||
| #define LIBSWRESAMPLE_VERSION_MICRO 100 | ||||
|  | ||||
| #define LIBSWRESAMPLE_VERSION_INT  AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ | ||||
| @@ -114,7 +114,7 @@ int swr_convert(struct SwrContext *s, uint8_t *out[SWR_CH_MAX], int out_count, | ||||
| /** | ||||
|  * Activate resampling compensation. | ||||
|  */ | ||||
| void swr_compensate(struct SwrContext *s, int sample_delta, int compensation_distance); | ||||
| int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensation_distance); | ||||
|  | ||||
| /** | ||||
|  * Set a customized input channel mapping. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user