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