Отключаем 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'