Отключаем swscale в ffmpeg

Posted in Новости on 28 сентября, 2011 by admin

Патч — http://tresnet.ru/sw/patches/ffmpeg_disable_swscale-r26402.patch

В новых чекаутах ffmpeg появились опции :

—disable-swscale disable libswscale build
—disable-swscale-alpha disable alpha channel support in swscale

Но они не работают в должном объеме, так как при использовании опции собираются все бинарники , кроме ffmpeg ( в исходники жестко вшиты либы, необходимые для работы ).

Наша задача — почистить исходники от этой либы, чтобы ffmpeg даже не знал о ее существовании.
Итак, начнем :

Качаем через svn checkout ffmpeg

cd /usr/src/

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg

Pедактируем configure

nano configure

— swscale

— swscale_alpha

— scale_filter_deps=»swscale»

— ffmpeg_deps=»avcodec avformat swscale»
+ ffmpeg_deps=»avcodec avformat

— ffplay_deps=»avcodec avformat swscale sdl»
+ ffplay_deps=»avcodec avformat sdl»

— enable swscale
— enable swscale_alpha

— libswscale

— libswscale/$arch

— libswscale/Makefile

— get_version LIBSWSCALE libswscale/swscale.h

— pkgconfig_generate libswscale «FFmpeg image rescaling library» «$LIBSWSCALE_VERSION» «» «libavutil = $LIBAVUTIL_VERSION»

— check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavcore -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
+ check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavcore -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'

Pедактируем ffmpeg.c

nano ffmpeg.c

— static unsigned int sws_flags = SWS_BICUBIC;

— sws_freeContext(ost->img_resample_ctx);

Pедактируем cmdutils.c

nano cmdutils.c

— PRINT_LIB_INFO(outstream, swscale, SWSCALE, flags);

Pедактируем ffmpeg/libavfilter/vf_scale.c

nano ffmpeg/libavfilter/vf_scale.c

— scale->sws = sws_getContext(inlink ->w, inlink ->h, inlink ->format,
— outlink->w, outlink->h, outlink->format,
— scale->flags, NULL, NULL, NULL);

— out_h = sws_scale(scale->sws, data, cur_pic->linesize, y, h,
— link->dst->outputs[0]->out_buf->data,
— link->dst->outputs[0]->out_buf->linesize);

— if ( sws_isSupportedInput(pix_fmt)
— && (ret = avfilter_add_format(&formats, pix_fmt)) < 0) { - avfilter_formats_unref(&formats); - return ret; - } - if ( sws_isSupportedOutput(pix_fmt) - && (ret = avfilter_add_format(&formats, pix_fmt)) < 0) { - avfilter_formats_unref(&formats); - return ret; - } - sws_freeContext(scale->sws);
— scale->sws = NULL;

Собираем исходники и ставим ffmpeg на сервер :

./configure
make
make install

Вуаля :

server:/usr/src/ffmpeg# ffmpeg
FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
built on Sep 28 2011 12:27:14 with gcc 4.3.2
configuration:
libavutil 50.36. 0 / 50.36. 0
libavcore 0.16. 1 / 0.16. 1
libavcodec 52.108. 0 / 52.108. 0
libavformat 52.93. 0 / 52.93. 0
libavdevice 52. 2. 3 / 52. 2. 3
libavfilter 1.74. 0 / 1.74. 0
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]… {[outfile options] outfile}…

Use -h to get full help or, even better, run 'man ffmpeg'

Tags: