SubDir HAIKU_TOP src add-ons media plugins ffmpeg ;

SetSubDirSupportedPlatformsBeOSCompatible ;

UsePrivateHeaders media shared ;

SubDirHdrs [ FDirName $(SUBDIR) libavcodec ] ;
SubDirHdrs [ FDirName $(SUBDIR) libavformat ] ;
SubDirHdrs [ FDirName $(SUBDIR) libavutil ] ;
SubDirHdrs [ FDirName $(SUBDIR) libswscale ] ;

Addon ffmpeg :
 	AVCodecDecoder.cpp
 	AVCodecEncoder.cpp
 	AVFormatReader.cpp
 	AVFormatWriter.cpp
 	CodecTable.cpp
	DemuxerTable.cpp
	EncoderTable.cpp
	FFmpegPlugin.cpp
	MuxerTable.cpp
	CpuCapabilities.cpp

	gfx_conv_c.cpp
	gfx_conv_c_lookup.cpp
	gfx_conv_mmx.cpp
 	gfx_util.cpp
 	yuvrgb.nasm
	:
	libavformat.a
	libavcodec.a
	libavcodec_$(TARGET_ARCH).a
	libavutil.a
	libswscale.a
	be
	libmedia.so
	libz.a
	$(TARGET_LIBSUPC++)
;

# FFmpeg libs configuration is in the config.h header. Architecture specific
# defines have been commented out there and are being defined here instead.
# NOTE: These are intentionally global variables, so we can re-use them in
# sub-folders.
HAIKU_FFMPEG_DEFINES = HAVE_AV_CONFIG_H _FILE_OFFSET_BITS=64
	_LARGEFILE_SOURCE ;
HAIKU_FFMPEG_USE_MMX = 1 ;
HAIKU_FFMPEG_USE_MMX2 = 1 ;
HAIKU_FFMPEG_USE_SSE = 0 ;
HAIKU_FFMPEG_USE_SSSE3 = 1 ;
HAIKU_FFMPEG_USE_AMD3DNOW = 0 ;
HAIKU_FFMPEG_USE_AMD3DNOWEXT = 0 ;
HAIKU_FFMPEG_GCC_EXTRA_FLAGS = ;
if $(HAIKU_GCC_VERSION[1]) >= 3 {
	HAIKU_FFMPEG_GCC_EXTRA_FLAGS = -fomit-frame-pointer -fno-pic ;
} else {
	HAIKU_FFMPEG_GCC_EXTRA_FLAGS = -fomit-frame-pointer -DPIC ;
}

if $(TARGET_ARCH) = x86 {
	HAIKU_FFMPEG_DEFINES += ARCH_X86=1 ARCH_X86_32=1 ;
	HAIKU_FFMPEG_DEFINES += ARCH_PPC=0 ;
	HAIKU_FFMPEG_DEFINES += ARCH_SPARC=0 ;
	HAIKU_FFMPEG_DEFINES += HAVE_AMD3DNOW=$(HAIKU_FFMPEG_USE_AMD3DNOW) ;
	HAIKU_FFMPEG_DEFINES += HAVE_AMD3DNOWEXT=$(HAIKU_FFMPEG_USE_AMD3DNOWEXT) ;
	HAIKU_FFMPEG_DEFINES += HAVE_MMX=$(HAIKU_FFMPEG_USE_MMX) ;
	HAIKU_FFMPEG_DEFINES += HAVE_MMX2=$(HAIKU_FFMPEG_USE_MMX2) ;
	HAIKU_FFMPEG_DEFINES += HAVE_SSE=$(HAIKU_FFMPEG_USE_SSE) ;
	HAIKU_FFMPEG_DEFINES += HAVE_SSSE3=$(HAIKU_FFMPEG_USE_SSSE3) ;
	HAIKU_FFMPEG_DEFINES += HAVE_ALTIVEC=0 ;
	HAIKU_FFMPEG_DEFINES += HAVE_VIS=0 ;
} else if $(TARGET_ARCH) = ppc {
	HAIKU_FFMPEG_DEFINES += ARCH_X86=0 ARCH_X86_32=0 ;
	HAIKU_FFMPEG_DEFINES += ARCH_PPC=1 ;
	HAIKU_FFMPEG_DEFINES += ARCH_SPARC=0 ;
	HAIKU_FFMPEG_DEFINES += HAVE_AMD3DNOW=0 HAVE_AMD3DNOWEXT=0 ;
	HAIKU_FFMPEG_DEFINES += HAVE_MMX=0 HAVE_MMX2=0 HAVE_SSE=0 HAVE_SSSE3=0 ;
	HAIKU_FFMPEG_DEFINES += HAVE_ALTIVEC=1 ;
	HAIKU_FFMPEG_DEFINES += HAVE_VIS=0 ;
} else if $(TARGET_ARCH) = sparc {
	HAIKU_FFMPEG_DEFINES += ARCH_X86=0 ARCH_X86_32=0 ;
	HAIKU_FFMPEG_DEFINES += ARCH_PPC=0 ;
	HAIKU_FFMPEG_DEFINES += ARCH_SPARC=1 ;
	HAIKU_FFMPEG_DEFINES += HAVE_AMD3DNOW=0 HAVE_AMD3DNOWEXT=0 ;
	HAIKU_FFMPEG_DEFINES += HAVE_MMX=0 HAVE_MMX2=0 HAVE_SSE=0 HAVE_SSSE3=0 ;
	HAIKU_FFMPEG_DEFINES += HAVE_ALTIVEC=0 ;
	HAIKU_FFMPEG_DEFINES += HAVE_VIS=1 ;
}

if $(HAIKU_INCLUDE_GPL_ADDONS) = 1 {
	HAIKU_FFMPEG_DEFINES += CONFIG_GPL=1 ;
} else {
	HAIKU_FFMPEG_DEFINES += CONFIG_GPL=0 ;
}


HAIKU_FFMPEG_DEFINES = [ FDefines $(HAIKU_FFMPEG_DEFINES) ] ;

SubInclude HAIKU_TOP src add-ons media plugins ffmpeg libavcodec ;
SubInclude HAIKU_TOP src add-ons media plugins ffmpeg libavformat ;
SubInclude HAIKU_TOP src add-ons media plugins ffmpeg libavutil ;
SubInclude HAIKU_TOP src add-ons media plugins ffmpeg libswscale ;
