2 # Copyright (C) 2017-2020 Ian Leonard <antonlacon@gmail.com>
3 # Copyright (C) 2018 Ted Hess <thess@kitschensync.net>
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
:=8e7a2f6d94b5130edd82d8b55ae75da5fc02f98698e8cc6772c413223b7b9092
18 PKG_MAINTAINER
:=Ted Hess
<thess@kitschensync.net
>, \
19 Ian Leonard
<antonlacon@gmail.com
>
21 PKG_LICENSE
:=LGPL-2.1
-or-later GPL-2.0
-or-later LGPL-3.0
-or-later
22 PKG_LICENSE_FILES
:=COPYING.GPLv2 COPYING.GPLv3 COPYING.LGPLv2.1 COPYING.LGPLv3
23 PKG_CPE_ID
:=cpe
:/a
:ffmpeg
:ffmpeg
25 FFMPEG_CUSTOM_ENCODERS
:= \
37 FFMPEG_CUSTOM_DECODERS
:= \
68 FFMPEG_CUSTOM_MUXERS
:= \
81 FFMPEG_CUSTOM_DEMUXERS
:= \
109 FFMPEG_CUSTOM_PARSERS
:= \
120 FFMPEG_CUSTOM_PROTOCOLS
:= \
121 file http icecast pipe rtp tcp udp
123 FFMPEG_MINI_DECODERS
:= \
137 FFMPEG_PATENTED_MINI_DECODERS
:= \
142 FFMPEG_MINI_DEMUXERS
:= \
153 FFMPEG_MINI_PROTOCOLS
:= \
156 FFMPEG_AUDIO_DECODERS
:= \
175 FFMPEG_AUDIO_DEMUXERS
:= \
197 FFMPEG_AUDIO_PROTOCOLS
:= \
198 file http icecast rtp tcp udp
200 FFMPEG_PATENTED_DECODERS
:= \
206 FFMPEG_PATENTED_MUXERS
:= \
211 FFMPEG_PATENTED_DEMUXERS
:=$(FFMPEG_PATENTED_MUXERS
)
213 FFMPEG_PATENTED_PARSERS
:= \
218 PKG_CONFIG_DEPENDS
:= \
219 $(patsubst %,CONFIG_FFMPEG_CUSTOM_ENCODER_
%,$(FFMPEG_CUSTOM_ENCODERS
)) \
220 $(patsubst %,CONFIG_FFMPEG_CUSTOM_DECODER_
%,$(FFMPEG_CUSTOM_DECODERS
)) \
221 $(patsubst %,CONFIG_FFMPEG_CUSTOM_MUXER_
%,$(FFMPEG_CUSTOM_MUXERS
)) \
222 $(patsubst %,CONFIG_FFMPEG_CUSTOM_DEMUXER_
%,$(FFMPEG_CUSTOM_DEMUXERS
)) \
223 $(patsubst %,CONFIG_FFMPEG_CUSTOM_PARSER_
%,$(FFMPEG_CUSTOM_PARSERS
)) \
224 $(patsubst %,CONFIG_FFMPEG_CUSTOM_PROTOCOL_
%,$(FFMPEG_CUSTOM_PROTOCOLS
))
226 include $(INCLUDE_DIR
)/package.mk
228 define Package
/ffmpeg
/Default
230 URL
:=https
://ffmpeg.org
/
231 DEPENDS
+= +libpthread
234 define Package
/ffmpeg
/Default
/description
235 FFmpeg is a a software package that can record
, convert and stream digital
236 audio and video in numerous formats.
238 FFmpeg licensing
/ patent issues are complex. It is the reponsibility of the
239 user to understand any requirements in this regard with its usage. See
:
240 https
://ffmpeg.org
/legal.html for further information.
244 define Package
/ffmpeg
245 $(call Package
/ffmpeg
/Default
)
249 DEPENDS
+= +libffmpeg-full
253 define Package
/ffmpeg-custom
254 $(call Package
/ffmpeg
/Default
)
257 TITLE
+= program
(custom
)
258 DEPENDS
+= @
!ALL libffmpeg-custom
262 define Package
/ffmpeg
/description
263 $(call Package
/ffmpeg
/Default
/description
)
265 This package contains the FFmpeg command line tool.
268 Package
/ffmpeg-custom
/description
= $(Package
/ffmpeg
/description
)
270 define Package
/ffprobe
271 $(call Package
/ffmpeg
/Default
)
274 TITLE
+= CLI media identifier
275 DEPENDS
+= +libffmpeg-full
279 define Package
/ffprobe-custom
280 $(call Package
/ffmpeg
/Default
)
283 TITLE
+= CLI media identifier
(custom
)
284 DEPENDS
+= @
!ALL libffmpeg-custom
288 define Package
/ffprobe
/description
289 $(call Package
/ffmpeg
/Default
/description
)
291 This package contains the FFprobe command line tool.
294 Package
/ffprobe-custom
/description
= $(Package
/ffprobe
/description
)
296 define Package
/libffmpeg
/Default
297 $(call Package
/ffmpeg
/Default
)
301 DEPENDS
+= +libpthread
+zlib
+libbz2
306 # Package build suppressed when CONFIG_ALL=y
307 define Package
/libffmpeg-custom
308 $(call Package
/libffmpeg
/Default
)
311 +FFMPEG_CUSTOM_SELECT_libopus
:libopus \
312 +PACKAGE_libx264
:libx264
+PACKAGE_lame-lib
:lame-lib \
313 +FFMPEG_CUSTOM_SELECT_libshine
:shine \
314 +PACKAGE_fdk-aac
:fdk-aac
319 define Package
/libffmpeg-custom
/config
320 source
"$(SOURCE)/Config.in"
323 define Package
/libffmpeg-custom
/description
324 $(call Package
/ffmpeg
/Default
/description
)
326 This package contains customized FFmpeg shared libraries.
330 define Package
/libffmpeg-audio-dec
331 $(call Package
/libffmpeg
/Default
)
334 CONFLICTS
:=libffmpeg-full
337 define Package
/libffmpeg-audio-dec
/description
338 $(call Package
/ffmpeg
/Default
/description
)
340 This package contains FFmpeg shared libraries for audio decoding
344 define Package
/libffmpeg-full
345 $(call Package
/libffmpeg
/Default
)
347 DEPENDS
+= +alsa-lib
+libgnutls
+PACKAGE_libopus
:libopus \
349 +!SOFT_FLOAT
:lame-lib \
350 +PACKAGE_libx264
:libx264 \
351 +!PACKAGE_libx264
:fdk-aac
353 PROVIDES
+=libffmpeg-mini libffmpeg-audio-dec
357 define Package
/libffmpeg-full
/description
358 $(call Package
/ffmpeg
/Default
/description
)
360 This package contains full-featured FFmpeg shared libraries.
364 define Package
/libffmpeg-mini
365 $(call Package
/libffmpeg
/Default
)
368 CONFLICTS
:=libffmpeg-full
371 define Package
/libffmpeg-mini
/description
372 $(call Package
/ffmpeg
/Default
/description
)
374 This package contains minimal-featured FFmpeg shared libraries.
378 # Strip off FPU notation
379 REAL_CPU_TYPE
:=$(firstword $(subst +, ,$(CONFIG_CPU_TYPE
)))
380 # Fixup cpu types recogized by ffmpeg configure
381 REAL_CPU_TYPE
:=$(subst octeonplus
,octeon
+,$(REAL_CPU_TYPE
))
384 CFLAGS
="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS) $(FPIC)" \
385 LDFLAGS
="$(TARGET_LDFLAGS)" \
387 --enable-cross-compile \
388 --cross-prefix
="$(TARGET_CROSS)" \
390 $(if
$(REAL_CPU_TYPE
),--cpu
=$(call qstrip
,$(REAL_CPU_TYPE
)),) \
393 --pkg-config
="pkg-config" \
406 ifeq ($(CONFIG_SOFT_FLOAT
),y
)
414 --disable-fast-unaligned \
415 --disable-runtime-cpudetect
417 else ifneq ($(findstring arm
,$(CONFIG_ARCH
))$(findstring aarch64
,$(CONFIG_ARCH
)),)
419 --disable-runtime-cpudetect
420 # XXX: GitHub issue 3320 ppc cpu with fpu but no altivec (WNDR4700)
421 else ifneq ($(findstring powerpc
,$(CONFIG_ARCH
)),)
426 # selectively disable optimizations according to arch/cpu type
427 ifneq ($(findstring arm
,$(CONFIG_ARCH
)),)
428 FFMPEG_CONFIGURE
+= --enable-lto
430 ifneq ($(findstring vfp
,$(CONFIG_CPU_TYPE
)),)
431 FFMPEG_CONFIGURE
+= --enable-vfp
433 FFMPEG_CONFIGURE
+= --disable-vfp
435 ifneq ($(findstring neon
,$(CONFIG_CPU_TYPE
)),)
440 FFMPEG_CONFIGURE
+= --disable-neon
444 ifneq ($(findstring aarch64
,$(CONFIG_ARCH
)),)
451 ifeq ($(ARCH
),x86_64
)
452 FFMPEG_CONFIGURE
+= --enable-lto
455 ifeq ($(CONFIG_FFMPEG_X86ASM
),y
)
456 FFMPEG_CONFIGURE
+= --enable-x86asm
458 FFMPEG_CONFIGURE
+= --disable-x86asm
461 ifeq ($(BUILD_VARIANT
),full
)
465 --disable-
$(1)="$(c)" \
470 $(if
$(CONFIG_BUILD_PATENTED
),, \
471 $(call FFMPEG_DISABLE
,decoder
,$(FFMPEG_PATENTED_DECODERS
)) \
472 $(call FFMPEG_DISABLE
,muxer
,$(FFMPEG_PATENTED_MUXERS
)) \
473 $(call FFMPEG_DISABLE
,demuxer
,$(FFMPEG_PATENTED_DEMUXERS
)) \
474 $(call FFMPEG_DISABLE
,parser
,$(FFMPEG_PATENTED_PARSERS
))) \
475 $(if
$(CONFIG_PACKAGE_libopus
),--enable-libopus
)
476 ifeq ($(CONFIG_SOFT_FLOAT
),y
)
480 $(if
$(CONFIG_PACKAGE_shine
),--enable-libshine
)
482 ifeq ($(ARCH
),x86_64
)
483 FFMPEG_CONFIGURE
+= --enable-hardcoded-tables
485 FFMPEG_CONFIGURE
+= --enable-small
487 FFMPEG_CONFIGURE
+= $(if
$(CONFIG_PACKAGE_lame-lib
),--enable-libmp3lame
)
489 # x264 support and fdk-aac support can't coexist and be distributed.
490 # Prioritize x264 over fdk-aac in default builds (maintain status-quo).
491 ifneq ($(CONFIG_PACKAGE_libx264
),)
496 FFMPEG_CONFIGURE
+= $(if
$(CONFIG_PACKAGE_fdk-aac
),--enable-libfdk-aac
)
500 ifeq ($(BUILD_VARIANT
),custom
)
504 $(if
$($(3)_
$(c
)),--enable-
$(1)="$(c)") \
507 ifeq ($(CONFIG_FFMPEG_CUSTOM_LARGE
),y
)
509 --enable-hardcoded-tables
515 ifeq ($(CONFIG_FFMPEG_CUSTOM_GPL
),y
)
516 FFMPEG_CONFIGURE
+= --enable-gpl
519 ifeq ($(CONFIG_FFMPEG_CUSTOM_GPLV3
),y
)
520 FFMPEG_CONFIGURE
+= --enable-version3
523 ifeq ($(CONFIG_FFMPEG_CUSTOM_NONFREE
),y
)
524 FFMPEG_CONFIGURE
+= --enable-nonfree
527 ifneq ($(CONFIG_FFMPEG_CUSTOM_PROGRAMS
),y
)
536 --disable-everything \
537 $(call FFMPEG_ENABLE
,encoder
,$(FFMPEG_CUSTOM_ENCODERS
),CONFIG_FFMPEG_CUSTOM_ENCODER
) \
538 $(call FFMPEG_ENABLE
,decoder
,$(FFMPEG_CUSTOM_DECODERS
),CONFIG_FFMPEG_CUSTOM_DECODER
) \
539 $(call FFMPEG_ENABLE
,muxer
,$(FFMPEG_CUSTOM_MUXERS
),CONFIG_FFMPEG_CUSTOM_MUXER
) \
540 $(call FFMPEG_ENABLE
,demuxer
,$(FFMPEG_CUSTOM_DEMUXERS
),CONFIG_FFMPEG_CUSTOM_DEMUXER
) \
541 $(call FFMPEG_ENABLE
,parser
,$(FFMPEG_CUSTOM_PARSERS
),CONFIG_FFMPEG_CUSTOM_PARSER
) \
542 $(call FFMPEG_ENABLE
,protocol
,$(FFMPEG_CUSTOM_PROTOCOLS
),CONFIG_FFMPEG_CUSTOM_PROTOCOL
) \
544 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_adpcm
),y
)
546 --enable-decoder
=adpcm_ima_wav \
547 --enable-decoder
=adpcm_ima_qt \
548 --enable-decoder
=adpcm_ms
551 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libfdk-aac
),y
)
553 --enable-libfdk-aac
--enable-encoder
=libfdk_aac
556 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libmp3lame
),y
)
558 --enable-libmp3lame
--enable-encoder
=libmp3lame
561 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libopus
),y
)
563 --enable-libopus
--enable-decoder
=libopus
--enable-encoder
=libopus
566 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libshine
),y
)
568 --enable-libshine
--enable-encoder
=libshine
571 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libx264
),y
)
573 --enable-libx264
--enable-encoder
=libx264
575 FFMPEG_CONFIGURE
+= --disable-postproc
580 ifeq ($(BUILD_VARIANT
),audio-dec
)
584 --enable-
$(1)="$(c)" \
594 --disable-swresample \
596 --disable-everything \
597 $(call FFMPEG_ENABLE
,decoder
,$(FFMPEG_AUDIO_DECODERS
)) \
598 $(call FFMPEG_ENABLE
,demuxer
,$(FFMPEG_AUDIO_DEMUXERS
)) \
599 $(call FFMPEG_ENABLE
,protocol
,$(FFMPEG_AUDIO_PROTOCOLS
)) \
600 --disable-decoder
=pcm_bluray
,pcm_dvd
603 ifeq ($(BUILD_VARIANT
),mini
)
607 --enable-
$(1)="$(c)" \
617 --disable-swresample \
619 --disable-everything \
620 $(call FFMPEG_ENABLE
,decoder
,$(FFMPEG_MINI_DECODERS
)) \
621 $(call FFMPEG_ENABLE
,demuxer
,$(FFMPEG_MINI_DEMUXERS
)) \
622 $(call FFMPEG_ENABLE
,protocol
,$(FFMPEG_MINI_PROTOCOLS
)) \
623 $(if
$(CONFIG_BUILD_PATENTED
), \
624 $(call FFMPEG_ENABLE
,decoder
,$(FFMPEG_PATENTED_MINI_DECODERS
)))
627 ifneq ($(CONFIG_TARGET_x86
),)
628 TARGET_CFLAGS
+= -fomit-frame-pointer
631 define Build
/Configure
632 ( cd
$(PKG_BUILD_DIR
); $(FFMPEG_CONFIGURE
) )
636 $(MAKE
) -C
$(PKG_BUILD_DIR
) \
637 DESTDIR
="$(PKG_INSTALL_DIR)" \
641 define Build
/InstallDev
/custom
642 $(INSTALL_DIR
) $(1)/usr
/include
643 $(CP
) $(PKG_INSTALL_DIR
)/usr
/include/lib
{avcodec
,avdevice
,avformat
,avutil
} $(1)/usr
/include/
644 $(INSTALL_DIR
) $(1)/usr
/lib
645 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avcodec
,avdevice
,avformat
,avutil
}.
{a
,so
*} $(1)/usr
/lib
/
646 ifeq ($(CONFIG_FFMPEG_CUSTOM_PROGRAMS
),y
)
647 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avfilter
,swresample
}.
{a
,so
*} $(1)/usr
/lib
/
649 $(INSTALL_DIR
) $(1)/usr
/lib
/pkgconfig
650 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/pkgconfig
/lib
{avcodec
,avdevice
,avformat
,avutil
}.
pc $(1)/usr
/lib
/pkgconfig
/
651 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libx264
),y
)
652 $(CP
) $(PKG_INSTALL_DIR
)/usr
/include/libpostproc
$(1)/usr
/include/
653 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/libpostproc.
{a
,so
*} $(1)/usr
/lib
/
654 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/pkgconfig
/libpostproc.
pc $(1)/usr
/lib
/pkgconfig
/
658 # Only ffmpeg with libx264 is GPL (yes libpostproc); all other builds are lgpl (no libpostproc)
659 define Build
/InstallDev
/full
660 $(INSTALL_DIR
) $(1)/usr
/include
661 $(INSTALL_DIR
) $(1)/usr
/lib
662 $(INSTALL_DIR
) $(1)/usr
/lib
/pkgconfig
663 $(CP
) $(PKG_INSTALL_DIR
)/usr
/include/lib
{avcodec
,avdevice
,avfilter
,avformat
,avutil
,swresample
,swscale
} $(1)/usr
/include/
664 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avcodec
,avdevice
,avfilter
,avformat
,avutil
,swresample
,swscale
}.
{a
,so
*} $(1)/usr
/lib
/
665 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/pkgconfig
/lib
{avcodec
,avdevice
,avfilter
,avformat
,avutil
,swresample
,swscale
}.
pc $(1)/usr
/lib
/pkgconfig
/
666 ifneq ($(CONFIG_PACKAGE_libx264
),)
667 $(CP
) $(PKG_INSTALL_DIR
)/usr
/include/libpostproc
$(1)/usr
/include/
668 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/libpostproc.
{a
,so
*} $(1)/usr
/lib
/
669 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/pkgconfig
/libpostproc.
pc $(1)/usr
/lib
/pkgconfig
/
673 define Build
/InstallDev
/mini
674 $(INSTALL_DIR
) $(1)/usr
/include
675 $(CP
) $(PKG_INSTALL_DIR
)/usr
/include/lib
{avcodec
,avformat
,avutil
} $(1)/usr
/include/
676 $(INSTALL_DIR
) $(1)/usr
/lib
677 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avcodec
,avformat
,avutil
}.
{a
,so
*} $(1)/usr
/lib
/
678 $(INSTALL_DIR
) $(1)/usr
/lib
/pkgconfig
679 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/pkgconfig
/lib
{avcodec
,avformat
,avutil
}.
pc $(1)/usr
/lib
/pkgconfig
/
682 Build
/InstallDev
/audio-dec
= $(Build
/InstallDev
/custom
)
684 # XXX: attempt at installing "best" dev files available
685 ifeq ($(BUILD_VARIANT
),custom
)
686 # XXX: only install "custom" dev files if -full & -mini are not selected
687 ifeq ($(CONFIG_PACKAGE_libffmpeg-full
)$(CONFIG_PACKAGE_libffmpeg-mini
),)
688 Build
/InstallDev
= $(Build
/InstallDev
/custom
)
691 ifeq ($(BUILD_VARIANT
),audio-dec
)
692 # XXX: only install "audio-dec" dev files if -full & -mini are not selected
693 ifeq ($(CONFIG_PACKAGE_libffmpeg-full
)$(CONFIG_PACKAGE_libffmpeg-mini
),)
694 Build
/InstallDev
= $(Build
/InstallDev
/audio-dec
)
697 ifeq ($(BUILD_VARIANT
),full
)
698 # XXX: always install "full" dev files if -full is selected
699 Build
/InstallDev
= $(Build
/InstallDev
/full
)
701 ifeq ($(BUILD_VARIANT
),mini
)
702 # XXX: only install "mini" dev files if -full is not selected
703 ifeq ($(CONFIG_PACKAGE_libffmpeg-full
),)
704 Build
/InstallDev
= $(Build
/InstallDev
/mini
)
708 define Package
/ffmpeg
/install
709 $(INSTALL_DIR
) $(1)/usr
/bin
710 $(CP
) $(PKG_INSTALL_DIR
)/usr
/bin
/ffmpeg
$(1)/usr
/bin
/
713 Package
/ffmpeg-custom
/install = $(Package
/ffmpeg
/install)
715 define Package
/ffprobe
/install
716 $(INSTALL_DIR
) $(1)/usr
/bin
717 $(CP
) $(PKG_INSTALL_DIR
)/usr
/bin
/ffprobe
$(1)/usr
/bin
/
720 Package
/ffprobe-custom
/install = $(Package
/ffprobe
/install)
722 define Package
/libffmpeg-custom
/install
723 $(INSTALL_DIR
) $(1)/usr
/lib
724 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avcodec
,avdevice
,avformat
,avutil
}.so.
* $(1)/usr
/lib
/
725 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libx264
),y
)
726 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/libpostproc.so.
* $(1)/usr
/lib
/
728 ifeq ($(CONFIG_FFMPEG_CUSTOM_PROGRAMS
),y
)
729 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avfilter
,swresample
}.so.
* $(1)/usr
/lib
/
733 # Only ffmpeg with libx264 is GPL (yes libpostproc); all other builds are lgpl (no libpostproc)
734 define Package
/libffmpeg-full
/install
735 $(INSTALL_DIR
) $(1)/usr
/lib
736 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avcodec
,avdevice
,avfilter
,avformat
,avutil
,swresample
,swscale
}.so.
* $(1)/usr
/lib
/
737 ifneq ($(CONFIG_PACKAGE_libx264
),)
738 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/libpostproc.so.
* $(1)/usr
/lib
/
742 define Package
/libffmpeg-mini
/install
743 $(INSTALL_DIR
) $(1)/usr
/lib
744 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/lib
{avcodec
,avformat
,avutil
}.so.
* $(1)/usr
/lib
/
747 Package
/libffmpeg-audio-dec
/install = $(Package
/libffmpeg-custom
/install)
749 $(eval
$(call BuildPackage
,ffmpeg
))
750 $(eval
$(call BuildPackage
,ffprobe
))
751 $(eval
$(call BuildPackage
,ffmpeg-custom
))
752 $(eval
$(call BuildPackage
,ffprobe-custom
))
753 $(eval
$(call BuildPackage
,libffmpeg-audio-dec
))
754 $(eval
$(call BuildPackage
,libffmpeg-full
))
755 $(eval
$(call BuildPackage
,libffmpeg-mini
))
756 $(eval
$(call BuildPackage
,libffmpeg-custom
))