You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	Implement get_preset_file() in cmdutils.h and use it to factorize code
from ffmpeg.c and ffserver.c. Originally committed as revision 25679 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		
							
								
								
									
										30
									
								
								cmdutils.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								cmdutils.c
									
									
									
									
									
								
							| @@ -748,6 +748,36 @@ int64_t guess_correct_pts(PtsCorrectionContext *ctx, int64_t reordered_pts, int6 | ||||
|     return pts; | ||||
| } | ||||
|  | ||||
| FILE *get_preset_file(char *filename, size_t filename_size, | ||||
|                       const char *preset_name, int is_path, const char *codec_name) | ||||
| { | ||||
|     FILE *f = NULL; | ||||
|     int i; | ||||
|     const char *base[3]= { getenv("FFMPEG_DATADIR"), | ||||
|                            getenv("HOME"), | ||||
|                            FFMPEG_DATADIR, | ||||
|                          }; | ||||
|  | ||||
|     if (is_path) { | ||||
|         av_strlcpy(filename, preset_name, filename_size); | ||||
|         f = fopen(filename, "r"); | ||||
|     } else { | ||||
|         for (i = 0; i < 3 && !f; i++) { | ||||
|             if (!base[i]) | ||||
|                 continue; | ||||
|             snprintf(filename, filename_size, "%s%s/%s.ffpreset", base[i], i != 1 ? "" : "/.ffmpeg", preset_name); | ||||
|             f = fopen(filename, "r"); | ||||
|             if (!f && codec_name) { | ||||
|                 snprintf(filename, filename_size, | ||||
|                          "%s%s/%s-%s.ffpreset", base[i],  i != 1 ? "" : "/.ffmpeg", codec_name, preset_name); | ||||
|                 f = fopen(filename, "r"); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     return f; | ||||
| } | ||||
|  | ||||
| #if CONFIG_AVFILTER | ||||
|  | ||||
| static int ffsink_init(AVFilterContext *ctx, const char *args, void *opaque) | ||||
|   | ||||
							
								
								
									
										20
									
								
								cmdutils.h
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								cmdutils.h
									
									
									
									
									
								
							| @@ -261,6 +261,26 @@ void init_pts_correction(PtsCorrectionContext *ctx); | ||||
|  */ | ||||
| int64_t guess_correct_pts(PtsCorrectionContext *ctx, int64_t pts, int64_t dts); | ||||
|  | ||||
| /** | ||||
|  * Get a file corresponding to a preset file. | ||||
|  * | ||||
|  * If is_path is non-zero, look for the file in the path preset_name. | ||||
|  * Otherwise search for a file named arg.ffpreset in the directories | ||||
|  * $FFMPEG_DATADIR (if set), $HOME/.ffmpeg, and in the datadir defined | ||||
|  * at configuration time, in that order. If no such file is found and | ||||
|  * codec_name is defined, then search for a file named | ||||
|  * codec_name-preset_name.ffpreset in the above-mentioned directories. | ||||
|  * | ||||
|  * @param filename buffer where the name of the found filename is written | ||||
|  * @param filename_size size in bytes of the filename buffer | ||||
|  * @param preset_name name of the preset to search | ||||
|  * @param is_path tell if preset_name is a filename path | ||||
|  * @param codec_name name of the codec for which to look for the | ||||
|  * preset, may be NULL | ||||
|  */ | ||||
| FILE *get_preset_file(char *filename, size_t filename_size, | ||||
|                       const char *preset_name, int is_path, const char *codec_name); | ||||
|  | ||||
| #if CONFIG_AVFILTER | ||||
| #include "libavfilter/avfilter.h" | ||||
|  | ||||
|   | ||||
							
								
								
									
										29
									
								
								ffmpeg.c
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								ffmpeg.c
									
									
									
									
									
								
							| @@ -4030,32 +4030,11 @@ static int opt_preset(const char *opt, const char *arg) | ||||
| { | ||||
|     FILE *f=NULL; | ||||
|     char filename[1000], tmp[1000], tmp2[1000], line[1000]; | ||||
|     int i; | ||||
|     const char *base[3]= { getenv("FFMPEG_DATADIR"), | ||||
|                            getenv("HOME"), | ||||
|                            FFMPEG_DATADIR, | ||||
|                          }; | ||||
|     char *codec_name = *opt == 'v' ? video_codec_name : | ||||
|                        *opt == 'a' ? audio_codec_name : | ||||
|                                      subtitle_codec_name; | ||||
|  | ||||
|     if (*opt != 'f') { | ||||
|         for(i=0; i<3 && !f; i++){ | ||||
|             if(!base[i]) | ||||
|                 continue; | ||||
|             snprintf(filename, sizeof(filename), "%s%s/%s.ffpreset", base[i], i != 1 ? "" : "/.ffmpeg", arg); | ||||
|             f= fopen(filename, "r"); | ||||
|             if(!f){ | ||||
|                 char *codec_name= *opt == 'v' ? video_codec_name : | ||||
|                                   *opt == 'a' ? audio_codec_name : | ||||
|                                                 subtitle_codec_name; | ||||
|                 snprintf(filename, sizeof(filename), "%s%s/%s-%s.ffpreset", base[i],  i != 1 ? "" : "/.ffmpeg", codec_name, arg); | ||||
|                 f= fopen(filename, "r"); | ||||
|             } | ||||
|         } | ||||
|     } else { | ||||
|         av_strlcpy(filename, arg, sizeof(filename)); | ||||
|         f= fopen(filename, "r"); | ||||
|     } | ||||
|  | ||||
|     if(!f){ | ||||
|     if (!(f = get_preset_file(filename, sizeof(filename), arg, *opt == 'f', codec_name))) { | ||||
|         fprintf(stderr, "File for preset '%s' not found\n", arg); | ||||
|         ffmpeg_exit(1); | ||||
|     } | ||||
|   | ||||
							
								
								
									
										24
									
								
								ffserver.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								ffserver.c
									
									
									
									
									
								
							| @@ -3972,27 +3972,11 @@ static int ffserver_opt_preset(const char *arg, | ||||
| { | ||||
|     FILE *f=NULL; | ||||
|     char filename[1000], tmp[1000], tmp2[1000], line[1000]; | ||||
|     int i, ret = 0; | ||||
|     const char *base[3]= { getenv("FFMPEG_DATADIR"), | ||||
|                            getenv("HOME"), | ||||
|                            FFMPEG_DATADIR, | ||||
|                          }; | ||||
|     int ret = 0; | ||||
|     AVCodec *codec = avcodec_find_encoder(avctx->codec_id); | ||||
|  | ||||
|     for(i=0; i<3 && !f; i++){ | ||||
|         if(!base[i]) | ||||
|             continue; | ||||
|         snprintf(filename, sizeof(filename), "%s%s/%s.ffpreset", base[i], i != 1 ? "" : "/.ffmpeg", arg); | ||||
|         f= fopen(filename, "r"); | ||||
|         if(!f){ | ||||
|             AVCodec *codec = avcodec_find_encoder(avctx->codec_id); | ||||
|             if (codec) { | ||||
|                 snprintf(filename, sizeof(filename), "%s%s/%s-%s.ffpreset", base[i],  i != 1 ? "" : "/.ffmpeg", codec->name, arg); | ||||
|                 f= fopen(filename, "r"); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if(!f){ | ||||
|     if (!(f = get_preset_file(filename, sizeof(filename), arg, 0, | ||||
|                               codec ? codec->name : NULL))) { | ||||
|         fprintf(stderr, "File for preset '%s' not found\n", arg); | ||||
|         return 1; | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user