diff --git a/cmdutils.c b/cmdutils.c index 5a0c8f378f..8265fbcd0f 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -849,6 +849,23 @@ FILE *get_preset_file(char *filename, size_t filename_size, av_strlcpy(filename, preset_name, filename_size); f = fopen(filename, "r"); } else { +#ifdef _WIN32 + char datadir[MAX_PATH], *ls; + base[2] = NULL; + + if (GetModuleFileNameA(GetModuleHandleA(NULL), datadir, sizeof(datadir) - 1)) + { + for (ls = datadir; ls < datadir + strlen(datadir); ls++) + if (*ls == '\\') *ls = '/'; + + if (ls = strrchr(datadir, '/')) + { + *ls = 0; + strncat(datadir, "/ffpresets", sizeof(datadir) - 1 - strlen(datadir)); + base[2] = datadir; + } + } +#endif for (i = 0; i < 3 && !f; i++) { if (!base[i]) continue; diff --git a/cmdutils.h b/cmdutils.h index 5a9314681a..9e5827fc2b 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -243,7 +243,8 @@ int read_file(const char *filename, char **bufptr, size_t *size); * 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 + * at configuration time or in a "ffpresets" folder along the executable + * on win32, 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. * diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi index 77fde18564..fe9e9a9e92 100644 --- a/doc/ffmpeg.texi +++ b/doc/ffmpeg.texi @@ -816,6 +816,7 @@ following rules: First ffmpeg searches for a file named @var{arg}.ffpreset in the directories @file{$FFMPEG_DATADIR} (if set), and @file{$HOME/.ffmpeg}, and in the datadir defined at configuration time (usually @file{PREFIX/share/ffmpeg}) +or in a @file{ffpresets} folder along the executable on win32, in that order. For example, if the argument is @code{libx264-max}, it will search for the file @file{libx264-max.ffpreset}.