[FFmpeg-devel] [PATCH] Adding support for OSX bundles to ffmpeg command line
Chris Marrin
chris
Fri Mar 20 22:24:30 CET 2009
On Mar 20, 2009, at 7:40 AM, Benoit Fouet wrote:
> On 03/20/2009 03:36 PM, Chris Marrin wrote:
>>
>> On Mar 20, 2009, at 3:06 AM, M?ns Rullg?rd wrote:
>>
>>> Chris Marrin <chris at marrin.com> writes:
>>>
>>>> I'm developing an app called VideoMonkey (http://videomonkey.org).
>>>> It's a video encode for OSX which uses the ffmpeg command line for
>>>> encoding. I need to include ffpresets and I want to put them in the
>>>> bundle. As it is, ffmpeg doesn't support ffpresets in this
>>>> location.
>>>> So I've made a patch that first looks in a location relative to the
>>>> executable so it can find them in the bundle. I'd like to offer
>>>> it to
>>>> the main code base.
>>>>
>>>> Here is the patch. Please let me know if there is some other way of
>>>> submitting it. Thanks...
>>>>
>>>>
>>>> 91a92,93
>>>>> static char* executable_path;
>>>>>
>>>> 3717,3718c3719,3727
>>>> < for(i=!base[0]; i<2 && !f; i++){
>>>
>>> Please create the patch with "svn diff".
>>
>>
>> Done:
>>
>
>
>> Index: ffmpeg.c
>> ===================================================================
>> --- ffmpeg.c (revision 18075)
>> +++ ffmpeg.c (working copy)
>> @@ -88,6 +88,8 @@
>>
>> static const OptionDef options[];
>>
>> +static char* executable_path;
>> +
>> #define MAX_FILES 20
>>
>> static AVFormatContext *input_files[MAX_FILES];
>> @@ -3736,17 +3738,30 @@
>> FFMPEG_DATADIR,
>> };
>>
>> - for(i=!base[0]; i<2 && !f; i++){
>> - snprintf(filename, sizeof(filename), "%s%s/%s.ffpreset",
>> base[i], i ? "" : "/.ffmpeg", arg);
>> + // first check for path relative to executable (so presets can
>> be
>> in an OSX package)
>> + snprintf(filename, sizeof(filename), "%s/../ffpresets/
>> %s.ffpreset",
>> executable_path, 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/../ffpresets/%s-%s.ffpreset", executable_path, codec_name, 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 ? "" : "/.ffmpeg", codec_name, arg);
>> - f= fopen(filename, "r");
>> - }
>> }
>> +
>> + if (!f) {
>> + for(i=!base[0]; i<2 && !f; i++){
>> + snprintf(filename, sizeof(filename), "%s%s/%s.ffpreset",
>> base[i], i ? "" : "/.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 ? "" : "/.ffmpeg", codec_name,
>> arg);
>> + f= fopen(filename, "r");
>> + }
>> + }
>> + }
>>
>
> this is mixing functionnal and cosmetical changes
Could you be more specific? I believe all I have done is added a check
to see if the preset is at a path relative to the executable_path.
Then (after a check for a successful open) I go into the existing
codepath.
>
>
>> if(!f && ((arg[0]=='.' && arg[1]=='/') || arg[0]=='/' ||
>> is_dos_path(arg))){
>> av_strlcpy(filename, arg, sizeof(filename));
>> @@ -3915,7 +3930,16 @@
>> {
>> int i;
>> int64_t ti;
>> -
>> +
>> + // get the executable path
>> + char* p = strrchr(argv[0], '/');
>> + if (p) {
>> + int length = p-argv[0];
>> + executable_path = av_malloc(length+1);
>> + strncpy(executable_path, argv[0], length);
>> + executable_path[length] = '\0';
>> + }
>> +
>>
>
> memory leak
>
> also, tabs and trailing white spaces are not allowed in FFmpeg svn
I will fix those. But the bigger question is whether or not the FFmpeg
team is interested in this patch in general.
-----
~Chris
chris at marrin.com
More information about the ffmpeg-devel
mailing list