]> granicus.if.org Git - libvpx/blob - examples.mk
vp9_denoiser_update_frame_stats: unused parm fixed
[libvpx] / examples.mk
1 ##
2 ##  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 ##
4 ##  Use of this source code is governed by a BSD-style license
5 ##  that can be found in the LICENSE file in the root of the source
6 ##  tree. An additional intellectual property rights grant can be found
7 ##  in the file PATENTS.  All contributing project authors may
8 ##  be found in the AUTHORS file in the root of the source tree.
9 ##
10
11 LIBYUV_SRCS +=  third_party/libyuv/include/libyuv/basic_types.h  \
12                 third_party/libyuv/include/libyuv/convert.h \
13                 third_party/libyuv/include/libyuv/convert_argb.h \
14                 third_party/libyuv/include/libyuv/convert_from.h \
15                 third_party/libyuv/include/libyuv/cpu_id.h  \
16                 third_party/libyuv/include/libyuv/planar_functions.h  \
17                 third_party/libyuv/include/libyuv/rotate.h  \
18                 third_party/libyuv/include/libyuv/row.h  \
19                 third_party/libyuv/include/libyuv/scale.h  \
20                 third_party/libyuv/include/libyuv/scale_row.h  \
21                 third_party/libyuv/source/cpu_id.cc \
22                 third_party/libyuv/source/planar_functions.cc \
23                 third_party/libyuv/source/row_any.cc \
24                 third_party/libyuv/source/row_common.cc \
25                 third_party/libyuv/source/row_mips.cc \
26                 third_party/libyuv/source/row_neon.cc \
27                 third_party/libyuv/source/row_neon64.cc \
28                 third_party/libyuv/source/row_posix.cc \
29                 third_party/libyuv/source/row_win.cc \
30                 third_party/libyuv/source/scale.cc \
31                 third_party/libyuv/source/scale_common.cc \
32                 third_party/libyuv/source/scale_mips.cc \
33                 third_party/libyuv/source/scale_neon.cc \
34                 third_party/libyuv/source/scale_posix.cc \
35                 third_party/libyuv/source/scale_win.cc \
36
37 LIBWEBM_MUXER_SRCS += third_party/libwebm/mkvmuxer.cpp \
38                       third_party/libwebm/mkvmuxerutil.cpp \
39                       third_party/libwebm/mkvwriter.cpp \
40                       third_party/libwebm/mkvmuxer.hpp \
41                       third_party/libwebm/mkvmuxertypes.hpp \
42                       third_party/libwebm/mkvmuxerutil.hpp \
43                       third_party/libwebm/mkvparser.hpp \
44                       third_party/libwebm/mkvwriter.hpp \
45                       third_party/libwebm/webmids.hpp
46
47 LIBWEBM_PARSER_SRCS = third_party/libwebm/mkvparser.cpp \
48                       third_party/libwebm/mkvreader.cpp \
49                       third_party/libwebm/mkvparser.hpp \
50                       third_party/libwebm/mkvreader.hpp
51
52 # List of examples to build. UTILS are tools meant for distribution
53 # while EXAMPLES demonstrate specific portions of the API.
54 UTILS-$(CONFIG_DECODERS)    += vpxdec.c
55 vpxdec.SRCS                 += md5_utils.c md5_utils.h
56 vpxdec.SRCS                 += vpx_ports/mem_ops.h
57 vpxdec.SRCS                 += vpx_ports/mem_ops_aligned.h
58 vpxdec.SRCS                 += vpx_ports/vpx_timer.h
59 vpxdec.SRCS                 += vpx/vpx_integer.h
60 vpxdec.SRCS                 += args.c args.h
61 vpxdec.SRCS                 += ivfdec.c ivfdec.h
62 vpxdec.SRCS                 += tools_common.c tools_common.h
63 vpxdec.SRCS                 += y4menc.c y4menc.h
64 ifeq ($(CONFIG_LIBYUV),yes)
65   vpxdec.SRCS                 += $(LIBYUV_SRCS)
66 endif
67 ifeq ($(CONFIG_WEBM_IO),yes)
68   vpxdec.SRCS                 += $(LIBWEBM_PARSER_SRCS)
69   vpxdec.SRCS                 += webmdec.cc webmdec.h
70 endif
71 vpxdec.GUID                  = BA5FE66F-38DD-E034-F542-B1578C5FB950
72 vpxdec.DESCRIPTION           = Full featured decoder
73 UTILS-$(CONFIG_ENCODERS)    += vpxenc.c
74 vpxenc.SRCS                 += args.c args.h y4minput.c y4minput.h vpxenc.h
75 vpxenc.SRCS                 += ivfdec.c ivfdec.h
76 vpxenc.SRCS                 += ivfenc.c ivfenc.h
77 vpxenc.SRCS                 += rate_hist.c rate_hist.h
78 vpxenc.SRCS                 += tools_common.c tools_common.h
79 vpxenc.SRCS                 += warnings.c warnings.h
80 vpxenc.SRCS                 += vpx_ports/mem_ops.h
81 vpxenc.SRCS                 += vpx_ports/mem_ops_aligned.h
82 vpxenc.SRCS                 += vpx_ports/vpx_timer.h
83 vpxenc.SRCS                 += vpxstats.c vpxstats.h
84 ifeq ($(CONFIG_LIBYUV),yes)
85   vpxenc.SRCS                 += $(LIBYUV_SRCS)
86 endif
87 ifeq ($(CONFIG_WEBM_IO),yes)
88   vpxenc.SRCS                 += $(LIBWEBM_MUXER_SRCS)
89   vpxenc.SRCS                 += webmenc.cc webmenc.h
90 endif
91 vpxenc.GUID                  = 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
92 vpxenc.DESCRIPTION           = Full featured encoder
93 ifeq ($(CONFIG_SPATIAL_SVC),yes)
94   EXAMPLES-$(CONFIG_VP9_ENCODER)      += vp9_spatial_svc_encoder.c
95   vp9_spatial_svc_encoder.SRCS        += args.c args.h
96   vp9_spatial_svc_encoder.SRCS        += ivfenc.c ivfenc.h
97   vp9_spatial_svc_encoder.SRCS        += tools_common.c tools_common.h
98   vp9_spatial_svc_encoder.SRCS        += video_common.h
99   vp9_spatial_svc_encoder.SRCS        += video_writer.h video_writer.c
100   vp9_spatial_svc_encoder.SRCS        += vpxstats.c vpxstats.h
101   vp9_spatial_svc_encoder.GUID        = 4A38598D-627D-4505-9C7B-D4020C84100D
102   vp9_spatial_svc_encoder.DESCRIPTION = VP9 Spatial SVC Encoder
103 endif
104
105 ifneq ($(CONFIG_SHARED),yes)
106 EXAMPLES-$(CONFIG_VP9_ENCODER)    += resize_util.c
107 endif
108
109 EXAMPLES-$(CONFIG_ENCODERS)          += vpx_temporal_svc_encoder.c
110 vpx_temporal_svc_encoder.SRCS        += ivfenc.c ivfenc.h
111 vpx_temporal_svc_encoder.SRCS        += tools_common.c tools_common.h
112 vpx_temporal_svc_encoder.SRCS        += video_common.h
113 vpx_temporal_svc_encoder.SRCS        += video_writer.h video_writer.c
114 vpx_temporal_svc_encoder.GUID        = B18C08F2-A439-4502-A78E-849BE3D60947
115 vpx_temporal_svc_encoder.DESCRIPTION = Temporal SVC Encoder
116 EXAMPLES-$(CONFIG_VP8_DECODER)     += simple_decoder.c
117 simple_decoder.GUID                 = D3BBF1E9-2427-450D-BBFF-B2843C1D44CC
118 simple_decoder.SRCS                += ivfdec.h ivfdec.c
119 simple_decoder.SRCS                += tools_common.h tools_common.c
120 simple_decoder.SRCS                += video_common.h
121 simple_decoder.SRCS                += video_reader.h video_reader.c
122 simple_decoder.SRCS                += vpx_ports/mem_ops.h
123 simple_decoder.SRCS                += vpx_ports/mem_ops_aligned.h
124 simple_decoder.DESCRIPTION          = Simplified decoder loop
125 EXAMPLES-$(CONFIG_VP8_DECODER)     += postproc.c
126 postproc.SRCS                      += ivfdec.h ivfdec.c
127 postproc.SRCS                      += tools_common.h tools_common.c
128 postproc.SRCS                      += video_common.h
129 postproc.SRCS                      += video_reader.h video_reader.c
130 postproc.SRCS                      += vpx_ports/mem_ops.h
131 postproc.SRCS                      += vpx_ports/mem_ops_aligned.h
132 postproc.GUID                       = 65E33355-F35E-4088-884D-3FD4905881D7
133 postproc.DESCRIPTION                = Decoder postprocessor control
134 EXAMPLES-$(CONFIG_VP8_DECODER)     += decode_to_md5.c
135 decode_to_md5.SRCS                 += md5_utils.h md5_utils.c
136 decode_to_md5.SRCS                 += ivfdec.h ivfdec.c
137 decode_to_md5.SRCS                 += tools_common.h tools_common.c
138 decode_to_md5.SRCS                 += video_common.h
139 decode_to_md5.SRCS                 += video_reader.h video_reader.c
140 decode_to_md5.SRCS                 += vpx_ports/mem_ops.h
141 decode_to_md5.SRCS                 += vpx_ports/mem_ops_aligned.h
142 decode_to_md5.GUID                  = 59120B9B-2735-4BFE-B022-146CA340FE42
143 decode_to_md5.DESCRIPTION           = Frame by frame MD5 checksum
144 EXAMPLES-$(CONFIG_VP8_ENCODER)  += simple_encoder.c
145 simple_encoder.SRCS             += ivfenc.h ivfenc.c
146 simple_encoder.SRCS             += tools_common.h tools_common.c
147 simple_encoder.SRCS             += video_common.h
148 simple_encoder.SRCS             += video_writer.h video_writer.c
149 simple_encoder.GUID              = 4607D299-8A71-4D2C-9B1D-071899B6FBFD
150 simple_encoder.DESCRIPTION       = Simplified encoder loop
151 EXAMPLES-$(CONFIG_VP8_ENCODER)  += twopass_encoder.c
152 twopass_encoder.SRCS            += ivfenc.h ivfenc.c
153 twopass_encoder.SRCS            += tools_common.h tools_common.c
154 twopass_encoder.SRCS            += video_common.h
155 twopass_encoder.SRCS            += video_writer.h video_writer.c
156 twopass_encoder.GUID             = 73494FA6-4AF9-4763-8FBB-265C92402FD8
157 twopass_encoder.DESCRIPTION      = Two-pass encoder loop
158 ifeq ($(CONFIG_DECODERS),yes)
159 EXAMPLES-$(CONFIG_VP8_ENCODER)  += decode_with_drops.c
160 decode_with_drops.SRCS          += ivfdec.h ivfdec.c
161 decode_with_drops.SRCS          += tools_common.h tools_common.c
162 decode_with_drops.SRCS          += video_common.h
163 decode_with_drops.SRCS          += video_reader.h video_reader.c
164 decode_with_drops.SRCS          += vpx_ports/mem_ops.h
165 decode_with_drops.SRCS          += vpx_ports/mem_ops_aligned.h
166 endif
167 decode_with_drops.GUID           = CE5C53C4-8DDA-438A-86ED-0DDD3CDB8D26
168 decode_with_drops.DESCRIPTION    = Drops frames while decoding
169 EXAMPLES-$(CONFIG_ENCODERS)        += set_maps.c
170 set_maps.SRCS                      += ivfenc.h ivfenc.c
171 set_maps.SRCS                      += tools_common.h tools_common.c
172 set_maps.SRCS                      += video_common.h
173 set_maps.SRCS                      += video_writer.h video_writer.c
174 set_maps.GUID                       = ECB2D24D-98B8-4015-A465-A4AF3DCC145F
175 set_maps.DESCRIPTION                = Set active and ROI maps
176 EXAMPLES-$(CONFIG_VP8_ENCODER)     += vp8cx_set_ref.c
177 vp8cx_set_ref.SRCS                 += ivfenc.h ivfenc.c
178 vp8cx_set_ref.SRCS                 += tools_common.h tools_common.c
179 vp8cx_set_ref.SRCS                 += video_common.h
180 vp8cx_set_ref.SRCS                 += video_writer.h video_writer.c
181 vp8cx_set_ref.GUID                  = C5E31F7F-96F6-48BD-BD3E-10EBF6E8057A
182 vp8cx_set_ref.DESCRIPTION           = VP8 set encoder reference frame
183
184
185 ifeq ($(CONFIG_MULTI_RES_ENCODING),yes)
186 ifeq ($(CONFIG_LIBYUV),yes)
187 EXAMPLES-$(CONFIG_VP8_ENCODER)          += vp8_multi_resolution_encoder.c
188 vp8_multi_resolution_encoder.SRCS       += tools_common.h tools_common.c
189 vp8_multi_resolution_encoder.SRCS       += $(LIBYUV_SRCS)
190 vp8_multi_resolution_encoder.GUID        = 04f8738e-63c8-423b-90fa-7c2703a374de
191 vp8_multi_resolution_encoder.DESCRIPTION = VP8 Multiple-resolution Encoding
192 endif
193 endif
194
195 # Handle extra library flags depending on codec configuration
196
197 # We should not link to math library (libm) on RVCT
198 # when building for bare-metal targets
199 ifeq ($(CONFIG_OS_SUPPORT), yes)
200 CODEC_EXTRA_LIBS-$(CONFIG_VP8)         += m
201 CODEC_EXTRA_LIBS-$(CONFIG_VP9)         += m
202 else
203     ifeq ($(CONFIG_GCC), yes)
204     CODEC_EXTRA_LIBS-$(CONFIG_VP8)         += m
205     CODEC_EXTRA_LIBS-$(CONFIG_VP9)         += m
206     endif
207 endif
208 #
209 # End of specified files. The rest of the build rules should happen
210 # automagically from here.
211 #
212
213
214 # Examples need different flags based on whether we're building
215 # from an installed tree or a version controlled tree. Determine
216 # the proper paths.
217 ifeq ($(HAVE_ALT_TREE_LAYOUT),yes)
218     LIB_PATH-yes := $(SRC_PATH_BARE)/../lib
219     INC_PATH-yes := $(SRC_PATH_BARE)/../include
220 else
221     LIB_PATH-yes                     += $(if $(BUILD_PFX),$(BUILD_PFX),.)
222     INC_PATH-$(CONFIG_VP8_DECODER)   += $(SRC_PATH_BARE)/vp8
223     INC_PATH-$(CONFIG_VP8_ENCODER)   += $(SRC_PATH_BARE)/vp8
224     INC_PATH-$(CONFIG_VP9_DECODER)   += $(SRC_PATH_BARE)/vp9
225     INC_PATH-$(CONFIG_VP9_ENCODER)   += $(SRC_PATH_BARE)/vp9
226 endif
227 INC_PATH-$(CONFIG_LIBYUV) += $(SRC_PATH_BARE)/third_party/libyuv/include
228 LIB_PATH := $(call enabled,LIB_PATH)
229 INC_PATH := $(call enabled,INC_PATH)
230 INTERNAL_CFLAGS = $(addprefix -I,$(INC_PATH))
231 INTERNAL_LDFLAGS += $(addprefix -L,$(LIB_PATH))
232
233
234 # Expand list of selected examples to build (as specified above)
235 UTILS           = $(call enabled,UTILS)
236 EXAMPLES        = $(addprefix examples/,$(call enabled,EXAMPLES))
237 ALL_EXAMPLES    = $(UTILS) $(EXAMPLES)
238 UTIL_SRCS       = $(foreach ex,$(UTILS),$($(ex:.c=).SRCS))
239 ALL_SRCS        = $(foreach ex,$(ALL_EXAMPLES),$($(notdir $(ex:.c=)).SRCS))
240 CODEC_EXTRA_LIBS=$(sort $(call enabled,CODEC_EXTRA_LIBS))
241
242
243 # Expand all example sources into a variable containing all sources
244 # for that example (not just them main one specified in UTILS/EXAMPLES)
245 # and add this file to the list (for MSVS workspace generation)
246 $(foreach ex,$(ALL_EXAMPLES),$(eval $(notdir $(ex:.c=)).SRCS += $(ex) examples.mk))
247
248
249 # If this is a universal (fat) binary, then all the subarchitectures have
250 # already been built and our job is to stitch them together. The
251 # BUILD_OBJS variable indicates whether we should be building
252 # (compiling, linking) the library. The LIPO_OBJS variable indicates
253 # that we're stitching.
254 $(eval $(if $(filter universal%,$(TOOLCHAIN)),LIPO_OBJS,BUILD_OBJS):=yes)
255
256
257 # Create build/install dependencies for all examples. The common case
258 # is handled here. The MSVS case is handled below.
259 NOT_MSVS = $(if $(CONFIG_MSVS),,yes)
260 DIST-BINS-$(NOT_MSVS)      += $(addprefix bin/,$(ALL_EXAMPLES:.c=$(EXE_SFX)))
261 INSTALL-BINS-$(NOT_MSVS)   += $(addprefix bin/,$(UTILS:.c=$(EXE_SFX)))
262 DIST-SRCS-yes              += $(ALL_SRCS)
263 INSTALL-SRCS-yes           += $(UTIL_SRCS)
264 OBJS-$(NOT_MSVS)           += $(if $(BUILD_OBJS),$(call objs,$(ALL_SRCS)))
265 BINS-$(NOT_MSVS)           += $(addprefix $(BUILD_PFX),$(ALL_EXAMPLES:.c=$(EXE_SFX)))
266
267
268 # Instantiate linker template for all examples.
269 CODEC_LIB=$(if $(CONFIG_DEBUG_LIBS),vpx_g,vpx)
270 SHARED_LIB_SUF=$(if $(filter darwin%,$(TGT_OS)),.dylib,.so)
271 CODEC_LIB_SUF=$(if $(CONFIG_SHARED),$(SHARED_LIB_SUF),.a)
272 $(foreach bin,$(BINS-yes),\
273     $(if $(BUILD_OBJS),$(eval $(bin):\
274         $(LIB_PATH)/lib$(CODEC_LIB)$(CODEC_LIB_SUF)))\
275     $(if $(BUILD_OBJS),$(eval $(call linker_template,$(bin),\
276         $(call objs,$($(notdir $(bin:$(EXE_SFX)=)).SRCS)) \
277         -l$(CODEC_LIB) $(addprefix -l,$(CODEC_EXTRA_LIBS))\
278         )))\
279     $(if $(LIPO_OBJS),$(eval $(call lipo_bin_template,$(bin))))\
280     )
281
282
283 # The following pairs define a mapping of locations in the distribution
284 # tree to locations in the source/build trees.
285 INSTALL_MAPS += src/%.c   %.c
286 INSTALL_MAPS += src/%     $(SRC_PATH_BARE)/%
287 INSTALL_MAPS += bin/%     %
288 INSTALL_MAPS += %         %
289
290
291 # Set up additional MSVS environment
292 ifeq ($(CONFIG_MSVS),yes)
293 CODEC_LIB=$(if $(CONFIG_SHARED),vpx,$(if $(CONFIG_STATIC_MSVCRT),vpxmt,vpxmd))
294 # This variable uses deferred expansion intentionally, since the results of
295 # $(wildcard) may change during the course of the Make.
296 VS_PLATFORMS = $(foreach d,$(wildcard */Release/$(CODEC_LIB).lib),$(word 1,$(subst /, ,$(d))))
297 INSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),bin/$(p)/%  $(p)/Release/%)
298 endif
299
300 # Build Visual Studio Projects. We use a template here to instantiate
301 # explicit rules rather than using an implicit rule because we want to
302 # leverage make's VPATH searching rather than specifying the paths on
303 # each file in ALL_EXAMPLES. This has the unfortunate side effect that
304 # touching the source files trigger a rebuild of the project files
305 # even though there is no real dependency there (the dependency is on
306 # the makefiles). We may want to revisit this.
307 define vcproj_template
308 $(1): $($(1:.$(VCPROJ_SFX)=).SRCS) vpx.$(VCPROJ_SFX)
309         @echo "    [vcproj] $$@"
310         $$(GEN_VCPROJ)\
311             --exe\
312             --target=$$(TOOLCHAIN)\
313             --name=$$(@:.$(VCPROJ_SFX)=)\
314             --ver=$$(CONFIG_VS_VERSION)\
315             --proj-guid=$$($$(@:.$(VCPROJ_SFX)=).GUID)\
316             --src-path-bare="$(SRC_PATH_BARE)" \
317             $$(if $$(CONFIG_STATIC_MSVCRT),--static-crt) \
318             --out=$$@ $$(INTERNAL_CFLAGS) $$(CFLAGS) \
319             $$(INTERNAL_LDFLAGS) $$(LDFLAGS) -l$$(CODEC_LIB) $$^
320 endef
321 ALL_EXAMPLES_BASENAME := $(notdir $(ALL_EXAMPLES))
322 PROJECTS-$(CONFIG_MSVS) += $(ALL_EXAMPLES_BASENAME:.c=.$(VCPROJ_SFX))
323 INSTALL-BINS-$(CONFIG_MSVS) += $(foreach p,$(VS_PLATFORMS),\
324                                $(addprefix bin/$(p)/,$(ALL_EXAMPLES_BASENAME:.c=.exe)))
325 $(foreach proj,$(call enabled,PROJECTS),\
326     $(eval $(call vcproj_template,$(proj))))
327
328 #
329 # Documentation Rules
330 #
331 %.dox: %.c
332         @echo "    [DOXY] $@"
333         @echo "/*!\page example_$(@F:.dox=) $(@F:.dox=)" > $@
334         @echo "   \includelineno $(<F)" >> $@
335         @echo "*/" >> $@
336
337 samples.dox: examples.mk
338         @echo "    [DOXY] $@"
339         @echo "/*!\page samples Sample Code" > $@
340         @echo "    This SDK includes a number of sample applications."\
341               "Each sample documents a feature of the SDK in both prose"\
342               "and the associated C code."\
343               "The following samples are included: ">>$@
344         @$(foreach ex,$(sort $(notdir $(EXAMPLES:.c=))),\
345            echo "     - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@;)
346         @echo >> $@
347         @echo "    In addition, the SDK contains a number of utilities."\
348               "Since these utilities are built upon the concepts described"\
349               "in the sample code listed above, they are not documented in"\
350               "pieces like the samples are. Their source is included here"\
351               "for reference. The following utilities are included:" >> $@
352         @$(foreach ex,$(sort $(UTILS:.c=)),\
353            echo "     - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@;)
354         @echo "*/" >> $@
355
356 CLEAN-OBJS += examples.doxy samples.dox $(ALL_EXAMPLES:.c=.dox)
357 DOCS-yes += examples.doxy samples.dox
358 examples.doxy: samples.dox $(ALL_EXAMPLES:.c=.dox)
359         @echo "INPUT += $^" > $@