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