2 # Copyright (C) 2006-2017 OpenWrt.org
3 # Copyright (C) 2017 Ian Leonard <antonlacon@gmail.com>
5 # This is free software, licensed under the GNU General Public License v2.
6 # See /LICENSE for more information.
9 include $(TOPDIR
)/rules.mk
15 PKG_SOURCE
:=$(PKG_NAME
)-$(PKG_VERSION
).
tar.xz
16 PKG_SOURCE_URL
:=https
://ffmpeg.org
/releases
/
17 PKG_HASH
:=28e75fc32485a88035a7ebf0a956a1e5c7e93b440dd4bbd6bc30c7268cf34fe9
18 PKG_MAINTAINER
:=Ted Hess
<thess@kitschensync.net
>, \
19 Ian Leonard
<antonlacon@gmail.com
>
21 PKG_LICENSE
:=LGPL-2.1
+ GPL-2
+ LGPL-3
22 PKG_LICENSE_FILES
:=COPYING.GPLv2 COPYING.GPLv3 COPYING.LGPLv2.1 COPYING.LGPLv3
24 FFMPEG_CUSTOM_ENCODERS
:= \
36 FFMPEG_CUSTOM_DECODERS
:= \
67 FFMPEG_CUSTOM_MUXERS
:= \
80 FFMPEG_CUSTOM_DEMUXERS
:= \
108 FFMPEG_CUSTOM_PARSERS
:= \
119 FFMPEG_CUSTOM_PROTOCOLS
:= \
120 file http icecast pipe rtp tcp udp
122 FFMPEG_MINI_DECODERS
:= \
141 FFMPEG_MINI_DEMUXERS
:= \
151 FFMPEG_MINI_PROTOCOLS
:= \
154 FFMPEG_AUDIO_DECODERS
:= \
179 FFMPEG_AUDIO_DEMUXERS
:= \
202 FFMPEG_AUDIO_PROTOCOLS
:= \
203 file http icecast rtp tcp udp
206 PKG_BUILD_DIR
:=$(BUILD_DIR
)/$(PKG_NAME
)-$(BUILD_VARIANT
)/$(PKG_NAME
)-$(PKG_VERSION
)
208 PKG_CONFIG_DEPENDS
:= \
209 $(patsubst %,CONFIG_FFMPEG_CUSTOM_ENCODER_
%,$(FFMPEG_CUSTOM_ENCODERS
)) \
210 $(patsubst %,CONFIG_FFMPEG_CUSTOM_DECODER_
%,$(FFMPEG_CUSTOM_DECODERS
)) \
211 $(patsubst %,CONFIG_FFMPEG_CUSTOM_MUXER_
%,$(FFMPEG_CUSTOM_DEMUXERS
)) \
212 $(patsubst %,CONFIG_FFMPEG_CUSTOM_DEMUXER_
%,$(FFMPEG_CUSTOM_DEMUXERS
)) \
213 $(patsubst %,CONFIG_FFMPEG_CUSTOM_PARSER_
%,$(FFMPEG_CUSTOM_PARSERS
)) \
214 $(patsubst %,CONFIG_FFMPEG_CUSTOM_PROTOCOL_
%,$(FFMPEG_CUSTOM_PROTOCOLS
))
216 include $(INCLUDE_DIR
)/package.mk
218 define Package
/ffmpeg
/Default
220 URL
:=https
://ffmpeg.org
/
221 DEPENDS
+= +libpthread
224 define Package
/ffmpeg
/Default
/description
225 FFmpeg is a a software package that can record
, convert and stream digital
226 audio and video in numerous formats.
230 define Package
/ffmpeg
231 $(call Package
/ffmpeg
/Default
)
235 DEPENDS
+= +libffmpeg-full
239 define Package
/ffmpeg
/description
240 $(call Package
/ffmpeg
/Default
/description
)
242 This package contains the FFmpeg command line tool.
246 define Package
/ffprobe
247 $(call Package
/ffmpeg
/Default
)
250 TITLE
+= CLI media identifier
251 DEPENDS
+= +libffmpeg-full
255 define Package
/ffprobe
/description
256 $(call Package
/ffmpeg
/Default
/description
)
258 This package contains the FFprobe command line tool.
262 define Package
/ffserver
263 $(call Package
/ffserver
/Default
)
266 TITLE
+= streaming server
267 DEPENDS
+= +libffmpeg-full
271 define Package
/ffserver
/description
272 $(call Package
/ffmpeg
/Default
/description
)
274 This package contains the FFmpeg streaming server.
277 define Package
/libffmpeg
/Default
278 $(call Package
/ffmpeg
/Default
)
282 DEPENDS
+= +libpthread
+zlib
+libbz2
287 define Package
/libffmpeg-custom
288 $(call Package
/libffmpeg
/Default
)
290 DEPENDS
+= +FFMPEG_CUSTOM_SELECT_libopus
:libopus \
291 +PACKAGE_libx264
:libx264
+PACKAGE_lame-lib
:lame-lib \
292 +FFMPEG_CUSTOM_SELECT_libshine
:shine \
293 +PACKAGE_fdk-aac
:fdk-aac
298 define Package
/libffmpeg-custom
/config
299 source
"$(SOURCE)/Config.in"
302 define Package
/libffmpeg-custom
/description
303 $(call Package
/ffmpeg
/Default
/description
)
305 This package contains customized FFmpeg shared libraries.
309 define Package
/libffmpeg-audio-dec
310 $(call Package
/libffmpeg
/Default
)
312 DEPENDS
+= @BUILD_PATENTED
316 define Package
/libffmpeg-audio-dec
/description
317 $(call Package
/ffmpeg
/Default
/description
)
319 This package contains FFmpeg shared libraries for audio decoding
323 define Package
/libffmpeg-full
324 $(call Package
/libffmpeg
/Default
)
326 DEPENDS
+= @BUILD_PATENTED
+alsa-lib
+PACKAGE_libopus
:libopus
327 ifeq ($(CONFIG_SOFT_FLOAT
),y
)
328 DEPENDS
+= +PACKAGE_shine
:shine
330 DEPENDS
+= +PACKAGE_lame-lib
:lame-lib
+PACKAGE_libx264
:libx264
336 define Package
/libffmpeg-full
/description
337 $(call Package
/ffmpeg
/Default
/description
)
339 This package contains full-featured FFmpeg shared libraries.
343 define Package
/libffmpeg-mini
344 $(call Package
/libffmpeg
/Default
)
346 DEPENDS
+= @BUILD_PATENTED
350 define Package
/libffmpeg-mini
/description
351 $(call Package
/ffmpeg
/Default
/description
)
353 This package contains minimal-featured FFmpeg shared libraries.
358 CFLAGS
="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS) $(FPIC)" \
359 LDFLAGS
="$(TARGET_LDFLAGS)" \
361 --enable-cross-compile \
362 --cross-prefix
="$(TARGET_CROSS)" \
366 --pkg-config
="pkg-config" \
379 ifeq ($(CONFIG_SOFT_FLOAT
),y
)
387 --disable-inline-asm \
389 --disable-mipsdspr2 \
393 --disable-fast-unaligned \
394 --disable-runtime-cpudetect
396 else ifneq ($(findstring arm
,$(CONFIG_ARCH
)),)
398 --disable-runtime-cpudetect
399 # XXX: GitHub issue 3320 ppc cpu with fpu but no altivec (WNDR4700)
400 else ifneq ($(findstring powerpc
,$(CONFIG_ARCH
)),)
405 # selectively disable optimizations according to arch/cpu type
406 ifneq ($(findstring arm
,$(CONFIG_ARCH
)),)
407 FFMPEG_CONFIGURE
+= --enable-lto
409 ifneq ($(findstring vfp
,$(CONFIG_TARGET_OPTIMIZATION
)),)
410 FFMPEG_CONFIGURE
+= --enable-vfp
412 FFMPEG_CONFIGURE
+= --disable-vfp
414 ifneq ($(findstring neon
,$(CONFIG_TARGET_OPTIMIZATION
)),)
419 FFMPEG_CONFIGURE
+= --disable-neon
424 ifeq ($(ARCH
),x86_64
)
425 FFMPEG_CONFIGURE
+= --enable-lto
428 ifneq ($(CONFIG_YASM
),y
)
429 FFMPEG_CONFIGURE
+= --disable-yasm
433 ifeq ($(BUILD_VARIANT
),full
)
435 --enable-avresample \
436 $(if
$(CONFIG_PACKAGE_libopus
),--enable-libopus
)
437 ifeq ($(CONFIG_SOFT_FLOAT
),y
)
441 $(if
$(CONFIG_PACKAGE_shine
),--enable-libshine
)
443 ifeq ($(ARCH
),x86_64
)
444 FFMPEG_CONFIGURE
+= --enable-hardcoded-tables
446 FFMPEG_CONFIGURE
+= --enable-small
451 $(if
$(CONFIG_PACKAGE_lame-lib
),--enable-libmp3lame
) \
452 $(if
$(CONFIG_PACKAGE_libx264
),--enable-libx264
)
456 ifeq ($(BUILD_VARIANT
),custom
)
460 $(if
$($(3)_
$(c
)),--enable-
$(1)="$(c)") \
463 ifeq ($(CONFIG_FFMPEG_CUSTOM_LARGE
),y
)
465 --enable-hardcoded-tables
471 ifeq ($(CONFIG_FFMPEG_CUSTOM_GPL
),y
)
472 FFMPEG_CONFIGURE
+= --enable-gpl
475 ifeq ($(CONFIG_FFMPEG_CUSTOM_GPLV3
),y
)
476 FFMPEG_CONFIGURE
+= --enable-version3
479 ifeq ($(CONFIG_FFMPEG_CUSTOM_NONFREE
),y
)
480 FFMPEG_CONFIGURE
+= --enable-nonfree
487 --disable-swresample \
489 --disable-everything \
490 $(call FFMPEG_ENABLE
,encoder
,$(FFMPEG_CUSTOM_ENCODERS
),CONFIG_FFMPEG_CUSTOM_ENCODER
) \
491 $(call FFMPEG_ENABLE
,decoder
,$(FFMPEG_CUSTOM_DECODERS
),CONFIG_FFMPEG_CUSTOM_DECODER
) \
492 $(call FFMPEG_ENABLE
,muxer
,$(FFMPEG_CUSTOM_MUXERS
),CONFIG_FFMPEG_CUSTOM_MUXER
) \
493 $(call FFMPEG_ENABLE
,demuxer
,$(FFMPEG_CUSTOM_DEMUXERS
),CONFIG_FFMPEG_CUSTOM_DEMUXER
) \
494 $(call FFMPEG_ENABLE
,parser
,$(FFMPEG_CUSTOM_PARSERS
),CONFIG_FFMPEG_CUSTOM_PARSER
) \
495 $(call FFMPEG_ENABLE
,protocol
,$(FFMPEG_CUSTOM_PROTOCOLS
),CONFIG_FFMPEG_CUSTOM_PROTOCOL
) \
497 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_adpcm
),y
)
499 --enable-decoder
=adpcm_ima_wav \
500 --enable-decoder
=adpcm_ima_qt \
501 --enable-decoder
=adpcm_ms
504 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libfdk-aac
),y
)
506 --enable-libfdk-aac
--enable-encoder
=libfdk_aac
509 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libmp3lame
),y
)
511 --enable-libmp3lame
--enable-encoder
=libmp3lame
514 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libopus
),y
)
516 --enable-libopus
--enable-decoder
=libopus
--enable-encoder
=libopus
519 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libshine
),y
)
521 --enable-libshine
--enable-encoder
=libshine
524 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libx264
),y
)
526 --enable-libx264
--enable-encoder
=libx264
531 ifeq ($(BUILD_VARIANT
),audio-dec
)
535 --enable-
$(1)="$(c)" \
545 --disable-swresample \
547 --disable-everything \
548 $(call FFMPEG_ENABLE
,decoder
,$(FFMPEG_AUDIO_DECODERS
)) \
549 $(call FFMPEG_ENABLE
,demuxer
,$(FFMPEG_AUDIO_DEMUXERS
)) \
550 $(call FFMPEG_ENABLE
,protocol
,$(FFMPEG_AUDIO_PROTOCOLS
)) \
551 --disable-decoder
=pcm_bluray
,pcm_dvd \
555 ifeq ($(BUILD_VARIANT
),mini
)
559 --enable-
$(1)="$(c)" \
569 --disable-swresample \
571 --disable-everything \
572 $(call FFMPEG_ENABLE
,decoder
,$(FFMPEG_MINI_DECODERS
)) \
573 $(call FFMPEG_ENABLE
,demuxer
,$(FFMPEG_MINI_DEMUXERS
)) \
574 $(call FFMPEG_ENABLE
,protocol
,$(FFMPEG_MINI_PROTOCOLS
))
577 ifneq ($(CONFIG_TARGET_x86
),)
578 TARGET_CFLAGS
+= -fomit-frame-pointer
581 define Build
/Configure
582 ( cd
$(PKG_BUILD_DIR
); $(FFMPEG_CONFIGURE
) )
586 $(MAKE
) -C
$(PKG_BUILD_DIR
) \
587 DESTDIR
="$(PKG_INSTALL_DIR)" \
591 define Build
/InstallDev
/custom
592 $(INSTALL_DIR
) $(1)/usr
/include
593 $(CP
) $(PKG_INSTALL_DIR
)/usr
/include/lib
{avcodec
,avdevice
,avformat
,avutil
} $(1)/usr
/include/
594 $(INSTALL_DIR
) $(1)/usr
/lib
595 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avcodec
,avdevice
,avformat
,avutil
}.
{a
,so
*} $(1)/usr
/lib
/
596 $(INSTALL_DIR
) $(1)/usr
/lib
/pkgconfig
597 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/pkgconfig
/lib
{avcodec
,avdevice
,avformat
,avutil
}.
pc $(1)/usr
/lib
/pkgconfig
/
600 # Soft float is LGPL (no libpostproc); Hard float is GPL (yes libpostproc)
601 define Build
/InstallDev
/full
602 $(INSTALL_DIR
) $(1)/usr
/include
603 $(INSTALL_DIR
) $(1)/usr
/lib
604 $(INSTALL_DIR
) $(1)/usr
/lib
/pkgconfig
605 $(CP
) $(PKG_INSTALL_DIR
)/usr
/include/lib
{avcodec
,avdevice
,avfilter
,avformat
,avresample
,avutil
,swresample
,swscale
} $(1)/usr
/include/
606 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avcodec
,avdevice
,avfilter
,avformat
,avresample
,avutil
,swresample
,swscale
}.
{a
,so
*} $(1)/usr
/lib
/
607 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/pkgconfig
/lib
{avcodec
,avdevice
,avfilter
,avformat
,avresample
,avutil
,swresample
,swscale
}.
pc $(1)/usr
/lib
/pkgconfig
/
608 ifneq ($(CONFIG_SOFT_FLOAT
),y
)
609 $(CP
) $(PKG_INSTALL_DIR
)/usr
/include/libpostproc
$(1)/usr
/include/
610 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/libpostproc.
{a
,so
*} $(1)/usr
/lib
/
611 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/pkgconfig
/libpostproc.
pc $(1)/usr
/lib
/pkgconfig
/
615 define Build
/InstallDev
/mini
616 $(INSTALL_DIR
) $(1)/usr
/include
617 $(CP
) $(PKG_INSTALL_DIR
)/usr
/include/lib
{avcodec
,avformat
,avutil
} $(1)/usr
/include/
618 $(INSTALL_DIR
) $(1)/usr
/lib
619 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avcodec
,avformat
,avutil
}.
{a
,so
*} $(1)/usr
/lib
/
620 $(INSTALL_DIR
) $(1)/usr
/lib
/pkgconfig
621 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/pkgconfig
/lib
{avcodec
,avformat
,avutil
}.
pc $(1)/usr
/lib
/pkgconfig
/
624 Build
/InstallDev
/audio-dec
= $(Build
/InstallDev
/custom
)
626 # XXX: attempt at installing "best" dev files available
627 ifeq ($(BUILD_VARIANT
),custom
)
628 # XXX: only install "custom" dev files if -full & -mini are not selected
629 ifeq ($(CONFIG_PACKAGE_libffmpeg-full
)$(CONFIG_PACKAGE_libffmpeg-mini
),)
630 Build
/InstallDev
= $(Build
/InstallDev
/custom
)
633 ifeq ($(BUILD_VARIANT
),audio-dec
)
634 # XXX: only install "audio-dec" dev files if -full & -mini are not selected
635 ifeq ($(CONFIG_PACKAGE_libffmpeg-full
)$(CONFIG_PACKAGE_libffmpeg-mini
),)
636 Build
/InstallDev
= $(Build
/InstallDev
/audio-dec
)
639 ifeq ($(BUILD_VARIANT
),full
)
640 # XXX: always install "full" dev files if -full is selected
641 Build
/InstallDev
= $(Build
/InstallDev
/full
)
643 ifeq ($(BUILD_VARIANT
),mini
)
644 # XXX: only install "mini" dev files if -full is not selected
645 ifeq ($(CONFIG_PACKAGE_libffmpeg-full
),)
646 Build
/InstallDev
= $(Build
/InstallDev
/mini
)
650 define Package
/ffmpeg
/install
651 $(INSTALL_DIR
) $(1)/usr
/bin
652 $(CP
) $(PKG_INSTALL_DIR
)/usr
/bin
/ffmpeg
$(1)/usr
/bin
/
655 define Package
/ffprobe
/install
656 $(INSTALL_DIR
) $(1)/usr
/bin
657 $(CP
) $(PKG_INSTALL_DIR
)/usr
/bin
/ffprobe
$(1)/usr
/bin
/
660 define Package
/ffserver
/install
661 $(INSTALL_DIR
) $(1)/usr
/bin
662 $(CP
) $(PKG_INSTALL_DIR
)/usr
/bin
/ffserver
$(1)/usr
/bin
/
665 define Package
/libffmpeg-custom
/install
666 $(INSTALL_DIR
) $(1)/usr
/lib
667 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avcodec
,avdevice
,avformat
,avutil
}.so.
* $(1)/usr
/lib
/
670 # Soft float is LGPL (no libpostproc); Hard float is GPL (yes libpostproc)
671 define Package
/libffmpeg-full
/install
672 $(INSTALL_DIR
) $(1)/usr
/lib
673 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avcodec
,avdevice
,avfilter
,avformat
,avresample
,avutil
,swresample
,swscale
}.so.
* $(1)/usr
/lib
/
674 ifneq ($(CONFIG_SOFT_FLOAT
),y
)
675 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/libpostproc.so.
* $(1)/usr
/lib
/
679 define Package
/libffmpeg-mini
/install
680 $(INSTALL_DIR
) $(1)/usr
/lib
681 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avcodec
,avformat
,avutil
}.so.
* $(1)/usr
/lib
/
684 Package
/libffmpeg-audio-dec
/install = $(Package
/libffmpeg-custom
/install)
686 $(eval
$(call BuildPackage
,ffmpeg
))
687 $(eval
$(call BuildPackage
,ffprobe
))
688 $(eval
$(call BuildPackage
,ffserver
))
689 $(eval
$(call BuildPackage
,libffmpeg-audio-dec
))
690 $(eval
$(call BuildPackage
,libffmpeg-full
))
691 $(eval
$(call BuildPackage
,libffmpeg-mini
))
692 ifneq ($(CONFIG_ALL
),y
)
693 $(eval
$(call BuildPackage
,libffmpeg-custom
))