Compare commits

..

36 Commits

Author SHA1 Message Date
John Koleszar
9e44920247 dixie: cosmetics (line length, braces, etc)
Pass code through AStyle transform, wrap long lines.

Change-Id: Icffa4fc3e9835ec152285ae0e98a1ff3f46e42e6
2011-03-08 13:00:10 -05:00
John Koleszar
246cc0881a dixie: remove unused variables
Change-Id: I9c9d83f441bbe1f268c2610e88d72f7a4adb353e
2011-02-08 09:50:20 -05:00
John Koleszar
51f9ef8e89 dixie: only use sixtap mc filter
Remove all the special case 2-tap, 4-tap, 16x16, 8x8, etc filters,
and instead just use one 2D 6-tap 4x4 filter.

Change-Id: I9ec560fb5609d1a3160e9a3d8b396911073517a0
2011-02-08 09:41:27 -05:00
John Koleszar
9f40e5650c dixie: simplify inter prediction
Always use 4x4 modes rather than special casing 2,4,16 blocks.

Change-Id: I0301da4b0ff1885d79c1ae07b084d2d9b7487f72
2011-02-07 11:53:00 -05:00
John Koleszar
252703291f dixie: simplify intra prediction
Removed all the special case intra prediction code for clarity.

Change-Id: I54c2435aedb2b5b00e668aa9e6d7c332af9cda3f
2011-02-07 09:25:22 -05:00
John Koleszar
26f91d31d1 dixie: simplify bool decoder
Use the simplified bool decoder from the bitstream guide, slightly
modified to prevent reading past the end of the buffer. Modified
the token decoder to use the normal bool decoder rather than
inlining its own.

Change-Id: Ic525e773e9f8331ba548a6505cc6d9e5372a5af0
2011-02-03 09:04:26 -05:00
John Koleszar
3688076d42 dixie: fix memory leaks
Implemented the decoder shutdown call to deallocate buffers when the
codec is destroyed.

Change-Id: I6cd62f40f34e0db91fb7eb8cb673f5d9726fe192
2011-02-03 00:26:37 -05:00
John Koleszar
52a1b7df97 dixie: handle buffer size changes
spatial resampling now supported.

Change-Id: Ifd959072b76ac3f8eeed00a0fd25acdde036defe
2011-02-03 00:07:32 -05:00
John Koleszar
def479510e dixie: support for simple lf, bilinear subpix
Initial support for simple loopfilter and bilinear subpixel motion
interpolation. This adds support for VP8 profiles 1-3 to dixie.

Change-Id: I76d45cf9843f6f7473783b7932af94f033eb6e82
2011-02-02 16:54:35 -05:00
John Koleszar
e75a400cd3 dixie: prevent read of uninitialized memory
When reallocating the framebuffer storage, clear references to the
freed memory to prevent it from being accessed.

Change-Id: Ib496b06be469328e8e269f905dc4c9cb6d453a27
2011-02-01 16:15:45 -05:00
John Koleszar
dbb7db5b43 dixie: correct reference buffer copies
The copy_{gf,arf} flags should copy the LAST buffer to the specified
buffer. The refresh_{gf,arf} flags should copy the CURRENT buffer to
the specified buffer.

Change-Id: I1fdf014c439b1ce584cda3d56841243fbfbb1f0a
2011-02-01 16:09:44 -05:00
John Koleszar
c565409a2a dixie: populate all dequant_factors
Missed incrementing the pointer, so only the first segment would be
populated.

Change-Id: I94419b2c678c8706ffe6e71bd134f3cf7853ba68
2011-02-01 16:07:52 -05:00
John Koleszar
6f2e4e1987 dixie: correct delta_q parsing
Cut and paste error caused UV delta Qs to overwrite Y1 DC delta Q.

Change-Id: I213506d830dbb54aa4cb100d56e0814ae10e0e2d
2011-02-01 16:06:16 -05:00
John Koleszar
f46f53d0de dixie: correct frame size check
Interframes have 3 byte headers, keyframes have 10 bytes.

Change-Id: I3886cb87dbc8ae175f82776f27c85603ca977af9
2011-02-01 14:12:41 -05:00
John Koleszar
37693cfd5a dixie: fix process_row when start_col>0
Change-Id: Ie3704c2ceb94fa3e49cd07a8c473b116b704a692
2010-08-06 15:30:51 -04:00
John Koleszar
0f15bbde8f dixie: add split four/six tap 2d filters
Change-Id: I7e2a20c129f9bb5a6a51833e0c5d659742c3b842
2010-08-06 15:30:51 -04:00
John Koleszar
754e60a64d dixie: fix 64 bit integer promotion issue.
Change-Id: I8efbed8fc79f9c1da3c84434c5b54c5100cbff0b
2010-08-06 15:30:50 -04:00
John Koleszar
da4255792a dixie: use emulated umv border
Change-Id: Ib6f6f2c20b11bc9b41847c097ab3a4a0025399b7
2010-08-06 15:30:49 -04:00
John Koleszar
421146312b dixie: add interframe reconstruction
This patch adds basic reconstruction for inter-predicted frames. It does
not properly handle clamping at the MV border.

Change-Id: Ib7e4395519aab0661a38f4e0f66972b5f08805cb
2010-08-05 10:46:13 -04:00
John Koleszar
829e2af0e1 dixie: add normal loopfilter
This is the more naive implementation as described in the bitstream guide,
rather than the masking version implemented in the reference code. However,
the core function prototypes were left as-is to make it easy to plug in the
reference assembly code.

Verified loopfiltered output matches reference decoder for 500 frames.

Change-Id: Ib4f197e864f07dbb918b6d5e742c6110d57c1f40
2010-07-12 16:36:57 -04:00
John Koleszar
06c0623219 dixie: add idct/add stage
Verified reconstructed (but not loopfiltered) output matches reference
decoder for 500 frames.

Change-Id: Iaa0c4bdd7733f1958cf2b8ed40d4c78f9028e298
2010-07-07 13:30:54 -04:00
John Koleszar
cf7705579b dixie: add intra prediction
This commit adds prediction functions for all the intra modes.

Change-Id: I626e245318f96ee2ce0d965d7454ac7dce0cff79
2010-07-07 13:29:42 -04:00
John Koleszar
940599ff2c dixie: combine dequant with token decode
Scales as O(number-of-tokens) rather than O(16).

Change-Id: Ic67b81289eeef7fedacd0b5973b7c06e5a507f29
2010-07-07 13:29:19 -04:00
John Koleszar
86262018ad dixie: implement token decoding
Verified decoded tokens match reference for all profile 0 test
vectors.

Change-Id: I3e5f7431cb0fbe7130331c82b434c4fd67f839cb
2010-06-24 15:00:26 -04:00
John Koleszar
b52ee87d2c dixie: sync bool decoder to latest
Incorporate the VP8DX_BOOL_DECODER_FILL macro, which is referenced by
the token decoder.

Change-Id: I32850279476d759e921634aa05c852217a571619
2010-06-24 15:00:25 -04:00
John Koleszar
9a63ff2243 dixie: move modemv data tables
Move these tables to their own file, to make modemv.c more readable.

Change-Id: I0c97e51c5b4601348f465be53e1c4b3c88cc7834
2010-06-24 15:00:24 -04:00
John Koleszar
41bad1f258 dixie: implement motion vector decoding
Verified decoded motion vectors match reference for all profile 0
test vectors.

Change-Id: Iee54bb4c37a32ca4493fa5694d7d29177fd6faa0
2010-06-24 15:00:24 -04:00
John Koleszar
29e1dea8cd dixie: implement keyframe mode decoding
Verified decoded modes matched reference decoder for 1 frame.

Change-Id: I69303aff8fa975dccc943bfe277ea86d55d75147
2010-06-24 15:00:22 -04:00
John Koleszar
c9ebe27ce4 dixie: decode entropy model header
Change-Id: I7a6cc0ac5656b50cac90c93a95adaecfe16efb72
2010-06-24 15:00:21 -04:00
John Koleszar
ca50290d6c dixie: decode reference frame header
Change-Id: I35a11c46d46430984cdcaf0ff7ef5f42f372d3c7
2010-06-24 15:00:20 -04:00
John Koleszar
476d59a304 dixie: decode quantizer level header
Change-Id: Ie8fe79280bcdae1b25ab69470d58ec4efee198d2
2010-06-24 15:00:19 -04:00
John Koleszar
f2274a34e6 dixie: decode token partitions header
Change-Id: Id894ef22c1a22a426fa4fcf3a3733711b723b9ec
2010-06-24 15:00:17 -04:00
John Koleszar
8d6fbc1bdf dixie: decode loopfilter header
Change-Id: Iab649cdb114d15e70ea632da911d8e3f5abbf36b
2010-06-24 15:00:15 -04:00
John Koleszar
948b1d4283 dixie: decode segmentation header
Change-Id: Id46c6f50ee60419ae1387baf74673af02475203d
2010-06-24 15:00:13 -04:00
John Koleszar
f766f3c8f3 dixie: simple validation of the frame header
Change-Id: Iae8c2d421eb686d652807d44d8053eaec8f72897
2010-06-24 15:00:12 -04:00
John Koleszar
5c263fa3ca dixie: initial interface
The "dixie" project will be a rewrite of much of the VP8 decoder core.
Some of the goals are:

  * Increase speed by paying more attention to data locality and
    cache layout, and by eliminating redundant work in general.

  * A different approach to multithreading, to treat all threads as
    equal and working on larger work units than a single MB.

  * Expose more of the bitstream to the application, essentially
    creating a vp8 parser utility. This could be useful for analyzing
    the complexity of a stream, to help set conformance points.

  * If the above goals are met successfully, replace the reference
    decoder.

For those interested in the etymology of the term "dixie:"
  decoder2 -> dx2 -> dxii -> dixie

Change-Id: I4ef0832b62ea96e9cfa1906c4a77f4b51e0c62d6
2010-06-24 15:00:06 -04:00
602 changed files with 45104 additions and 45114 deletions

68
.gitignore vendored
View File

@@ -1,68 +0,0 @@
*.a
*.asm.s
*.d
*.o
*~
/*-*.mk
/*.asm
/*.doxy
/.bins
/.deps
/.docs
/.install-*
/.libs
/Makefile
/config.err
/config.mk
/decode_to_md5
/decode_to_md5.c
/decode_to_md5.dox
/decode_with_drops
/decode_with_drops.c
/decode_with_drops.dox
/docs/
/doxyfile
/error_resilient
/error_resilient.c
/error_resilient.dox
/force_keyframe
/force_keyframe.c
/force_keyframe.dox
/ivfdec
/ivfdec.dox
/ivfenc
/ivfenc.dox
/obj_int_extract
/postproc
/postproc.c
/postproc.dox
/samples.dox
/simple_decoder
/simple_decoder.c
/simple_decoder.dox
/simple_encoder
/simple_encoder.c
/simple_encoder.dox
/twopass_encoder
/twopass_encoder.c
/twopass_encoder.dox
/vp8_api1_migration.dox
/vp8_scalable_patterns
/vp8_scalable_patterns.c
/vp8_scalable_patterns.dox
/vp8_set_maps
/vp8_set_maps.c
/vp8_set_maps.dox
/vp8cx_set_ref
/vp8cx_set_ref.c
/vp8cx_set_ref.dox
/vpx_config.c
/vpx_config.h
/vpx_version.h
TAGS
vpxdec
vpxenc
.project
.cproject
*.csv
*.oclpj

View File

@@ -1,4 +0,0 @@
Adrian Grange <agrange@google.com>
Johann Koenig <johannkoenig@google.com>
Tero Rintaluoma <teror@google.com> <tero.rintaluoma@on2.com>
Tom Finegan <tomfinegan@google.com>

21
AUTHORS
View File

@@ -1,41 +1,20 @@
# This file is automatically generated from the git commit history # This file is automatically generated from the git commit history
# by tools/gen_authors.sh. # by tools/gen_authors.sh.
Aaron Watry <awatry@gmail.com>
Adrian Grange <agrange@google.com>
Alex Converse <alex.converse@gmail.com> Alex Converse <alex.converse@gmail.com>
Andoni Morales Alastruey <ylatuya@gmail.com>
Andres Mejia <mcitadel@gmail.com> Andres Mejia <mcitadel@gmail.com>
Attila Nagy <attilanagy@google.com>
Fabio Pedretti <fabio.ped@libero.it> Fabio Pedretti <fabio.ped@libero.it>
Frank Galligan <fgalligan@google.com> Frank Galligan <fgalligan@google.com>
Fredrik Söderquist <fs@opera.com>
Fritz Koenig <frkoenig@google.com>
Gaute Strokkenes <gaute.strokkenes@broadcom.com>
Giuseppe Scrivano <gscrivano@gnu.org>
Guillermo Ballester Valor <gbvalor@gmail.com> Guillermo Ballester Valor <gbvalor@gmail.com>
Henrik Lundin <hlundin@google.com>
James Berry <jamesberry@google.com>
James Zern <jzern@google.com> James Zern <jzern@google.com>
Jan Kratochvil <jan.kratochvil@redhat.com>
Jeff Muizelaar <jmuizelaar@mozilla.com>
Jim Bankoski <jimbankoski@google.com>
Johann Koenig <johannkoenig@google.com>
John Koleszar <jkoleszar@google.com> John Koleszar <jkoleszar@google.com>
Justin Clift <justin@salasaga.org> Justin Clift <justin@salasaga.org>
Justin Lebar <justin.lebar@gmail.com>
Luca Barbato <lu_zero@gentoo.org> Luca Barbato <lu_zero@gentoo.org>
Makoto Kato <makoto.kt@gmail.com> Makoto Kato <makoto.kt@gmail.com>
Martin Ettl <ettl.martin78@googlemail.com>
Michael Kohler <michaelkohler@live.com>
Mikhal Shemer <mikhal@google.com>
Pascal Massimino <pascal.massimino@gmail.com>
Patrik Westin <patrik.westin@gmail.com>
Paul Wilkins <paulwilkins@google.com> Paul Wilkins <paulwilkins@google.com>
Pavol Rusnak <stick@gk2.sk> Pavol Rusnak <stick@gk2.sk>
Philip Jägenstedt <philipj@opera.com> Philip Jägenstedt <philipj@opera.com>
Scott LaVarnway <slavarnway@google.com> Scott LaVarnway <slavarnway@google.com>
Tero Rintaluoma <teror@google.com>
Timothy B. Terriberry <tterribe@xiph.org> Timothy B. Terriberry <tterribe@xiph.org>
Tom Finegan <tomfinegan@google.com> Tom Finegan <tomfinegan@google.com>
Yaowu Xu <yaowu@google.com> Yaowu Xu <yaowu@google.com>

235
CHANGELOG
View File

@@ -1,238 +1,3 @@
2011-03-07 v0.9.6 "Bali"
Our second named release, focused on a faster, higher quality, encoder.
- Upgrading:
This release is backwards compatible with Aylesbury (v0.9.5). Users
of older releases should refer to the Upgrading notes in this
document for that release.
- Enhancements:
vpxenc --psnr shows a summary when encode completes
--tune=ssim option to enable activity masking
improved postproc visualizations for development
updated support for Apple iOS to SDK 4.2
query decoder to determine which reference frames were updated
implemented error tracking in the decoder
fix pipe support on windows
- Speed:
Primary focus was on good quality mode, speed 0. Average improvement
on x86 about 40%, up to 100% on user-generated content at that speed.
Best quality mode speed improved 35%, and realtime speed 10-20%. This
release also saw significant improvement in realtime encoding speed
on ARM platforms.
Improved encoder threading
Dont pick encoder filter level when loopfilter is disabled.
Avoid double copying of key frames into alt and golden buffer
FDCT optimizations.
x86 sse2 temporal filter
SSSE3 version of fast quantizer
vp8_rd_pick_best_mbsegmentation code restructure
Adjusted breakout RD for SPLITMV
Changed segmentation check order
Improved rd_pick_intra4x4block
Adds armv6 optimized variance calculation
ARMv6 optimized sad16x16
ARMv6 optimized half pixel variance calculations
Full search SAD function optimization in SSE4.1
Improve MV prediction accuracy to achieve performance gain
Improve MV prediction in vp8_pick_inter_mode() for speed>3
- Quality:
Best quality mode improved PSNR 6.3%, and SSIM 6.1%. This release
also includes support for "activity masking," which greatly improves
SSIM at the expense of PSNR. For now, this feature is available with
the --tune=ssim option. Further experimentation in this area
is ongoing. This release also introduces a new rate control mode
called "CQ," which changes the allocation of bits within a clip to
the sections where they will have the most visual impact.
Tuning for the more exact quantizer.
Relax rate control for last few frames
CQ Mode
Limit key frame quantizer for forced key frames.
KF/GF Pulsing
Add simple version of activity masking.
make rdmult adaptive for intra in quantizer RDO
cap the best quantizer for 2nd order DC
change the threshold of DC check for encode breakout
- Bug Fixes:
Fix crash on Sparc Solaris.
Fix counter of fixed keyframe distance
ARNR filter pointer update bug fix
Fixed use of motion percentage in KF/GF group calc
Changed condition for using RD in Intra Mode
Fix encoder real-time only configuration.
Fix ARM encoder crash with multiple token partitions
Fixed bug first cluster timecode of webm file is wrong.
Fixed various encoder bugs with odd-sized images
vp8e_get_preview fixed when spatial resampling enabled
quantizer: fix assertion in fast quantizer path
Allocate source buffers to be multiples of 16
Fix for manual Golden frame frequency
Fix drastic undershoot in long form content
2010-10-28 v0.9.5 "Aylesbury"
Our first named release, focused on a faster decoder, and a better encoder.
- Upgrading:
This release incorporates backwards-incompatible changes to the
ivfenc and ivfdec tools. These tools are now called vpxenc and vpxdec.
vpxdec
* the -q (quiet) option has been removed, and replaced with
-v (verbose). the output is quiet by default. Use -v to see
the version number of the binary.
* The default behavior is now to write output to a single file
instead of individual frames. The -y option has been removed.
Y4M output is the default.
* For raw I420/YV12 output instead of Y4M, the --i420 or --yv12
options must be specified.
$ ivfdec -o OUTPUT INPUT
$ vpxdec --i420 -o OUTPUT INPUT
* If an output file is not specified, the default is to write
Y4M to stdout. This makes piping more natural.
$ ivfdec -y -o - INPUT | ...
$ vpxdec INPUT | ...
* The output file has additional flexibility for formatting the
filename. It supports escape characters for constructing a
filename from the width, height, and sequence number. This
replaces the -p option. To get the equivalent:
$ ivfdec -p frame INPUT
$ vpxdec --i420 -o frame-%wx%h-%4.i420 INPUT
vpxenc
* The output file must be specified with -o, rather than as the
last argument.
$ ivfenc <options> INPUT OUTPUT
$ vpxenc <options> -o OUTPUT INPUT
* The output defaults to webm. To get IVF output, use the --ivf
option.
$ ivfenc <options> INPUT OUTPUT.ivf
$ vpxenc <options> -o OUTPUT.ivf --ivf INPUT
- Enhancements:
ivfenc and ivfdec have been renamed to vpxenc, vpxdec.
vpxdec supports .webm input
vpxdec writes .y4m by default
vpxenc writes .webm output by default
vpxenc --psnr now shows the average/overall PSNR at the end
ARM platforms now support runtime cpu detection
vpxdec visualizations added for motion vectors, block modes, references
vpxdec now silent by default
vpxdec --progress shows frame-by-frame timing information
vpxenc supports the distinction between --fps and --timebase
NASM is now a supported assembler
configure: enable PIC for shared libs by default
configure: add --enable-small
configure: support for ppc32-linux-gcc
configure: support for sparc-solaris-gcc
- Bugs:
Improve handling of invalid frames
Fix valgrind errors in the NEON loop filters.
Fix loopfilter delta zero transitions
Fix valgrind errors in vp8_sixtap_predict8x4_armv6().
Build fixes for darwin-icc
- Speed:
20-40% (average 28%) improvement in libvpx decoder speed,
including:
Rewrite vp8_short_walsh4x4_sse2()
Optimizations on the loopfilters.
Miscellaneous improvements for Atom
Add 4-tap version of 2nd-pass ARMv6 MC filter.
Improved multithread utilization
Better instruction choices on x86
reorder data to use wider instructions
Update NEON wide idcts
Make block access to frame buffer sequential
Improved subset block search
Bilinear subpixel optimizations for ssse3.
Decrease memory footprint
Encoder speed improvements (percentage gain not measured):
Skip unnecessary search of identical frames
Add SSE2 subtract functions
Improve bounds checking in vp8_diamond_search_sadx4()
Added vp8_fast_quantize_b_sse2
- Quality:
Over 7% overall PSNR improvement (6.3% SSIM) in "best" quality
encoding mode, and up to 60% improvement on very noisy, still
or slow moving source video
Motion compensated temporal filter for Alt-Ref Noise Reduction
Improved use of trellis quantization on 2nd order Y blocks
Tune effect of motion on KF/GF boost in two pass
Allow coefficient optimization for good quality speed 0.
Improved control of active min quantizer for two pass.
Enable ARFs for non-lagged compress
2010-09-02 v0.9.2
- Enhancements:
Disable frame dropping by default
Improved multithreaded performance
Improved Force Key Frame Behaviour
Increased rate control buffer level precision
Fix bug in 1st pass motion compensation
ivfenc: correct fixed kf interval, --disable-kf
- Speed:
Changed above and left context data layout
Rework idct calling structure.
Removed unnecessary MB_MODE_INFO copies
x86: SSSE3 sixtap prediction
Reworked IDCT to include reconstruction (add) step
Swap alt/gold/new/last frame buffer ptrs instead of copying.
Improve SSE2 loopfilter functions
Change bitreader to use a larger window.
Avoid loopfilter reinitialization when possible
- Quality:
Normalize quantizer's zero bin and rounding factors
Add trellis quantization.
Make the quantizer exact.
Updates to ARNR filtering algorithm
Fix breakout thresh computation for golden & AltRef frames
Redo the forward 4x4 dct
Improve the accuracy of forward walsh-hadamard transform
Further adjustment of RD behaviour with Q and Zbin.
- Build System:
Allow linking of libs built with MinGW to MSVC
Fix target auto-detection on mingw32
Allow --cpu= to work for x86.
configure: pass original arguments through to make dist
Fix builds without runtime CPU detection
msvs: fix install of codec sources
msvs: Change devenv.com command line for better msys support
msvs: Add vs9 targets.
Add x86_64-linux-icc target
- Bugs:
Potential crashes on older MinGW builds
Fix two-pass framrate for Y4M input.
Fixed simple loop filter, other crashes on ARM v6
arm: fix missing dependency with --enable-shared
configure: support directories containing .o
Replace pinsrw (SSE) with MMX instructions
apple: include proper mach primatives
Fixed rate control bug with long key frame interval.
Fix DSO link errors on x86-64 when not using a version script
Fixed buffer selection for UV in AltRef filtering
2010-06-17 v0.9.1 2010-06-17 v0.9.1
- Enhancements: - Enhancements:
* ivfenc/ivfdec now support YUV4MPEG2 input and pipe I/O * ivfenc/ivfdec now support YUV4MPEG2 input and pipe I/O

6
README
View File

@@ -45,14 +45,18 @@ COMPILING THE APPLICATIONS/LIBRARIES:
armv5te-linux-rvct armv5te-linux-rvct
armv5te-linux-gcc armv5te-linux-gcc
armv5te-symbian-gcc armv5te-symbian-gcc
armv5te-wince-vs8
armv6-darwin-gcc armv6-darwin-gcc
armv6-linux-rvct armv6-linux-rvct
armv6-linux-gcc armv6-linux-gcc
armv6-symbian-gcc armv6-symbian-gcc
armv6-wince-vs8
iwmmxt-linux-rvct iwmmxt-linux-rvct
iwmmxt-linux-gcc iwmmxt-linux-gcc
iwmmxt-wince-vs8
iwmmxt2-linux-rvct iwmmxt2-linux-rvct
iwmmxt2-linux-gcc iwmmxt2-linux-gcc
iwmmxt2-wince-vs8
armv7-linux-rvct armv7-linux-rvct
armv7-linux-gcc armv7-linux-gcc
mips32-linux-gcc mips32-linux-gcc
@@ -85,7 +89,7 @@ COMPILING THE APPLICATIONS/LIBRARIES:
toolchain, the following command could be used (note, POSIX SH syntax, adapt toolchain, the following command could be used (note, POSIX SH syntax, adapt
to your shell as necessary): to your shell as necessary):
$ CROSS=mipsel-linux-uclibc- ../libvpx/configure $ CROSS=mipsel-linux-uclibc- ../libvpx/src/configure
In addition, the executables to be invoked can be overridden by specifying the In addition, the executables to be invoked can be overridden by specifying the
environment variables: CC, AR, LD, AS, STRIP, NM. Additional flags can be environment variables: CC, AR, LD, AS, STRIP, NM. Additional flags can be

55
args.c
View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
@@ -120,13 +120,9 @@ void arg_show_usage(FILE *fp, const struct arg_def *const *defs)
char *long_val = def->has_val ? "=<arg>" : ""; char *long_val = def->has_val ? "=<arg>" : "";
if (def->short_name && def->long_name) if (def->short_name && def->long_name)
{ snprintf(option_text, 37, "-%s%s, --%s%s",
char *comma = def->has_val ? "," : ", "; def->short_name, short_val,
snprintf(option_text, 37, "-%s%s%s --%s%6s",
def->short_name, short_val, comma,
def->long_name, long_val); def->long_name, long_val);
}
else if (def->short_name) else if (def->short_name)
snprintf(option_text, 37, "-%s%s", snprintf(option_text, 37, "-%s%s",
def->short_name, short_val); def->short_name, short_val);
@@ -135,17 +131,6 @@ void arg_show_usage(FILE *fp, const struct arg_def *const *defs)
def->long_name, long_val); def->long_name, long_val);
fprintf(fp, " %-37s\t%s\n", option_text, def->desc); fprintf(fp, " %-37s\t%s\n", option_text, def->desc);
if(def->enums)
{
const struct arg_enum_list *listptr;
fprintf(fp, " %-37s\t ", "");
for(listptr = def->enums; listptr->name; listptr++)
fprintf(fp, "%s%s", listptr->name,
listptr[1].name ? ", " : "\n");
}
} }
} }
@@ -229,37 +214,3 @@ struct vpx_rational arg_parse_rational(const struct arg *arg)
return rat; return rat;
} }
int arg_parse_enum(const struct arg *arg)
{
const struct arg_enum_list *listptr;
long int rawval;
char *endptr;
/* First see if the value can be parsed as a raw value */
rawval = strtol(arg->val, &endptr, 10);
if (arg->val[0] != '\0' && endptr[0] == '\0')
{
/* Got a raw value, make sure it's valid */
for(listptr = arg->def->enums; listptr->name; listptr++)
if(listptr->val == rawval)
return rawval;
}
/* Next see if it can be parsed as a string */
for(listptr = arg->def->enums; listptr->name; listptr++)
if(!strcmp(arg->val, listptr->name))
return listptr->val;
die("Option %s: Invalid value '%s'\n", arg->name, arg->val);
return 0;
}
int arg_parse_enum_or_int(const struct arg *arg)
{
if(arg->def->enums)
return arg_parse_enum(arg);
return arg_parse_int(arg);
}

14
args.h
View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
@@ -22,23 +22,14 @@ struct arg
const struct arg_def *def; const struct arg_def *def;
}; };
struct arg_enum_list
{
const char *name;
int val;
};
#define ARG_ENUM_LIST_END {0}
typedef struct arg_def typedef struct arg_def
{ {
const char *short_name; const char *short_name;
const char *long_name; const char *long_name;
int has_val; int has_val;
const char *desc; const char *desc;
const struct arg_enum_list *enums;
} arg_def_t; } arg_def_t;
#define ARG_DEF(s,l,v,d) {s,l,v,d, NULL} #define ARG_DEF(s,l,v,d) {s,l,v,d}
#define ARG_DEF_ENUM(s,l,v,d,e) {s,l,v,d,e}
#define ARG_DEF_LIST_END {0} #define ARG_DEF_LIST_END {0}
struct arg arg_init(char **argv); struct arg arg_init(char **argv);
@@ -50,5 +41,4 @@ char **argv_dup(int argc, const char **argv);
unsigned int arg_parse_uint(const struct arg *arg); unsigned int arg_parse_uint(const struct arg *arg);
int arg_parse_int(const struct arg *arg); int arg_parse_int(const struct arg *arg);
struct vpx_rational arg_parse_rational(const struct arg *arg); struct vpx_rational arg_parse_rational(const struct arg *arg);
int arg_parse_enum_or_int(const struct arg *arg);
#endif #endif

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<VisualStudioToolFile
Name="armasm"
Version="8.00"
>
<Rules>
<CustomBuildRule
Name="ARMASM"
DisplayName="Armasm Assembler"
CommandLine="armasm -o &quot;$(IntDir)\$(InputName).obj&quot; $(InputPath) -32 -ARCH 5&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
FileExtensions="*.asm"
ExecutionDescription="Assembling $(InputName).asm"
ShowOnlyRuleProperties="false"
>
<Properties>
</Properties>
</CustomBuildRule>
</Rules>
</VisualStudioToolFile>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<VisualStudioToolFile
Name="armasm"
Version="8.00"
>
<Rules>
<CustomBuildRule
Name="ARMASM"
DisplayName="Armasm Assembler"
CommandLine="armasm -o &quot;$(IntDir)\$(InputName).obj&quot; $(InputPath) -32 -ARCH 6&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
FileExtensions="*.asm"
ExecutionDescription="Assembling $(InputName).asm"
ShowOnlyRuleProperties="false"
>
<Properties>
</Properties>
</CustomBuildRule>
</Rules>
</VisualStudioToolFile>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<VisualStudioToolFile
Name="armasm"
Version="8.00"
>
<Rules>
<CustomBuildRule
Name="ARMASM"
DisplayName="Armasm Assembler"
CommandLine="armasm -o &quot;$(IntDir)\$(InputName).obj&quot; $(InputPath) -32 -cpu XSCALE&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
FileExtensions="*.asm"
ExecutionDescription="Assembling $(InputName).asm"
ShowOnlyRuleProperties="false"
>
<Properties>
</Properties>
</CustomBuildRule>
</Rules>
</VisualStudioToolFile>

View File

@@ -0,0 +1,13 @@
@echo off
REM Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
REM
REM Use of this source code is governed by a BSD-style license
REM that can be found in the LICENSE file in the root of the source
REM tree. An additional intellectual property rights grant can be found
REM in the file PATENTS. All contributing project authors may
REM be found in the AUTHORS file in the root of the source tree.
echo on
cl /I ".\\" /I "..\vp6_decoder_sdk" /I "..\vp6_decoder_sdk\vpx_ports" /D "NDEBUG" /D "_WIN32_WCE=0x420" /D "UNDER_CE" /D "WIN32_PLATFORM_PSPC" /D "WINCE" /D "_LIB" /D "ARM" /D "_ARM_" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MT /GS- /fp:fast /GR- /Fo"Pocket_PC_2003__ARMV4_\%1/" /Fd"Pocket_PC_2003__ARMV4_\%1/vc80.pdb" /W3 /nologo /c /TC ..\vp6_decoder_sdk\vp6_decoder\algo\common\arm\dec_asm_offsets_arm.c
obj_int_extract.exe rvds "Pocket_PC_2003__ARMV4_\%1/dec_asm_offsets_arm.obj"

View File

@@ -0,0 +1,88 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example", "example.vcproj", "{BA5FE66F-38DD-E034-F542-B1578C5FB950}"
ProjectSection(ProjectDependencies) = postProject
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}
{E1360C65-D375-4335-8057-7ED99CC3F9B2} = {E1360C65-D375-4335-8057-7ED99CC3F9B2}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "obj_int_extract", "obj_int_extract.vcproj", "{E1360C65-D375-4335-8057-7ED99CC3F9B2}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vpx_decoder", "vpx_decoder.vcproj", "{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}"
ProjectSection(ProjectDependencies) = postProject
{E1360C65-D375-4335-8057-7ED99CC3F9B2} = {E1360C65-D375-4335-8057-7ED99CC3F9B2}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xma", "xma.vcproj", "{A955FC4A-73F1-44F7-135E-30D84D32F022}"
ProjectSection(ProjectDependencies) = postProject
{E1360C65-D375-4335-8057-7ED99CC3F9B2} = {E1360C65-D375-4335-8057-7ED99CC3F9B2}
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4)
Debug|Win32 = Debug|Win32
Release|Mixed Platforms = Release|Mixed Platforms
Release|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4)
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Mixed Platforms.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Mixed Platforms.Build.0 = Debug|Pocket PC 2003 (ARMV4)
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Mixed Platforms.Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Win32.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Mixed Platforms.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Mixed Platforms.Build.0 = Release|Pocket PC 2003 (ARMV4)
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Mixed Platforms.Deploy.0 = Release|Pocket PC 2003 (ARMV4)
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Win32.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Mixed Platforms.ActiveCfg = Release|Win32
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Mixed Platforms.Build.0 = Release|Win32
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Win32
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Win32.ActiveCfg = Release|Win32
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Win32.Build.0 = Release|Win32
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Mixed Platforms.Build.0 = Release|Win32
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Win32
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Win32.ActiveCfg = Release|Win32
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Win32.Build.0 = Release|Win32
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Mixed Platforms.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Mixed Platforms.Build.0 = Debug|Pocket PC 2003 (ARMV4)
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Mixed Platforms.Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Win32.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Mixed Platforms.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Mixed Platforms.Build.0 = Release|Pocket PC 2003 (ARMV4)
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Mixed Platforms.Deploy.0 = Release|Pocket PC 2003 (ARMV4)
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Win32.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Mixed Platforms.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Mixed Platforms.Build.0 = Debug|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Mixed Platforms.Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Win32.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Mixed Platforms.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Mixed Platforms.Build.0 = Release|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Mixed Platforms.Deploy.0 = Release|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Win32.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -1,5 +1,5 @@
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source
@@ -39,8 +39,13 @@ dist:
@if [ -d "$(DIST_DIR)/src" ]; then \ @if [ -d "$(DIST_DIR)/src" ]; then \
mkdir -p "$(DIST_DIR)/build"; \ mkdir -p "$(DIST_DIR)/build"; \
cd "$(DIST_DIR)/build"; \ cd "$(DIST_DIR)/build"; \
echo "Rerunning configure $(CONFIGURE_ARGS)"; \ if [ "$(TGT_CC)" = "rvct" ] ; then \
../src/configure $(CONFIGURE_ARGS); \ echo "../src/configure --target=$(TOOLCHAIN) --libc=$(ALT_LIBC)"; \
../src/configure --target=$(TOOLCHAIN) --libc=$(ALT_LIBC); \
else \
echo "../src/configure --target=$(TOOLCHAIN)"; \
../src/configure --target=$(TOOLCHAIN); \
fi; \
$(if $(filter vs%,$(TGT_CC)),make NO_LAUNCH_DEVENV=1;) \ $(if $(filter vs%,$(TGT_CC)),make NO_LAUNCH_DEVENV=1;) \
fi fi
@if [ -d "$(DIST_DIR)" ]; then \ @if [ -d "$(DIST_DIR)" ]; then \
@@ -65,7 +70,7 @@ endif
BUILD_ROOT?=. BUILD_ROOT?=.
VPATH=$(SRC_PATH_BARE) VPATH=$(SRC_PATH_BARE)
CFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT) -I$(SRC_PATH) CFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT) -I$(SRC_PATH)
ASFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT)/ -I$(SRC_PATH)/ ASFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT) -I$(SRC_PATH)
DIST_DIR?=dist DIST_DIR?=dist
HOSTCC?=gcc HOSTCC?=gcc
TGT_ISA:=$(word 1, $(subst -, ,$(TOOLCHAIN))) TGT_ISA:=$(word 1, $(subst -, ,$(TOOLCHAIN)))
@@ -152,8 +157,8 @@ endif
# Rule to extract assembly constants from C sources # Rule to extract assembly constants from C sources
# #
obj_int_extract: build/make/obj_int_extract.c obj_int_extract: build/make/obj_int_extract.c
$(if $(quiet),@echo " [HOSTCC] $@") $(if $(quiet),echo " [HOSTCC] $@")
$(qexec)$(HOSTCC) -I. -I$(SRC_PATH_BARE) -o $@ $< $(qexec)$(HOSTCC) -I. -o $@ $<
CLEAN-OBJS += obj_int_extract CLEAN-OBJS += obj_int_extract
# #
@@ -255,7 +260,7 @@ ifeq ($(filter clean,$(MAKECMDGOALS)),)
endif endif
# #
# Configuration dependent rules # Configuration dependant rules
# #
$(call pairmap,install_map_templates,$(INSTALL_MAPS)) $(call pairmap,install_map_templates,$(INSTALL_MAPS))
@@ -329,10 +334,12 @@ ifneq ($(call enabled,DIST-SRCS),)
DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_def.sh DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_def.sh
DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_proj.sh DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_proj.sh
DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_sln.sh DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_sln.sh
DIST-SRCS-$(CONFIG_MSVS) += build/x86-msvs/yasm.rules
DIST-SRCS-$(CONFIG_RVCT) += build/make/armlink_adapter.sh DIST-SRCS-$(CONFIG_RVCT) += build/make/armlink_adapter.sh
# Include obj_int_extract if we use offsets from asm_*_offsets #
DIST-SRCS-$(ARCH_ARM)$(ARCH_X86)$(ARCH_X86_64) += build/make/obj_int_extract.c # This isn't really ARCH_ARM dependent, it's dependant on whether we're
# using assembly code or not (CONFIG_OPTIMIZATIONS maybe). Just use
# this for now.
DIST-SRCS-$(ARCH_ARM) += build/make/obj_int_extract.c
DIST-SRCS-$(ARCH_ARM) += build/make/ads2gas.pl DIST-SRCS-$(ARCH_ARM) += build/make/ads2gas.pl
DIST-SRCS-yes += $(target:-$(TOOLCHAIN)=).mk DIST-SRCS-yes += $(target:-$(TOOLCHAIN)=).mk
endif endif

View File

@@ -1,6 +1,6 @@
#!/usr/bin/perl #!/usr/bin/perl
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env perl #!/usr/bin/env perl
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source
@@ -17,17 +17,15 @@ for i; do
on_of=1 on_of=1
elif [ "$i" == "-v" ]; then elif [ "$i" == "-v" ]; then
verbose=1 verbose=1
elif [ "$i" == "-g" ]; then
args="${args} --debug"
elif [ "$on_of" == "1" ]; then elif [ "$on_of" == "1" ]; then
outfile=$i outfile=$i
on_of=0 on_of=0
elif [ -f "$i" ]; then elif [ -f "$i" ]; then
infiles="$infiles $i" infiles="$infiles $i"
elif [ "${i:0:2}" == "-l" ]; then elif [ "${i:0:2}" == "-l" ]; then
libs="$libs ${i#-l}" libs="$libs ${i#-l}"
elif [ "${i:0:2}" == "-L" ]; then elif [ "${i:0:2}" == "-L" ]; then
libpaths="${libpaths} ${i#-L}" libpaths="${libpaths} ${i#-L}"
else else
args="${args} ${i}" args="${args} ${i}"
fi fi

View File

@@ -78,12 +78,11 @@ Build options:
--log=yes|no|FILE file configure log is written to [config.err] --log=yes|no|FILE file configure log is written to [config.err]
--target=TARGET target platform tuple [generic-gnu] --target=TARGET target platform tuple [generic-gnu]
--cpu=CPU optimize for a specific cpu rather than a family --cpu=CPU optimize for a specific cpu rather than a family
--extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
${toggle_extra_warnings} emit harmless warnings (always non-fatal) ${toggle_extra_warnings} emit harmless warnings (always non-fatal)
${toggle_werror} treat warnings as errors, if possible ${toggle_werror} treat warnings as errors, if possible
(not available with all compilers) (not available with all compilers)
${toggle_optimizations} turn on/off compiler optimization flags ${toggle_optimizations} turn on/off compiler optimization flags
${toggle_pic} turn on/off Position Independent Code ${toggle_pic} turn on/off Position Independant Code
${toggle_ccache} turn on/off compiler cache ${toggle_ccache} turn on/off compiler cache
${toggle_debug} enable/disable debug mode ${toggle_debug} enable/disable debug mode
${toggle_gprof} enable/disable gprof profiling instrumentation ${toggle_gprof} enable/disable gprof profiling instrumentation
@@ -256,10 +255,9 @@ TMP_H="${TMPDIRx}/vpx-conf-$$-${RANDOM}.h"
TMP_C="${TMPDIRx}/vpx-conf-$$-${RANDOM}.c" TMP_C="${TMPDIRx}/vpx-conf-$$-${RANDOM}.c"
TMP_O="${TMPDIRx}/vpx-conf-$$-${RANDOM}.o" TMP_O="${TMPDIRx}/vpx-conf-$$-${RANDOM}.o"
TMP_X="${TMPDIRx}/vpx-conf-$$-${RANDOM}.x" TMP_X="${TMPDIRx}/vpx-conf-$$-${RANDOM}.x"
TMP_ASM="${TMPDIRx}/vpx-conf-$$-${RANDOM}.asm"
clean_temp_files() { clean_temp_files() {
rm -f ${TMP_C} ${TMP_H} ${TMP_O} ${TMP_X} ${TMP_ASM} rm -f ${TMP_C} ${TMP_H} ${TMP_O} ${TMP_X}
} }
# #
@@ -324,21 +322,6 @@ check_add_ldflags() {
add_ldflags "$@" add_ldflags "$@"
} }
check_asm_align() {
log check_asm_align "$@"
cat >${TMP_ASM} <<EOF
section .rodata
align 16
EOF
log_file ${TMP_ASM}
check_cmd ${AS} ${ASFLAGS} -o ${TMP_O} ${TMP_ASM}
readelf -WS ${TMP_O} >${TMP_X}
log_file ${TMP_X}
if ! grep -q '\.rodata .* 16$' ${TMP_X}; then
die "${AS} ${ASFLAGS} does not support section alignment (nasm <=2.08?)"
fi
}
write_common_config_banner() { write_common_config_banner() {
echo '# This file automatically generated by configure. Do not edit!' > config.mk echo '# This file automatically generated by configure. Do not edit!' > config.mk
echo "TOOLCHAIN := ${toolchain}" >> config.mk echo "TOOLCHAIN := ${toolchain}" >> config.mk
@@ -395,7 +378,7 @@ EOF
fmt_deps = sed -e 's;^__image.axf;\$(dir \$@)\$(notdir \$<).o \$@;' #hide fmt_deps = sed -e 's;^__image.axf;\$(dir \$@)\$(notdir \$<).o \$@;' #hide
EOF EOF
else cat >> $1 << EOF else cat >> $1 << EOF
fmt_deps = sed -e 's;^\([a-zA-Z0-9_]*\)\.o;\$(dir \$@)\1\$(suffix \$<).o \$@;' fmt_deps = sed -e 's;^\(.*\)\.o;\$(dir \$@)\1\$(suffix \$<).o \$@;' #hide
EOF EOF
fi fi
@@ -412,6 +395,8 @@ EOF
write_common_target_config_h() { write_common_target_config_h() {
cat > ${TMP_H} << EOF cat > ${TMP_H} << EOF
/* This file automatically generated by configure. Do not edit! */ /* This file automatically generated by configure. Do not edit! */
#define INLINE ${INLINE}
#define FORCEINLINE ${FORCEINLINE:-${INLINE}}
#define RESTRICT ${RESTRICT} #define RESTRICT ${RESTRICT}
EOF EOF
print_config_h ARCH "${TMP_H}" ${ARCH_LIST} print_config_h ARCH "${TMP_H}" ${ARCH_LIST}
@@ -443,9 +428,6 @@ process_common_cmdline() {
;; ;;
--cpu=*) tune_cpu="$optval" --cpu=*) tune_cpu="$optval"
;; ;;
--extra-cflags=*)
extra_cflags="${optval}"
;;
--enable-?*|--disable-?*) --enable-?*|--disable-?*)
eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'` eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
echo "${CMDLINE_SELECT} ${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null || die_unknown $opt echo "${CMDLINE_SELECT} ${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null || die_unknown $opt
@@ -460,18 +442,13 @@ process_common_cmdline() {
disable builtin_libc disable builtin_libc
alt_libc="${optval}" alt_libc="${optval}"
;; ;;
--as=*)
[ "${optval}" = yasm -o "${optval}" = nasm -o "${optval}" = auto ] \
|| die "Must be yasm, nasm or auto: ${optval}"
alt_as="${optval}"
;;
--prefix=*) --prefix=*)
prefix="${optval}" prefix="${optval}"
;; ;;
--libdir=*) --libdir=*)
libdir="${optval}" libdir="${optval}"
;; ;;
--libc|--as|--prefix|--libdir) --libc|--prefix|--libdir)
die "Option ${opt} requires argument" die "Option ${opt} requires argument"
;; ;;
--help|-h) show_help --help|-h) show_help
@@ -520,7 +497,7 @@ setup_gnu_toolchain() {
process_common_toolchain() { process_common_toolchain() {
if [ -z "$toolchain" ]; then if [ -z "$toolchain" ]; then
gcctarget="$(gcc -dumpmachine 2> /dev/null)" gcctarget="$(gcc -dumpmachine 2> /dev/null)"
# detect tgt_isa # detect tgt_isa
case "$gcctarget" in case "$gcctarget" in
@@ -530,15 +507,6 @@ process_common_toolchain() {
*i[3456]86*) *i[3456]86*)
tgt_isa=x86 tgt_isa=x86
;; ;;
*powerpc64*)
tgt_isa=ppc64
;;
*powerpc*)
tgt_isa=ppc32
;;
*sparc*)
tgt_isa=sparc
;;
esac esac
# detect tgt_os # detect tgt_os
@@ -551,20 +519,12 @@ process_common_toolchain() {
tgt_isa=universal tgt_isa=universal
tgt_os=darwin9 tgt_os=darwin9
;; ;;
*darwin10*)
tgt_isa=x86_64
tgt_os=darwin10
;;
*mingw32*|*cygwin*) *mingw32*|*cygwin*)
[ -z "$tgt_isa" ] && tgt_isa=x86
tgt_os=win32 tgt_os=win32
;; ;;
*linux*|*bsd*) *linux*|*bsd*)
tgt_os=linux tgt_os=linux
;; ;;
*solaris2.10)
tgt_os=solaris
;;
esac esac
if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then
@@ -597,40 +557,20 @@ process_common_toolchain() {
mips*) enable mips;; mips*) enable mips;;
esac esac
# PIC is probably what we want when building shared libs
enabled shared && soft_enable pic
# Handle darwin variants # Handle darwin variants
case ${toolchain} in case ${toolchain} in
*-darwin8-*) *-darwin8-gcc)
add_cflags "-isysroot /Developer/SDKs/MacOSX10.4u.sdk" add_cflags "-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
add_cflags "-mmacosx-version-min=10.4" add_cflags "-mmacosx-version-min=10.4"
add_ldflags "-isysroot /Developer/SDKs/MacOSX10.4u.sdk" add_ldflags "-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
add_ldflags "-mmacosx-version-min=10.4" add_ldflags "-mmacosx-version-min=10.4"
;; ;;
*-darwin9-*) *-darwin9-gcc)
add_cflags "-isysroot /Developer/SDKs/MacOSX10.5.sdk" add_cflags "-isysroot /Developer/SDKs/MacOSX10.5.sdk"
add_cflags "-mmacosx-version-min=10.5" add_cflags "-mmacosx-version-min=10.5"
add_ldflags "-isysroot /Developer/SDKs/MacOSX10.5.sdk" add_ldflags "-isysroot /Developer/SDKs/MacOSX10.5.sdk"
add_ldflags "-mmacosx-version-min=10.5" add_ldflags "-mmacosx-version-min=10.5"
;; ;;
*-darwin10-*)
add_cflags "-isysroot /Developer/SDKs/MacOSX10.6.sdk"
add_cflags "-mmacosx-version-min=10.6"
add_ldflags "-isysroot /Developer/SDKs/MacOSX10.6.sdk"
add_ldflags "-mmacosx-version-min=10.6"
;;
esac
# Handle Solaris variants. Solaris 10 needs -lposix4
case ${toolchain} in
sparc-solaris-*)
add_extralibs -lposix4
add_cflags "-DMUST_BE_ALIGNED"
;;
*-solaris-*)
add_extralibs -lposix4
;;
esac esac
# Process ARM architecture variants # Process ARM architecture variants
@@ -668,12 +608,12 @@ process_common_toolchain() {
elif enabled armv7 elif enabled armv7
then then
check_add_cflags -march=armv7-a -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp #-ftree-vectorize check_add_cflags -march=armv7-a -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp #-ftree-vectorize
check_add_asflags -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp #-march=armv7-a check_add_asflags -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp #-march=armv7-a
else else
check_add_cflags -march=${tgt_isa} check_add_cflags -march=${tgt_isa}
check_add_asflags -march=${tgt_isa} check_add_asflags -march=${tgt_isa}
fi fi
enabled debug && add_asflags -g
asm_conversion_cmd="${source_path}/build/make/ads2gas.pl" asm_conversion_cmd="${source_path}/build/make/ads2gas.pl"
;; ;;
rvct) rvct)
@@ -698,24 +638,16 @@ process_common_toolchain() {
arch_int=${tgt_isa##armv} arch_int=${tgt_isa##armv}
arch_int=${arch_int%%te} arch_int=${arch_int%%te}
check_add_asflags --pd "\"ARCHITECTURE SETA ${arch_int}\"" check_add_asflags --pd "\"ARCHITECTURE SETA ${arch_int}\""
enabled debug && add_asflags -g
add_cflags --gnu
add_cflags --enum_is_int
add_cflags --wchar32
;; ;;
esac esac
case ${tgt_os} in case ${tgt_os} in
none*)
disable multithread
disable os_support
;;
darwin*) darwin*)
SDK_PATH=/Developer/Platforms/iPhoneOS.platform/Developer SDK_PATH=/Developer/Platforms/iPhoneOS.platform/Developer
TOOLCHAIN_PATH=${SDK_PATH}/usr/bin TOOLCHAIN_PATH=${SDK_PATH}/usr/bin
CC=${TOOLCHAIN_PATH}/gcc CC=${TOOLCHAIN_PATH}/gcc
AR=${TOOLCHAIN_PATH}/ar AR=${TOOLCHAIN_PATH}/ar
LD=${TOOLCHAIN_PATH}/arm-apple-darwin10-gcc-4.2.1 LD=${TOOLCHAIN_PATH}/arm-apple-darwin9-gcc-4.2.1
AS=${TOOLCHAIN_PATH}/as AS=${TOOLCHAIN_PATH}/as
STRIP=${TOOLCHAIN_PATH}/strip STRIP=${TOOLCHAIN_PATH}/strip
NM=${TOOLCHAIN_PATH}/nm NM=${TOOLCHAIN_PATH}/nm
@@ -729,18 +661,19 @@ process_common_toolchain() {
add_cflags -arch ${tgt_isa} add_cflags -arch ${tgt_isa}
add_ldflags -arch_only ${tgt_isa} add_ldflags -arch_only ${tgt_isa}
add_cflags "-isysroot ${SDK_PATH}/SDKs/iPhoneOS4.3.sdk" add_cflags "-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk"
# This should be overridable # This should be overridable
alt_libc=${SDK_PATH}/SDKs/iPhoneOS4.3.sdk alt_libc=${SDK_PATH}/SDKs/iPhoneOS3.1.sdk
# Add the paths for the alternate libc # Add the paths for the alternate libc
for d in usr/include usr/include/gcc/darwin/4.2/ usr/lib/gcc/arm-apple-darwin10/4.2.1/include/; do # for d in usr/include usr/include/gcc/darwin/4.0/; do
for d in usr/include usr/include/gcc/darwin/4.0/ usr/lib/gcc/arm-apple-darwin9/4.0.1/include/; do
try_dir="${alt_libc}/${d}" try_dir="${alt_libc}/${d}"
[ -d "${try_dir}" ] && add_cflags -I"${try_dir}" [ -d "${try_dir}" ] && add_cflags -I"${try_dir}"
done done
for d in lib usr/lib usr/lib/system; do for d in lib usr/lib; do
try_dir="${alt_libc}/${d}" try_dir="${alt_libc}/${d}"
[ -d "${try_dir}" ] && add_ldflags -L"${try_dir}" [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
done done
@@ -757,9 +690,13 @@ process_common_toolchain() {
|| die "Must supply --libc when targetting *-linux-rvct" || die "Must supply --libc when targetting *-linux-rvct"
# Set up compiler # Set up compiler
add_cflags --gnu
add_cflags --enum_is_int
add_cflags --library_interface=aeabi_glibc add_cflags --library_interface=aeabi_glibc
add_cflags --no_hide_all add_cflags --no_hide_all
add_cflags --wchar32
add_cflags --dwarf2 add_cflags --dwarf2
add_cflags --gnu
# Set up linker # Set up linker
add_ldflags --sysv --no_startup --no_ref_cpp_init add_ldflags --sysv --no_startup --no_ref_cpp_init
@@ -819,8 +756,8 @@ process_common_toolchain() {
link_with_cc=gcc link_with_cc=gcc
setup_gnu_toolchain setup_gnu_toolchain
add_asflags -force_cpusubtype_ALL -I"\$(dir \$<)darwin" add_asflags -force_cpusubtype_ALL -I"\$(dir \$<)darwin"
add_cflags -maltivec -faltivec
soft_enable altivec soft_enable altivec
enabled altivec && add_cflags -maltivec
case "$tgt_os" in case "$tgt_os" in
linux*) linux*)
@@ -832,7 +769,6 @@ process_common_toolchain() {
add_cflags ${darwin_arch} -m${bits} -fasm-blocks add_cflags ${darwin_arch} -m${bits} -fasm-blocks
add_asflags ${darwin_arch} -force_cpusubtype_ALL -I"\$(dir \$<)darwin" add_asflags ${darwin_arch} -force_cpusubtype_ALL -I"\$(dir \$<)darwin"
add_ldflags ${darwin_arch} -m${bits} add_ldflags ${darwin_arch} -m${bits}
enabled altivec && add_cflags -faltivec
;; ;;
esac esac
;; ;;
@@ -845,12 +781,8 @@ process_common_toolchain() {
soft_enable sse2 soft_enable sse2
soft_enable sse3 soft_enable sse3
soft_enable ssse3 soft_enable ssse3
soft_enable sse4_1
case ${tgt_os} in case ${tgt_os} in
win*)
enabled gcc && add_cflags -fno-common
;;
solaris*) solaris*)
CC=${CC:-${CROSS}gcc} CC=${CC:-${CROSS}gcc}
LD=${LD:-${CROSS}gcc} LD=${LD:-${CROSS}gcc}
@@ -858,7 +790,6 @@ process_common_toolchain() {
;; ;;
esac esac
AS="${alt_as:-${AS:-auto}}"
case ${tgt_cc} in case ${tgt_cc} in
icc*) icc*)
CC=${CC:-icc} CC=${CC:-icc}
@@ -866,50 +797,27 @@ process_common_toolchain() {
setup_gnu_toolchain setup_gnu_toolchain
add_cflags -use-msasm -use-asm add_cflags -use-msasm -use-asm
add_ldflags -i-static add_ldflags -i-static
enabled x86_64 && add_cflags -ipo -no-prec-div -static -xSSE2 -axSSE2 enabled x86_64 && add_cflags -ipo -no-prec-div -static -xSSE3 -axSSE3
enabled x86_64 && AR=xiar enabled x86_64 && AR=xiar
case ${tune_cpu} in
atom*)
tune_cflags="-x"
tune_cpu="SSE3_ATOM"
;;
*)
tune_cflags="-march="
;;
esac
;; ;;
gcc*) gcc*)
add_cflags -m${bits} add_cflags -m${bits}
add_ldflags -m${bits} add_ldflags -m${bits}
link_with_cc=gcc link_with_cc=gcc
tune_cflags="-march="
setup_gnu_toolchain setup_gnu_toolchain
#for 32 bit x86 builds, -O3 did not turn on this flag
enabled optimizations && check_add_cflags -fomit-frame-pointer
;; ;;
esac esac
case "${AS}" in AS=yasm
auto|"")
which nasm >/dev/null 2>&1 && AS=nasm
which yasm >/dev/null 2>&1 && AS=yasm
[ "${AS}" = auto -o -z "${AS}" ] \
&& die "Neither yasm nor nasm have been found"
;;
esac
log_echo " using $AS"
[ "${AS##*/}" = nasm ] && add_asflags -Ox
AS_SFX=.asm AS_SFX=.asm
case ${tgt_os} in case ${tgt_os} in
win*) win*)
add_asflags -f win${bits} add_asflags -f win${bits}
enabled debug && add_asflags -g cv8 enabled debug && add_asflags -g dwarf2
;; ;;
linux*|solaris*) linux*|solaris*)
add_asflags -f elf${bits} add_asflags -f elf${bits}
enabled debug && [ "${AS}" = yasm ] && add_asflags -g dwarf2 enabled debug && add_asflags -g dwarf2
enabled debug && [ "${AS}" = nasm ] && add_asflags -g
[ "${AS##*/}" = nasm ] && check_asm_align
;; ;;
darwin*) darwin*)
add_asflags -f macho${bits} add_asflags -f macho${bits}
@@ -922,7 +830,7 @@ process_common_toolchain() {
# enabled icc && ! enabled pic && add_cflags -fno-pic -mdynamic-no-pic # enabled icc && ! enabled pic && add_cflags -fno-pic -mdynamic-no-pic
enabled icc && ! enabled pic && add_cflags -fno-pic enabled icc && ! enabled pic && add_cflags -fno-pic
;; ;;
*) log "Warning: Unknown os $tgt_os while setting up $AS flags" *) log "Warning: Unknown os $tgt_os while setting up yasm flags"
;; ;;
esac esac
;; ;;
@@ -953,44 +861,12 @@ process_common_toolchain() {
enabled gcov && enabled gcov &&
check_add_cflags -fprofile-arcs -ftest-coverage && check_add_cflags -fprofile-arcs -ftest-coverage &&
check_add_ldflags -fprofile-arcs -ftest-coverage check_add_ldflags -fprofile-arcs -ftest-coverage
if enabled optimizations; then enabled optimizations && check_add_cflags -O3
enabled rvct && check_add_cflags -Otime if enabled rvct; then
enabled small && check_add_cflags -O2 || check_add_cflags -O3 enabled optimizations && check_add_cflags -Otime
fi
if enabled opencl; then
disable multithread
echo " disabling multithread"
soft_enable opencl #Provide output to make user comfortable
enable runtime_cpu_detect
#Use dlopen() to load OpenCL when possible.
case ${toolchain} in
*darwin10*)
check_add_cflags -D__APPLE__
add_extralibs -framework OpenCL
;;
*-win32-gcc)
if check_header dlfcn.h; then
add_extralibs -ldl
enable dlopen
else
#This shouldn't be a hard-coded path in the long term
add_extralibs -L/cygdrive/c/Windows/System32 -lOpenCL
fi
;;
*)
if check_header dlfcn.h; then
add_extralibs -ldl
enable dlopen
else
add_extralibs -lOpenCL
fi
;;
esac
fi fi
# Position Independent Code (PIC) support, for building relocatable # Position Independant Code (PIC) support, for building relocatable
# shared objects # shared objects
enabled gcc && enabled pic && check_add_cflags -fPIC enabled gcc && enabled pic && check_add_cflags -fPIC
@@ -1014,14 +890,8 @@ EOF
# glibc needs these # glibc needs these
if enabled linux; then if enabled linux; then
add_cflags -D_LARGEFILE_SOURCE add_cflags -D_LARGEFILE_SOURCE
add_cflags -D_FILE_OFFSET_BITS=64 add_cflags -D_FILE_OFFSET_BITS=64
fi
# append any user defined extra cflags
if [ -n "${extra_cflags}" ] ; then
check_add_cflags ${extra_cflags} || \
die "Requested extra CFLAGS '${extra_cflags}' not supported by compiler"
fi fi
} }

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source
@@ -32,8 +32,7 @@ Options:
--name=project_name Name of the project (required) --name=project_name Name of the project (required)
--proj-guid=GUID GUID to use for the project --proj-guid=GUID GUID to use for the project
--module-def=filename File containing export definitions (for DLLs) --module-def=filename File containing export definitions (for DLLs)
--ver=version Version (7,8,9) of visual studio to generate for --ver=version Version (7,8) of visual studio to generate for
--src-path-bare=dir Path to root of source tree
-Ipath/to/include Additional include directories -Ipath/to/include Additional include directories
-DFLAG[=value] Preprocessor macros to define -DFLAG[=value] Preprocessor macros to define
-Lpath/to/lib Additional library search paths -Lpath/to/lib Additional library search paths
@@ -133,7 +132,7 @@ generate_filter() {
open_tag Filter \ open_tag Filter \
Name=$name \ Name=$name \
Filter=$pats \ Filter=$pats \
UniqueIdentifier=`generate_uuid` \ UniqueIdentifier=`generate_uuid`
file_list_sz=${#file_list[@]} file_list_sz=${#file_list[@]}
for i in ${!file_list[@]}; do for i in ${!file_list[@]}; do
@@ -146,21 +145,31 @@ generate_filter() {
if [ "$pat" == "asm" ] && $asm_use_custom_step; then if [ "$pat" == "asm" ] && $asm_use_custom_step; then
for plat in "${platforms[@]}"; do for plat in "${platforms[@]}"; do
for cfg in Debug Release; do for cfg in Debug Release; do
open_tag FileConfiguration \ open_tag FileConfiguration \
Name="${cfg}|${plat}" \ Name="${cfg}|${plat}"
tag Tool \ tag Tool \
Name="VCCustomBuildTool" \ Name="VCCustomBuildTool" \
Description="Assembling \$(InputFileName)" \ Description="Assembling \$(InputFileName)" \
CommandLine="$(eval echo \$asm_${cfg}_cmdline)" \ CommandLine="$(eval echo \$asm_${cfg}_cmdline)"\
Outputs="\$(InputName).obj" \ Outputs="\$(InputName).obj"
close_tag FileConfiguration close_tag FileConfiguration
done done
done done
fi fi
close_tag File if [ "${f##*.}" == "cpp" ]; then
for plat in "${platforms[@]}"; do
for cfg in Debug Release; do
open_tag FileConfiguration \
Name="${cfg}|${plat}"
tag Tool \
Name="VCCLCompilerTool" \
CompileAs="2"
close_tag FileConfiguration
done
done
fi
close_tag File
break break
fi fi
@@ -176,63 +185,57 @@ unset target
for opt in "$@"; do for opt in "$@"; do
optval="${opt#*=}" optval="${opt#*=}"
case "$opt" in case "$opt" in
--help|-h) show_help --help|-h) show_help
;; ;;
--target=*) target="${optval}" --target=*) target="${optval}"
;; ;;
--out=*) outfile="$optval" --out=*) outfile="$optval"
;; ;;
--name=*) name="${optval}" --name=*) name="${optval}"
;; ;;
--proj-guid=*) guid="${optval}" --proj-guid=*) guid="${optval}"
;; ;;
--module-def=*) link_opts="${link_opts} ModuleDefinitionFile=${optval}" --module-def=*)
;; link_opts="${link_opts} ModuleDefinitionFile=${optval}"
--exe) proj_kind="exe" ;;
;; --exe) proj_kind="exe"
--lib) proj_kind="lib" ;;
;; --lib) proj_kind="lib"
--src-path-bare=*) src_path_bare="$optval" ;;
;; --static-crt) use_static_runtime=true
--static-crt) use_static_runtime=true ;;
;; --ver=*) vs_ver="$optval"
--ver=*) case $optval in
vs_ver="$optval" [78])
case "$optval" in ;;
[789]) *) die Unrecognized Visual Studio Version in $opt
;; ;;
*) die Unrecognized Visual Studio Version in $opt esac
;; ;;
esac -I*) opt="${opt%/}"
;; incs="${incs}${incs:+;}&quot;${opt##-I}&quot;"
-I*) yasmincs="${yasmincs} ${opt}"
opt="${opt%/}" ;;
incs="${incs}${incs:+;}&quot;${opt##-I}&quot;" -D*) defines="${defines}${defines:+;}${opt##-D}"
yasmincs="${yasmincs} ${opt}" ;;
;; -L*) # fudge . to $(OutDir)
-D*) defines="${defines}${defines:+;}${opt##-D}" if [ "${opt##-L}" == "." ]; then
;; libdirs="${libdirs}${libdirs:+;}&quot;\$(OutDir)&quot;"
-L*) # fudge . to $(OutDir) else
if [ "${opt##-L}" == "." ]; then # Also try directories for this platform/configuration
libdirs="${libdirs}${libdirs:+;}&quot;\$(OutDir)&quot;" libdirs="${libdirs}${libdirs:+;}&quot;${opt##-L}&quot;"
else libdirs="${libdirs}${libdirs:+;}&quot;${opt##-L}/\$(PlatformName)/\$(ConfigurationName)&quot;"
# Also try directories for this platform/configuration libdirs="${libdirs}${libdirs:+;}&quot;${opt##-L}/\$(PlatformName)&quot;"
libdirs="${libdirs}${libdirs:+;}&quot;${opt##-L}&quot;" fi
libdirs="${libdirs}${libdirs:+;}&quot;${opt##-L}/\$(PlatformName)/\$(ConfigurationName)&quot;" ;;
libdirs="${libdirs}${libdirs:+;}&quot;${opt##-L}/\$(PlatformName)&quot;" -l*) libs="${libs}${libs:+ }${opt##-l}.lib"
fi ;;
;; -*) die_unknown $opt
-l*) libs="${libs}${libs:+ }${opt##-l}.lib" ;;
;; *) file_list[${#file_list[@]}]="$opt"
-*) die_unknown $opt case "$opt" in
;; *.asm) uses_asm=true;;
*) esac
file_list[${#file_list[@]}]="$opt"
case "$opt" in
*.asm) uses_asm=true
;;
esac
;;
esac esac
done done
outfile=${outfile:-/dev/stdout} outfile=${outfile:-/dev/stdout}
@@ -245,8 +248,6 @@ case "${vs_ver:-8}" in
;; ;;
8) vs_ver_id="8.00" 8) vs_ver_id="8.00"
;; ;;
9) vs_ver_id="9.00"
;;
esac esac
[ -n "$name" ] || die "Project name (--name) must be specified!" [ -n "$name" ] || die "Project name (--name) must be specified!"
@@ -275,7 +276,11 @@ done
# List Keyword for this target # List Keyword for this target
case "$target" in case "$target" in
x86*) keyword="ManagedCProj" x86*)
keyword="ManagedCProj"
;;
arm*|iwmmx*)
keyword="Win32Proj"
;; ;;
*) die "Unsupported target $target!" *) die "Unsupported target $target!"
esac esac
@@ -291,255 +296,402 @@ case "$target" in
asm_Debug_cmdline="yasm -Xvc -g cv8 -f \$(PlatformName) ${yasmincs} &quot;\$(InputPath)&quot;" asm_Debug_cmdline="yasm -Xvc -g cv8 -f \$(PlatformName) ${yasmincs} &quot;\$(InputPath)&quot;"
asm_Release_cmdline="yasm -Xvc -f \$(PlatformName) ${yasmincs} &quot;\$(InputPath)&quot;" asm_Release_cmdline="yasm -Xvc -f \$(PlatformName) ${yasmincs} &quot;\$(InputPath)&quot;"
;; ;;
arm*|iwmmx*)
case "${name}" in
obj_int_extract) platforms[0]="Win32"
;;
*) platforms[0]="Pocket PC 2003 (ARMV4)"
;;
esac
;;
*) die "Unsupported target $target!" *) die "Unsupported target $target!"
esac
# List Command-line Arguments for this target
case "$target" in
arm*|iwmmx*)
if [ "$name" == "example" ];then
ARGU="--codec vp6 --flipuv --progress _bnd.vp6"
fi
if [ "$name" == "xma" ];then
ARGU="--codec vp6 -h 240 -w 320 -v"
fi
;; ;;
esac esac
generate_vcproj() { generate_vcproj() {
case "$proj_kind" in case "$proj_kind" in
exe) vs_ConfigurationType=1 exe) vs_ConfigurationType=1
;; ;;
*) vs_ConfigurationType=4 *) vs_ConfigurationType=4
;; ;;
esac esac
echo "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>" echo "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>"
open_tag VisualStudioProject \ open_tag VisualStudioProject \
ProjectType="Visual C++" \ ProjectType="Visual C++" \
Version="${vs_ver_id}" \ Version="${vs_ver_id}" \
Name="${name}" \ Name="${name}" \
ProjectGUID="{${guid}}" \ ProjectGUID="{${guid}}" \
RootNamespace="${name}" \ RootNamespace="${name}" \
Keyword="${keyword}" \ Keyword="${keyword}"
open_tag Platforms open_tag Platforms
for plat in "${platforms[@]}"; do for plat in "${platforms[@]}"; do
tag Platform Name="$plat" tag Platform Name="$plat"
done done
close_tag Platforms close_tag Platforms
open_tag ToolFiles open_tag ToolFiles
case "$target" in case "$target" in
x86*) $uses_asm && tag ToolFile RelativePath="$self_dirname/../x86-msvs/yasm.rules" x86*) $uses_asm && tag ToolFile RelativePath="$self_dirname/../x86-msvs/yasm.rules"
;; ;;
arm*|iwmmx*)
if [ "$name" == "vpx_decoder" ];then
case "$target" in
armv5*)
tag ToolFile RelativePath="$self_dirname/../arm-wince-vs8/armasmv5.rules"
;;
armv6*)
tag ToolFile RelativePath="$self_dirname/../arm-wince-vs8/armasmv6.rules"
;;
iwmmxt*)
tag ToolFile RelativePath="$self_dirname/../arm-wince-vs8/armasmxscale.rules"
;;
esac
fi
;;
esac esac
close_tag ToolFiles close_tag ToolFiles
open_tag Configurations open_tag Configurations
for plat in "${platforms[@]}"; do for plat in "${platforms[@]}"; do
plat_no_ws=`echo $plat | sed 's/[^A-Za-z0-9_]/_/g'` plat_no_ws=`echo $plat | sed 's/[^A-Za-z0-9_]/_/g'`
open_tag Configuration \ open_tag Configuration \
Name="Debug|$plat" \ Name="Debug|$plat" \
OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \ OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \
IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \ IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \
ConfigurationType="$vs_ConfigurationType" \ ConfigurationType="$vs_ConfigurationType" \
CharacterSet="1" \ CharacterSet="1"
if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
case "$name" in
vpx_decoder) tag Tool \
Name="VCPreBuildEventTool" \
CommandLine="call obj_int_extract.bat \$(ConfigurationName)"
tag Tool \
Name="VCMIDLTool" \
TargetEnvironment="1"
tag Tool \
Name="VCCLCompilerTool" \
ExecutionBucket="7" \
Optimization="0" \
AdditionalIncludeDirectories="$incs" \
PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;DEBUG;_LIB;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
MinimalRebuild="true" \
RuntimeLibrary="1" \
BufferSecurityCheck="false" \
UsePrecompiledHeader="0" \
WarningLevel="3" \
DebugInformationFormat="1" \
CompileAs="1"
tag Tool \
Name="VCResourceCompilerTool" \
PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES)" \
Culture="1033" \
AdditionalIncludeDirectories="\$(IntDir)" \
;;
example|xma) tag Tool \
Name="VCCLCompilerTool" \
ExecutionBucket="7" \
Optimization="0" \
AdditionalIncludeDirectories="$incs" \
PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;DEBUG;_CONSOLE;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
MinimalRebuild="true" \
RuntimeLibrary="1" \
BufferSecurityCheck="false" \
UsePrecompiledHeader="0" \
WarningLevel="3" \
DebugInformationFormat="1" \
CompileAs="1"
tag Tool \
Name="VCResourceCompilerTool" \
PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES)" \
Culture="1033" \
AdditionalIncludeDirectories="\$(IntDir)" \
;;
obj_int_extract) tag Tool \
Name="VCCLCompilerTool" \
Optimization="0" \
AdditionalIncludeDirectories="$incs" \
PreprocessorDefinitions="WIN32;DEBUG;_CONSOLE" \
RuntimeLibrary="1" \
WarningLevel="3" \
DebugInformationFormat="1" \
;;
esac
fi
case "$target" in case "$target" in
x86*) x86*) tag Tool \
case "$name" in Name="VCCLCompilerTool" \
obj_int_extract) Optimization="0" \
tag Tool \ AdditionalIncludeDirectories="$incs" \
Name="VCCLCompilerTool" \ PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;$defines" \
Optimization="0" \ RuntimeLibrary="$debug_runtime" \
AdditionalIncludeDirectories="$incs" \ UsePrecompiledHeader="0" \
PreprocessorDefinitions="WIN32;DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE" \ WarningLevel="3" \
RuntimeLibrary="$debug_runtime" \ DebugInformationFormat="1" \
WarningLevel="3" \ Detect64BitPortabilityProblems="true" \
Detect64BitPortabilityProblems="true" \
DebugInformationFormat="1" \
;;
vpx)
tag Tool \
Name="VCPreBuildEventTool" \
CommandLine="call obj_int_extract.bat $src_path_bare" \
tag Tool \ $uses_asm && tag Tool Name="YASM" IncludePaths="$incs" Debug="1"
Name="VCCLCompilerTool" \
Optimization="0" \
AdditionalIncludeDirectories="$incs" \
PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
RuntimeLibrary="$debug_runtime" \
UsePrecompiledHeader="0" \
WarningLevel="3" \
DebugInformationFormat="1" \
Detect64BitPortabilityProblems="true" \
$uses_asm && tag Tool Name="YASM" IncludePaths="$incs" Debug="1"
;;
*)
tag Tool \
Name="VCCLCompilerTool" \
Optimization="0" \
AdditionalIncludeDirectories="$incs" \
PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
RuntimeLibrary="$debug_runtime" \
UsePrecompiledHeader="0" \
WarningLevel="3" \
DebugInformationFormat="1" \
Detect64BitPortabilityProblems="true" \
$uses_asm && tag Tool Name="YASM" IncludePaths="$incs" Debug="1"
;;
esac
;; ;;
esac esac
case "$proj_kind" in case "$proj_kind" in
exe) exe)
case "$target" in case "$target" in
x86*) x86*) tag Tool \
Name="VCLinkerTool" \
AdditionalDependencies="$debug_libs \$(NoInherit)" \
AdditionalLibraryDirectories="$libdirs" \
GenerateDebugInformation="true" \
ProgramDatabaseFile="\$(OutDir)/${name}.pdb" \
;;
arm*|iwmmx*)
case "$name" in case "$name" in
obj_int_extract) obj_int_extract) tag Tool \
tag Tool \ Name="VCLinkerTool" \
Name="VCLinkerTool" \ OutputFile="${name}.exe" \
OutputFile="${name}.exe" \ GenerateDebugInformation="true"
GenerateDebugInformation="true" \
;; ;;
*) *) tag Tool \
tag Tool \ Name="VCLinkerTool" \
Name="VCLinkerTool" \ AdditionalDependencies="$debug_libs" \
AdditionalDependencies="$debug_libs \$(NoInherit)" \ OutputFile="\$(OutDir)/${name}.exe" \
AdditionalLibraryDirectories="$libdirs" \ LinkIncremental="2" \
GenerateDebugInformation="true" \ AdditionalLibraryDirectories="${libdirs};&quot;..\lib/$plat_no_ws&quot;" \
ProgramDatabaseFile="\$(OutDir)/${name}.pdb" \ DelayLoadDLLs="\$(NOINHERIT)" \
GenerateDebugInformation="true" \
ProgramDatabaseFile="\$(OutDir)/${name}.pdb" \
SubSystem="9" \
StackReserveSize="65536" \
StackCommitSize="4096" \
EntryPointSymbol="mainWCRTStartup" \
TargetMachine="3"
;; ;;
esac esac
;; ;;
esac esac
;; ;;
lib) lib)
case "$target" in case "$target" in
x86*) arm*|iwmmx*) tag Tool \
tag Tool \ Name="VCLibrarianTool" \
Name="VCLibrarianTool" \ AdditionalOptions=" /subsystem:windowsce,4.20 /machine:ARM" \
OutputFile="\$(OutDir)/${name}${lib_sfx}d.lib" \ OutputFile="\$(OutDir)/${name}.lib" \
;;
;; *) tag Tool \
Name="VCLibrarianTool" \
OutputFile="\$(OutDir)/${name}${lib_sfx}d.lib" \
;;
esac esac
;; ;;
dll) dll) tag Tool \
tag Tool \ Name="VCLinkerTool" \
Name="VCLinkerTool" \ AdditionalDependencies="\$(NoInherit)" \
AdditionalDependencies="\$(NoInherit)" \ LinkIncremental="2" \
LinkIncremental="2" \ GenerateDebugInformation="true" \
GenerateDebugInformation="true" \ AssemblyDebug="1" \
AssemblyDebug="1" \ TargetMachine="1" \
TargetMachine="1" \ $link_opts
$link_opts \
;;
esac esac
if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
case "$name" in
vpx_decoder) tag DeploymentTool \
ForceDirty="-1" \
RegisterOutput="0"
;;
example|xma) tag DeploymentTool \
ForceDirty="-1" \
RegisterOutput="0"
tag DebuggerTool \
Arguments="${ARGU}"
;;
esac
fi
close_tag Configuration close_tag Configuration
open_tag Configuration \ open_tag Configuration \
Name="Release|$plat" \ Name="Release|$plat" \
OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \ OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \
IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \ IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \
ConfigurationType="$vs_ConfigurationType" \ ConfigurationType="$vs_ConfigurationType" \
CharacterSet="1" \ CharacterSet="1" \
WholeProgramOptimization="0" \ WholeProgramOptimization="0"
case "$target" in if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
x86*) case "$name" in
case "$name" in vpx_decoder) tag Tool \
obj_int_extract) Name="VCPreBuildEventTool" \
tag Tool \ CommandLine="call obj_int_extract.bat \$(ConfigurationName)"
Name="VCCLCompilerTool" \ tag Tool \
AdditionalIncludeDirectories="$incs" \ Name="VCMIDLTool" \
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE" \ TargetEnvironment="1"
RuntimeLibrary="$release_runtime" \ tag Tool \
UsePrecompiledHeader="0" \ Name="VCCLCompilerTool" \
WarningLevel="3" \ ExecutionBucket="7" \
Detect64BitPortabilityProblems="true" \ Optimization="2" \
DebugInformationFormat="0" \ FavorSizeOrSpeed="1" \
;; AdditionalIncludeDirectories="$incs" \
vpx) PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;_LIB;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
tag Tool \ RuntimeLibrary="0" \
Name="VCPreBuildEventTool" \ BufferSecurityCheck="false" \
CommandLine="call obj_int_extract.bat $src_path_bare" \ UsePrecompiledHeader="0" \
WarningLevel="3" \
DebugInformationFormat="0" \
CompileAs="1"
tag Tool \
Name="VCResourceCompilerTool" \
PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES)" \
Culture="1033" \
AdditionalIncludeDirectories="\$(IntDir)" \
;;
example|xma) tag Tool \
Name="VCCLCompilerTool" \
ExecutionBucket="7" \
Optimization="2" \
FavorSizeOrSpeed="1" \
AdditionalIncludeDirectories="$incs" \
PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;_CONSOLE;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
RuntimeLibrary="0" \
BufferSecurityCheck="false" \
UsePrecompiledHeader="0" \
WarningLevel="3" \
DebugInformationFormat="0" \
CompileAs="1"
tag Tool \
Name="VCResourceCompilerTool" \
PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES)" \
Culture="1033" \
AdditionalIncludeDirectories="\$(IntDir)" \
;;
obj_int_extract) tag Tool \
Name="VCCLCompilerTool" \
AdditionalIncludeDirectories="$incs" \
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" \
RuntimeLibrary="0" \
UsePrecompiledHeader="0" \
WarningLevel="3" \
Detect64BitPortabilityProblems="true" \
DebugInformationFormat="0" \
;;
esac
fi
tag Tool \ case "$target" in
Name="VCCLCompilerTool" \ x86*) tag Tool \
AdditionalIncludeDirectories="$incs" \ Name="VCCLCompilerTool" \
PreprocessorDefinitions="WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \ AdditionalIncludeDirectories="$incs" \
RuntimeLibrary="$release_runtime" \ PreprocessorDefinitions="WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;$defines" \
UsePrecompiledHeader="0" \ RuntimeLibrary="$release_runtime" \
WarningLevel="3" \ UsePrecompiledHeader="0" \
DebugInformationFormat="0" \ WarningLevel="3" \
Detect64BitPortabilityProblems="true" \ DebugInformationFormat="0" \
Detect64BitPortabilityProblems="true"
$uses_asm && tag Tool Name="YASM" IncludePaths="$incs" $uses_asm && tag Tool Name="YASM" IncludePaths="$incs"
;; ;;
*)
tag Tool \
Name="VCCLCompilerTool" \
AdditionalIncludeDirectories="$incs" \
PreprocessorDefinitions="WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
RuntimeLibrary="$release_runtime" \
UsePrecompiledHeader="0" \
WarningLevel="3" \
DebugInformationFormat="0" \
Detect64BitPortabilityProblems="true" \
$uses_asm && tag Tool Name="YASM" IncludePaths="$incs"
;;
esac esac
;;
esac
case "$proj_kind" in case "$proj_kind" in
exe) exe)
case "$target" in case "$target" in
x86*) x86*) tag Tool \
Name="VCLinkerTool" \
AdditionalDependencies="$libs \$(NoInherit)" \
AdditionalLibraryDirectories="$libdirs" \
;;
arm*|iwmmx*)
case "$name" in case "$name" in
obj_int_extract) obj_int_extract) tag Tool \
tag Tool \ Name="VCLinkerTool" \
Name="VCLinkerTool" \ OutputFile="${name}.exe" \
OutputFile="${name}.exe" \ LinkIncremental="1" \
GenerateDebugInformation="true" \ GenerateDebugInformation="false" \
SubSystem="0" \
OptimizeReferences="0" \
EnableCOMDATFolding="0" \
TargetMachine="0"
;; ;;
*) *) tag Tool \
tag Tool \ Name="VCLinkerTool" \
Name="VCLinkerTool" \ AdditionalDependencies="$libs" \
AdditionalDependencies="$libs \$(NoInherit)" \ OutputFile="\$(OutDir)/${name}.exe" \
AdditionalLibraryDirectories="$libdirs" \ LinkIncremental="1" \
AdditionalLibraryDirectories="${libdirs};&quot;..\lib/$plat_no_ws&quot;" \
DelayLoadDLLs="\$(NOINHERIT)" \
GenerateDebugInformation="true" \
ProgramDatabaseFile="\$(OutDir)/${name}.pdb" \
SubSystem="9" \
StackReserveSize="65536" \
StackCommitSize="4096" \
OptimizeReferences="2" \
EnableCOMDATFolding="2" \
EntryPointSymbol="mainWCRTStartup" \
TargetMachine="3"
;; ;;
esac esac
;; ;;
esac esac
;; ;;
lib) lib)
case "$target" in case "$target" in
x86*) arm*|iwmmx*) tag Tool \
tag Tool \ Name="VCLibrarianTool" \
Name="VCLibrarianTool" \ AdditionalOptions=" /subsystem:windowsce,4.20 /machine:ARM" \
OutputFile="\$(OutDir)/${name}${lib_sfx}.lib" \ OutputFile="\$(OutDir)/${name}.lib" \
;;
;; *) tag Tool \
Name="VCLibrarianTool" \
OutputFile="\$(OutDir)/${name}${lib_sfx}.lib" \
;;
esac esac
;; ;;
dll) # note differences to debug version: LinkIncremental, AssemblyDebug dll) # note differences to debug version: LinkIncremental, AssemblyDebug
tag Tool \ tag Tool \
Name="VCLinkerTool" \ Name="VCLinkerTool" \
AdditionalDependencies="\$(NoInherit)" \ AdditionalDependencies="\$(NoInherit)" \
LinkIncremental="1" \ LinkIncremental="1" \
GenerateDebugInformation="true" \ GenerateDebugInformation="true" \
TargetMachine="1" \ TargetMachine="1" \
$link_opts \ $link_opts
;;
esac esac
if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
case "$name" in
vpx_decoder) tag DeploymentTool \
ForceDirty="-1" \
RegisterOutput="0"
;;
example|xma) tag DeploymentTool \
ForceDirty="-1" \
RegisterOutput="0"
tag DebuggerTool \
Arguments="${ARGU}"
;;
esac
fi
close_tag Configuration close_tag Configuration
done done
close_tag Configurations close_tag Configurations
open_tag Files open_tag Files
generate_filter srcs "Source Files" "c;def;odl;idl;hpj;bat;asm;asmx" generate_filter srcs "Source Files" "cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
generate_filter hdrs "Header Files" "h;hm;inl;inc;xsd" generate_filter hdrs "Header Files" "h;hpp;hxx;hm;inl;inc;xsd"
generate_filter resrcs "Resource Files" "rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" generate_filter resrcs "Resource Files" "rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
generate_filter resrcs "Build Files" "mk" generate_filter resrcs "Build Files" "mk"
close_tag Files close_tag Files

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source
@@ -25,7 +25,7 @@ files.
Options: Options:
--help Print this message --help Print this message
--out=outfile Redirect output to a file --out=outfile Redirect output to a file
--ver=version Version (7,8,9) of visual studio to generate for --ver=version Version (7,8) of visual studio to generate for
--target=isa-os-cc Target specifier --target=isa-os-cc Target specifier
EOF EOF
exit 1 exit 1
@@ -139,6 +139,9 @@ process_global() {
echo "${indent}${proj_guid}.${config}.ActiveCfg = ${config}" echo "${indent}${proj_guid}.${config}.ActiveCfg = ${config}"
echo "${indent}${proj_guid}.${config}.Build.0 = ${config}" echo "${indent}${proj_guid}.${config}.Build.0 = ${config}"
if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
echo "${indent}${proj_guid}.${config}.Deploy.0 = ${config}"
fi
done done
IFS=${IFS_bak} IFS=${IFS_bak}
done done
@@ -190,11 +193,11 @@ ${TAB}rm -rf "$platform"/"$config"
ifneq (\$(found_devenv),) ifneq (\$(found_devenv),)
ifeq (\$(CONFIG_VS_VERSION),7) ifeq (\$(CONFIG_VS_VERSION),7)
$nows_sln_config: $outfile $nows_sln_config: $outfile
${TAB}devenv.com $outfile -build "$config" ${TAB}devenv.com $outfile /build "$config"
else else
$nows_sln_config: $outfile $nows_sln_config: $outfile
${TAB}devenv.com $outfile -build "$sln_config" ${TAB}devenv.com $outfile /build "$sln_config"
endif endif
else else
@@ -221,7 +224,7 @@ for opt in "$@"; do
;; ;;
--ver=*) vs_ver="$optval" --ver=*) vs_ver="$optval"
case $optval in case $optval in
[789]) [78])
;; ;;
*) die Unrecognized Visual Studio Version in $opt *) die Unrecognized Visual Studio Version in $opt
;; ;;
@@ -232,7 +235,7 @@ for opt in "$@"; do
7) sln_vers="8.00" 7) sln_vers="8.00"
sln_vers_str="Visual Studio .NET 2003" sln_vers_str="Visual Studio .NET 2003"
;; ;;
[89]) 8)
;; ;;
*) die "Unrecognized Visual Studio Version '$optval' in $opt" *) die "Unrecognized Visual Studio Version '$optval' in $opt"
;; ;;
@@ -254,9 +257,6 @@ case "${vs_ver:-8}" in
8) sln_vers="9.00" 8) sln_vers="9.00"
sln_vers_str="Visual Studio 2005" sln_vers_str="Visual Studio 2005"
;; ;;
9) sln_vers="10.00"
sln_vers_str="Visual Studio 2008"
;;
esac esac
for f in "${file_list[@]}"; do for f in "${file_list[@]}"; do

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source

View File

@@ -1,15 +0,0 @@
REM Copyright (c) 2011 The WebM project authors. All Rights Reserved.
REM
REM Use of this source code is governed by a BSD-style license
REM that can be found in the LICENSE file in the root of the source
REM tree. An additional intellectual property rights grant can be found
REM in the file PATENTS. All contributing project authors may
REM be found in the AUTHORS file in the root of the source tree.
echo on
cl /I "./" /I "%1" /nologo /c "%1/vp8/common/asm_com_offsets.c"
cl /I "./" /I "%1" /nologo /c "%1/vp8/decoder/asm_dec_offsets.c"
cl /I "./" /I "%1" /nologo /c "%1/vp8/encoder/asm_enc_offsets.c"
obj_int_extract.exe rvds "asm_com_offsets.obj" > "asm_com_offsets.asm"
obj_int_extract.exe rvds "asm_dec_offsets.obj" > "asm_dec_offsets.asm"
obj_int_extract.exe rvds "asm_enc_offsets.obj" > "asm_enc_offsets.asm"

58
configure vendored
View File

@@ -23,7 +23,6 @@ Advanced options:
${toggle_libs} don't build libraries ${toggle_libs} don't build libraries
${toggle_examples} don't build examples ${toggle_examples} don't build examples
--libc=PATH path to alternate libc --libc=PATH path to alternate libc
--as={yasm|nasm|auto} use specified assembler [auto, yasm preferred]
${toggle_fast_unaligned} don't use unaligned accesses, even when ${toggle_fast_unaligned} don't use unaligned accesses, even when
supported by hardware [auto] supported by hardware [auto]
${toggle_codec_srcs} in/exclude codec library source code ${toggle_codec_srcs} in/exclude codec library source code
@@ -39,9 +38,6 @@ Advanced options:
${toggle_realtime_only} enable this option while building for real-time encoding ${toggle_realtime_only} enable this option while building for real-time encoding
${toggle_runtime_cpu_detect} runtime cpu detection ${toggle_runtime_cpu_detect} runtime cpu detection
${toggle_shared} shared library support ${toggle_shared} shared library support
${toggle_small} favor smaller size over speed
${toggle_opencl} support for OpenCL-assisted VP8 decoding (experimental)
${toggle_postproc_visualizer} macro block / block level visualizers
Codecs: Codecs:
Codecs can be selectively enabled or disabled individually, or by family: Codecs can be selectively enabled or disabled individually, or by family:
@@ -79,48 +75,43 @@ EOF
# alphabetically by architecture, generic-gnu last. # alphabetically by architecture, generic-gnu last.
all_platforms="${all_platforms} armv5te-linux-rvct" all_platforms="${all_platforms} armv5te-linux-rvct"
all_platforms="${all_platforms} armv5te-linux-gcc" all_platforms="${all_platforms} armv5te-linux-gcc"
all_platforms="${all_platforms} armv5te-none-rvct"
all_platforms="${all_platforms} armv5te-symbian-gcc" all_platforms="${all_platforms} armv5te-symbian-gcc"
all_platforms="${all_platforms} armv5te-wince-vs8"
all_platforms="${all_platforms} armv6-darwin-gcc" all_platforms="${all_platforms} armv6-darwin-gcc"
all_platforms="${all_platforms} armv6-linux-rvct" all_platforms="${all_platforms} armv6-linux-rvct"
all_platforms="${all_platforms} armv6-linux-gcc" all_platforms="${all_platforms} armv6-linux-gcc"
all_platforms="${all_platforms} armv6-none-rvct"
all_platforms="${all_platforms} armv6-symbian-gcc" all_platforms="${all_platforms} armv6-symbian-gcc"
all_platforms="${all_platforms} armv6-wince-vs8"
all_platforms="${all_platforms} iwmmxt-linux-rvct" all_platforms="${all_platforms} iwmmxt-linux-rvct"
all_platforms="${all_platforms} iwmmxt-linux-gcc" all_platforms="${all_platforms} iwmmxt-linux-gcc"
all_platforms="${all_platforms} iwmmxt-wince-vs8"
all_platforms="${all_platforms} iwmmxt2-linux-rvct" all_platforms="${all_platforms} iwmmxt2-linux-rvct"
all_platforms="${all_platforms} iwmmxt2-linux-gcc" all_platforms="${all_platforms} iwmmxt2-linux-gcc"
all_platforms="${all_platforms} iwmmxt2-wince-vs8"
all_platforms="${all_platforms} armv7-darwin-gcc" #neon Cortex-A8 all_platforms="${all_platforms} armv7-darwin-gcc" #neon Cortex-A8
all_platforms="${all_platforms} armv7-linux-rvct" #neon Cortex-A8 all_platforms="${all_platforms} armv7-linux-rvct" #neon Cortex-A8
all_platforms="${all_platforms} armv7-linux-gcc" #neon Cortex-A8 all_platforms="${all_platforms} armv7-linux-gcc" #neon Cortex-A8
all_platforms="${all_platforms} armv7-none-rvct" #neon Cortex-A8
all_platforms="${all_platforms} mips32-linux-gcc" all_platforms="${all_platforms} mips32-linux-gcc"
all_platforms="${all_platforms} ppc32-darwin8-gcc" all_platforms="${all_platforms} ppc32-darwin8-gcc"
all_platforms="${all_platforms} ppc32-darwin9-gcc" all_platforms="${all_platforms} ppc32-darwin9-gcc"
all_platforms="${all_platforms} ppc32-linux-gcc"
all_platforms="${all_platforms} ppc64-darwin8-gcc" all_platforms="${all_platforms} ppc64-darwin8-gcc"
all_platforms="${all_platforms} ppc64-darwin9-gcc" all_platforms="${all_platforms} ppc64-darwin9-gcc"
all_platforms="${all_platforms} ppc64-linux-gcc" all_platforms="${all_platforms} ppc64-linux-gcc"
all_platforms="${all_platforms} sparc-solaris-gcc"
all_platforms="${all_platforms} x86-darwin8-gcc" all_platforms="${all_platforms} x86-darwin8-gcc"
all_platforms="${all_platforms} x86-darwin8-icc" all_platforms="${all_platforms} x86-darwin8-icc"
all_platforms="${all_platforms} x86-darwin9-gcc" all_platforms="${all_platforms} x86-darwin9-gcc"
all_platforms="${all_platforms} x86-darwin9-icc" all_platforms="${all_platforms} x86-darwin9-icc"
all_platforms="${all_platforms} x86-darwin10-gcc"
all_platforms="${all_platforms} x86-linux-gcc" all_platforms="${all_platforms} x86-linux-gcc"
all_platforms="${all_platforms} x86-linux-icc" all_platforms="${all_platforms} x86-linux-icc"
all_platforms="${all_platforms} x86-solaris-gcc" all_platforms="${all_platforms} x86-solaris-gcc"
all_platforms="${all_platforms} x86-win32-gcc" all_platforms="${all_platforms} x86-win32-gcc"
all_platforms="${all_platforms} x86-win32-vs7" all_platforms="${all_platforms} x86-win32-vs7"
all_platforms="${all_platforms} x86-win32-vs8" all_platforms="${all_platforms} x86-win32-vs8"
all_platforms="${all_platforms} x86-win32-vs9"
all_platforms="${all_platforms} x86_64-darwin9-gcc" all_platforms="${all_platforms} x86_64-darwin9-gcc"
all_platforms="${all_platforms} x86_64-darwin10-gcc"
all_platforms="${all_platforms} x86_64-linux-gcc" all_platforms="${all_platforms} x86_64-linux-gcc"
all_platforms="${all_platforms} x86_64-linux-icc" all_platforms="${all_platforms} x86_64-linux-icc"
all_platforms="${all_platforms} x86_64-solaris-gcc" all_platforms="${all_platforms} x86_64-solaris-gcc"
all_platforms="${all_platforms} x86_64-win64-vs8" all_platforms="${all_platforms} x86_64-win64-vs8"
all_platforms="${all_platforms} x86_64-win64-vs9"
all_platforms="${all_platforms} universal-darwin8-gcc" all_platforms="${all_platforms} universal-darwin8-gcc"
all_platforms="${all_platforms} universal-darwin9-gcc" all_platforms="${all_platforms} universal-darwin9-gcc"
all_platforms="${all_platforms} generic-gnu" all_platforms="${all_platforms} generic-gnu"
@@ -159,7 +150,6 @@ enable fast_unaligned #allow unaligned accesses, if supported by hw
enable md5 enable md5
enable spatial_resampling enable spatial_resampling
enable multithread enable multithread
enable os_support
[ -d ${source_path}/../include ] && enable alt_tree_layout [ -d ${source_path}/../include ] && enable alt_tree_layout
for d in vp8; do for d in vp8; do
@@ -202,7 +192,6 @@ ARCH_EXT_LIST="
sse2 sse2
sse3 sse3
ssse3 ssse3
sse4_1
altivec altivec
" "
@@ -213,7 +202,6 @@ HAVE_LIST="
alt_tree_layout alt_tree_layout
pthread_h pthread_h
sys_mman_h sys_mman_h
dlopen
" "
CONFIG_LIST=" CONFIG_LIST="
external_build external_build
@@ -240,8 +228,10 @@ CONFIG_LIST="
dequant_tokens dequant_tokens
dc_recon dc_recon
new_tokens
runtime_cpu_detect runtime_cpu_detect
postproc postproc
postproc_generic
multithread multithread
psnr psnr
${CODECS} ${CODECS}
@@ -252,10 +242,7 @@ CONFIG_LIST="
spatial_resampling spatial_resampling
realtime_only realtime_only
shared shared
small dixie
opencl
postproc_visualizer
os_support
" "
CMDLINE_SELECT=" CMDLINE_SELECT="
extra_warnings extra_warnings
@@ -275,7 +262,6 @@ CMDLINE_SELECT="
libs libs
examples examples
libc libc
as
fast_unaligned fast_unaligned
codec_srcs codec_srcs
debug_libs debug_libs
@@ -283,7 +269,9 @@ CMDLINE_SELECT="
dequant_tokens dequant_tokens
dc_recon dc_recon
new_tokens
postproc postproc
postproc_generic
multithread multithread
psnr psnr
${CODECS} ${CODECS}
@@ -293,9 +281,7 @@ CMDLINE_SELECT="
spatial_resampling spatial_resampling
realtime_only realtime_only
shared shared
small dixie
opencl
postproc_visualizer
" "
process_cmdline() { process_cmdline() {
@@ -303,7 +289,7 @@ process_cmdline() {
optval="${opt#*=}" optval="${opt#*=}"
case "$opt" in case "$opt" in
--disable-codecs) for c in ${CODECS}; do disable $c; done ;; --disable-codecs) for c in ${CODECS}; do disable $c; done ;;
*) process_common_cmdline "$opt" *) process_common_cmdline $opt
;; ;;
esac esac
done done
@@ -332,6 +318,8 @@ post_process_cmdline() {
for c in ${CODECS}; do for c in ${CODECS}; do
enabled ${c} && enable ${c##*_}s enabled ${c} && enable ${c##*_}s
done done
} }
@@ -382,7 +370,6 @@ process_targets() {
if [ -f "${source_path}/build/make/version.sh" ]; then if [ -f "${source_path}/build/make/version.sh" ]; then
local ver=`"$source_path/build/make/version.sh" --bare $source_path` local ver=`"$source_path/build/make/version.sh" --bare $source_path`
DIST_DIR="${DIST_DIR}-${ver}" DIST_DIR="${DIST_DIR}-${ver}"
VERSION_STRING=${ver}
ver=${ver%%-*} ver=${ver%%-*}
VERSION_PATCH=${ver##*.} VERSION_PATCH=${ver##*.}
ver=${ver%.*} ver=${ver%.*}
@@ -391,8 +378,6 @@ process_targets() {
VERSION_MAJOR=${ver%.*} VERSION_MAJOR=${ver%.*}
fi fi
enabled child || cat <<EOF >> config.mk enabled child || cat <<EOF >> config.mk
PREFIX=${prefix}
ifeq (\$(MAKECMDGOALS),dist) ifeq (\$(MAKECMDGOALS),dist)
DIST_DIR?=${DIST_DIR} DIST_DIR?=${DIST_DIR}
else else
@@ -400,13 +385,10 @@ DIST_DIR?=\$(DESTDIR)${prefix}
endif endif
LIBSUBDIR=${libdir##${prefix}/} LIBSUBDIR=${libdir##${prefix}/}
VERSION_STRING=${VERSION_STRING}
VERSION_MAJOR=${VERSION_MAJOR} VERSION_MAJOR=${VERSION_MAJOR}
VERSION_MINOR=${VERSION_MINOR} VERSION_MINOR=${VERSION_MINOR}
VERSION_PATCH=${VERSION_PATCH} VERSION_PATCH=${VERSION_PATCH}
CONFIGURE_ARGS=${CONFIGURE_ARGS}
EOF EOF
enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk
@@ -430,7 +412,7 @@ process_detect() {
# Can only build shared libs on a subset of platforms. Doing this check # Can only build shared libs on a subset of platforms. Doing this check
# here rather than at option parse time because the target auto-detect # here rather than at option parse time because the target auto-detect
# magic happens after the command line has been parsed. # magic happens after the command line has been parsed.
enabled linux || die "--enable-shared only supported on ELF for now" enabled linux || die "--enable-shared only supported on ELF for now"
fi fi
if [ -z "$CC" ]; then if [ -z "$CC" ]; then
echo "Bypassing toolchain for environment detection." echo "Bypassing toolchain for environment detection."
@@ -496,7 +478,7 @@ process_toolchain() {
check_add_cflags -Wpointer-arith check_add_cflags -Wpointer-arith
check_add_cflags -Wtype-limits check_add_cflags -Wtype-limits
check_add_cflags -Wcast-qual check_add_cflags -Wcast-qual
enabled extra_warnings || check_add_cflags -Wno-unused-function enabled extra_warnings || check_add_cflags -Wno-unused
fi fi
if enabled icc; then if enabled icc; then
@@ -532,7 +514,7 @@ process_toolchain() {
enabled gcc || soft_disable ccache enabled gcc || soft_disable ccache
if enabled mips; then if enabled mips; then
enable dequant_tokens enable dequant_tokens
enable dc_recon enable dc_recon
fi fi
# Enable the postbuild target if building for visual studio. # Enable the postbuild target if building for visual studio.
@@ -541,15 +523,13 @@ process_toolchain() {
enable solution enable solution
vs_version=${tgt_cc##vs} vs_version=${tgt_cc##vs}
all_targets="${all_targets} solution" all_targets="${all_targets} solution"
INLINE=__inline
FORCEINLINE=__forceinline
;; ;;
esac esac
# Other toolchain specific defaults # Other toolchain specific defaults
case $toolchain in x86*|ppc*|universal*) soft_enable postproc;; esac case $toolchain in x86*|ppc*|universal*) soft_enable postproc;; esac
if enabled postproc_visualizer; then
enabled postproc || die "postproc_visualizer requires postproc to be enabled"
fi
} }
@@ -561,6 +541,4 @@ process "$@"
cat <<EOF > ${BUILD_PFX}vpx_config.c cat <<EOF > ${BUILD_PFX}vpx_config.c
static const char* const cfg = "$CONFIGURE_ARGS"; static const char* const cfg = "$CONFIGURE_ARGS";
const char *vpx_codec_build_config(void) {return cfg;} const char *vpx_codec_build_config(void) {return cfg;}
static const char* const libdir = "$libdir";
const char *vpx_codec_lib_dir(void) {return libdir;}
EOF EOF

View File

@@ -1,5 +1,5 @@
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source
@@ -34,8 +34,7 @@ TXT_DOX = $(call enabled,TXT_DOX)
EXAMPLE_PATH += $(SRC_PATH_BARE) #for CHANGELOG, README, etc EXAMPLE_PATH += $(SRC_PATH_BARE) #for CHANGELOG, README, etc
doxyfile: $(if $(findstring examples, $(ALL_TARGETS)),examples.doxy) doxyfile: libs.doxy_template libs.doxy examples.doxy
doxyfile: libs.doxy_template libs.doxy
@echo " [CREATE] $@" @echo " [CREATE] $@"
@cat $^ > $@ @cat $^ > $@
@echo "STRIP_FROM_PATH += $(SRC_PATH_BARE) $(BUILD_ROOT)" >> $@ @echo "STRIP_FROM_PATH += $(SRC_PATH_BARE) $(BUILD_ROOT)" >> $@

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source

View File

@@ -1,5 +1,5 @@
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source
@@ -12,40 +12,19 @@
# List of examples to build. UTILS are files that are taken from the source # List of examples to build. UTILS are files that are taken from the source
# tree directly, and GEN_EXAMPLES are files that are created from the # tree directly, and GEN_EXAMPLES are files that are created from the
# examples folder. # examples folder.
UTILS-$(CONFIG_DECODERS) += vpxdec.c UTILS-$(CONFIG_DECODERS) += ivfdec.c
vpxdec.SRCS += md5_utils.c md5_utils.h ivfdec.SRCS += md5_utils.c md5_utils.h
vpxdec.SRCS += vpx_ports/vpx_timer.h ivfdec.SRCS += vpx_ports/vpx_timer.h
vpxdec.SRCS += vpx/vpx_integer.h ivfdec.SRCS += vpx/vpx_integer.h
vpxdec.SRCS += args.c args.h vpx_ports/config.h ivfdec.SRCS += args.c args.h vpx_ports/config.h
vpxdec.SRCS += tools_common.c tools_common.h ivfdec.GUID = BA5FE66F-38DD-E034-F542-B1578C5FB950
vpxdec.SRCS += nestegg/halloc/halloc.h ivfdec.DESCRIPTION = Full featured decoder
vpxdec.SRCS += nestegg/halloc/src/align.h UTILS-$(CONFIG_ENCODERS) += ivfenc.c
vpxdec.SRCS += nestegg/halloc/src/halloc.c ivfenc.SRCS += args.c args.h y4minput.c y4minput.h
vpxdec.SRCS += nestegg/halloc/src/hlist.h ivfenc.SRCS += vpx_ports/config.h vpx_ports/mem_ops.h
vpxdec.SRCS += nestegg/halloc/src/macros.h ivfenc.SRCS += vpx_ports/mem_ops_aligned.h
vpxdec.SRCS += nestegg/include/nestegg/nestegg.h ivfenc.GUID = 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
vpxdec.SRCS += nestegg/src/nestegg.c ivfenc.DESCRIPTION = Full featured encoder
vpxdec.GUID = BA5FE66F-38DD-E034-F542-B1578C5FB950
vpxdec.DESCRIPTION = Full featured decoder
UTILS-$(CONFIG_ENCODERS) += vpxenc.c
vpxenc.SRCS += args.c args.h y4minput.c y4minput.h
vpxenc.SRCS += tools_common.c tools_common.h
vpxenc.SRCS += vpx_ports/config.h vpx_ports/mem_ops.h
vpxenc.SRCS += vpx_ports/mem_ops_aligned.h
vpxenc.SRCS += libmkv/EbmlIDs.h
vpxenc.SRCS += libmkv/EbmlWriter.c
vpxenc.SRCS += libmkv/EbmlWriter.h
vpxenc.GUID = 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
vpxenc.DESCRIPTION = Full featured encoder
# Clean up old ivfenc, ivfdec binaries.
ifeq ($(CONFIG_MSVS),yes)
CLEAN-OBJS += $(foreach p,$(VS_PLATFORMS),$(p)/Release/ivfenc.exe)
CLEAN-OBJS += $(foreach p,$(VS_PLATFORMS),$(p)/Release/ivfdec.exe)
else
CLEAN-OBJS += ivfenc{.c.o,.c.d,.dox,.exe,}
CLEAN-OBJS += ivfdec{.c.o,.c.d,.dox,.exe,}
endif
# XMA example disabled for now, not used in VP8 # XMA example disabled for now, not used in VP8
#UTILS-$(CONFIG_DECODERS) += example_xma.c #UTILS-$(CONFIG_DECODERS) += example_xma.c
@@ -93,16 +72,8 @@ vp8cx_set_ref.DESCRIPTION = VP8 set encoder reference frame
# Handle extra library flags depending on codec configuration # Handle extra library flags depending on codec configuration
# We should not link to math library (libm) on RVCT
# when building for bare-metal targets
ifeq ($(CONFIG_OS_SUPPORT), yes)
CODEC_EXTRA_LIBS-$(CONFIG_VP8) += m CODEC_EXTRA_LIBS-$(CONFIG_VP8) += m
else
ifeq ($(CONFIG_GCC), yes)
CODEC_EXTRA_LIBS-$(CONFIG_VP8) += m
endif
endif
# #
# End of specified files. The rest of the build rules should happen # End of specified files. The rest of the build rules should happen
# automagically from here. # automagically from here.

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
@@ -19,7 +19,7 @@
#define VPX_CODEC_DISABLE_COMPAT 1 #define VPX_CODEC_DISABLE_COMPAT 1
#include "vpx/vpx_decoder.h" #include "vpx/vpx_decoder.h"
#include "vpx/vp8dx.h" #include "vpx/vp8dx.h"
#define interface (vpx_codec_vp8_dx()) #define interface (&vpx_codec_vp8_dx_algo)
@EXTRA_INCLUDES @EXTRA_INCLUDES
@@ -61,8 +61,8 @@ int main(int argc, char **argv) {
die("Failed to open %s for writing", argv[2]); die("Failed to open %s for writing", argv[2]);
/* Read file header */ /* Read file header */
if(!(fread(file_hdr, 1, IVF_FILE_HDR_SZ, infile) == IVF_FILE_HDR_SZ fread(file_hdr, 1, IVF_FILE_HDR_SZ, infile);
&& file_hdr[0]=='D' && file_hdr[1]=='K' && file_hdr[2]=='I' if(!(file_hdr[0]=='D' && file_hdr[1]=='K' && file_hdr[2]=='I'
&& file_hdr[3]=='F')) && file_hdr[3]=='F'))
die("%s is not an IVF file.", argv[1]); die("%s is not an IVF file.", argv[1]);

View File

@@ -2,7 +2,7 @@
#define VPX_CODEC_DISABLE_COMPAT 1 #define VPX_CODEC_DISABLE_COMPAT 1
#include "vpx/vpx_decoder.h" #include "vpx/vpx_decoder.h"
#include "vpx/vp8dx.h" #include "vpx/vp8dx.h"
#define interface (vpx_codec_vp8_dx()) #define interface (&vpx_codec_vp8_dx_algo)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INCLUDES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INCLUDES
@@ -48,7 +48,7 @@ for(plane=0; plane < 3; plane++) {
unsigned char *buf =img->planes[plane]; unsigned char *buf =img->planes[plane];
for(y=0; y<img->d_h >> (plane?1:0); y++) { for(y=0; y<img->d_h >> (plane?1:0); y++) {
if(fwrite(buf, 1, img->d_w >> (plane?1:0), outfile)); fwrite(buf, 1, img->d_w >> (plane?1:0), outfile);
buf += img->stride[plane]; buf += img->stride[plane];
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
@@ -19,7 +19,7 @@
#define VPX_CODEC_DISABLE_COMPAT 1 #define VPX_CODEC_DISABLE_COMPAT 1
#include "vpx/vpx_encoder.h" #include "vpx/vpx_encoder.h"
#include "vpx/vp8cx.h" #include "vpx/vp8cx.h"
#define interface (vpx_codec_vp8_cx()) #define interface (&vpx_codec_vp8_cx_algo)
#define fourcc 0x30385056 #define fourcc 0x30385056
@EXTRA_INCLUDES @EXTRA_INCLUDES
@@ -85,7 +85,7 @@ static void write_ivf_file_header(FILE *outfile,
mem_put_le32(header+24, frame_cnt); /* length */ mem_put_le32(header+24, frame_cnt); /* length */
mem_put_le32(header+28, 0); /* unused */ mem_put_le32(header+28, 0); /* unused */
if(fwrite(header, 1, 32, outfile)); fwrite(header, 1, 32, outfile);
} }
@@ -103,7 +103,7 @@ static void write_ivf_frame_header(FILE *outfile,
mem_put_le32(header+4, pts&0xFFFFFFFF); mem_put_le32(header+4, pts&0xFFFFFFFF);
mem_put_le32(header+8, pts >> 32); mem_put_le32(header+8, pts >> 32);
if(fwrite(header, 1, 12, outfile)); fwrite(header, 1, 12, outfile);
} }
int main(int argc, char **argv) { int main(int argc, char **argv) {

View File

@@ -2,7 +2,7 @@
#define VPX_CODEC_DISABLE_COMPAT 1 #define VPX_CODEC_DISABLE_COMPAT 1
#include "vpx/vpx_encoder.h" #include "vpx/vpx_encoder.h"
#include "vpx/vp8cx.h" #include "vpx/vp8cx.h"
#define interface (vpx_codec_vp8_cx()) #define interface (&vpx_codec_vp8_cx_algo)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_INCLUDES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_INCLUDES
@@ -61,8 +61,8 @@ if(vpx_codec_encode(&codec, frame_avail? &raw : NULL, frame_cnt,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_FRAME ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_FRAME
case VPX_CODEC_CX_FRAME_PKT: case VPX_CODEC_CX_FRAME_PKT:
write_ivf_frame_header(outfile, pkt); write_ivf_frame_header(outfile, pkt);
if(fwrite(pkt->data.frame.buf, 1, pkt->data.frame.sz, fwrite(pkt->data.frame.buf, 1, pkt->data.frame.sz,
outfile)); outfile);
break; break;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_FRAME ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_FRAME

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env php #!/usr/bin/env php
/* /*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source

View File

@@ -33,7 +33,7 @@ Initializing The Codec
---------------------- ----------------------
The decoder is initialized by the following code. This is an example for The decoder is initialized by the following code. This is an example for
the VP8 decoder, but the code is analogous for all algorithms. Replace the VP8 decoder, but the code is analogous for all algorithms. Replace
`vpx_codec_vp8_dx()` with a pointer to the interface exposed by the `&vpx_codec_vp8_dx_algo` with a pointer to the interface exposed by the
algorithm you want to use. The `cfg` argument is left as NULL in this algorithm you want to use. The `cfg` argument is left as NULL in this
example, because we want the algorithm to determine the stream example, because we want the algorithm to determine the stream
configuration (width/height) and allocate memory automatically. This configuration (width/height) and allocate memory automatically. This

View File

@@ -78,8 +78,8 @@ if(frame_cnt + 1 == 22) {
} else if(frame_cnt + 1 == 44) { } else if(frame_cnt + 1 == 44) {
vpx_active_map_t active; vpx_active_map_t active;
active.rows = cfg.g_h/16; active.rows = 240/16;
active.cols = cfg.g_w/16; active.cols = 320/16;
/* pass in null map to disable active_map*/ /* pass in null map to disable active_map*/
active.active_map = NULL; active.active_map = NULL;

647
ivfdec.c Normal file
View File

@@ -0,0 +1,647 @@
/*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
/* This is a simple program that reads ivf files and decodes them
* using the new interface. Decoded frames are output as YV12 raw.
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#define VPX_CODEC_DISABLE_COMPAT 1
#include "vpx_config.h"
#include "vpx/vpx_decoder.h"
#include "vpx_ports/vpx_timer.h"
#if CONFIG_VP8_DECODER
#include "vpx/vp8dx.h"
#endif
#if CONFIG_MD5
#include "md5_utils.h"
#endif
static const char *exec_name;
#if CONFIG_DIXIE
extern vpx_codec_iface_t vpx_codec_vp8_dixie_algo;
#endif
static const struct
{
char const *name;
const vpx_codec_iface_t *iface;
unsigned int fourcc;
unsigned int fourcc_mask;
} ifaces[] =
{
#if CONFIG_VP8_DECODER
{"vp8", &vpx_codec_vp8_dx_algo, 0x00385056, 0x00FFFFFF},
#endif
#if CONFIG_DIXIE
{"dixie", &vpx_codec_vp8_dixie_algo, 0x00385056, 0x00FFFFFF},
#endif
};
#include "args.h"
static const arg_def_t codecarg = ARG_DEF(NULL, "codec", 1,
"Codec to use");
static const arg_def_t prefixarg = ARG_DEF("p", "prefix", 1,
"Prefix to use when saving frames");
static const arg_def_t use_yv12 = ARG_DEF(NULL, "yv12", 0,
"Output file is YV12 ");
static const arg_def_t use_i420 = ARG_DEF(NULL, "i420", 0,
"Output file is I420 (default)");
static const arg_def_t flipuvarg = ARG_DEF(NULL, "flipuv", 0,
"Synonym for --yv12");
static const arg_def_t noblitarg = ARG_DEF(NULL, "noblit", 0,
"Don't process the decoded frames");
static const arg_def_t progressarg = ARG_DEF(NULL, "progress", 0,
"Show progress after each frame decodes");
static const arg_def_t limitarg = ARG_DEF(NULL, "limit", 1,
"Stop decoding after n frames");
static const arg_def_t postprocarg = ARG_DEF(NULL, "postproc", 0,
"Postprocess decoded frames");
static const arg_def_t summaryarg = ARG_DEF(NULL, "summary", 0,
"Show timing summary");
static const arg_def_t outputfile = ARG_DEF("o", "output", 1,
"Output raw yv12 file instead of images");
static const arg_def_t usey4marg = ARG_DEF("y", "y4m", 0,
"Output file is YUV4MPEG2");
static const arg_def_t threadsarg = ARG_DEF("t", "threads", 1,
"Max threads to use");
static const arg_def_t quietarg = ARG_DEF("q", "quiet", 0,
"Suppress version string");
#if CONFIG_MD5
static const arg_def_t md5arg = ARG_DEF(NULL, "md5", 0,
"Compute the MD5 sum of the decoded frame");
#endif
static const arg_def_t *all_args[] =
{
&codecarg, &prefixarg, &use_yv12, &use_i420, &flipuvarg, &noblitarg,
&progressarg, &limitarg, &postprocarg, &summaryarg, &outputfile,
&usey4marg, &threadsarg, &quietarg,
#if CONFIG_MD5
&md5arg,
#endif
NULL
};
#if CONFIG_VP8_DECODER
static const arg_def_t addnoise_level = ARG_DEF(NULL, "noise-level", 1,
"Enable VP8 postproc add noise");
static const arg_def_t deblock = ARG_DEF(NULL, "deblock", 0,
"Enable VP8 deblocking");
static const arg_def_t demacroblock_level = ARG_DEF(NULL, "demacroblock-level", 1,
"Enable VP8 demacroblocking, w/ level");
static const arg_def_t pp_debug_info = ARG_DEF(NULL, "pp-debug-info", 1,
"Enable VP8 visible debug info");
static const arg_def_t *vp8_pp_args[] =
{
&addnoise_level, &deblock, &demacroblock_level, &pp_debug_info,
NULL
};
#endif
static void usage_exit()
{
int i;
fprintf(stderr, "Usage: %s <options> filename\n\n"
"Options:\n", exec_name);
arg_show_usage(stderr, all_args);
#if CONFIG_VP8_DECODER
fprintf(stderr, "\nvp8 Postprocessing Options:\n");
arg_show_usage(stderr, vp8_pp_args);
#endif
fprintf(stderr, "\nIncluded decoders:\n\n");
for (i = 0; i < sizeof(ifaces) / sizeof(ifaces[0]); i++)
fprintf(stderr, " %-6s - %s\n",
ifaces[i].name,
vpx_codec_iface_name(ifaces[i].iface));
exit(EXIT_FAILURE);
}
void die(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
fprintf(stderr, "\n");
usage_exit();
}
static unsigned int mem_get_le16(const void *vmem)
{
unsigned int val;
const unsigned char *mem = (const unsigned char *)vmem;
val = mem[1] << 8;
val |= mem[0];
return val;
}
static unsigned int mem_get_le32(const void *vmem)
{
unsigned int val;
const unsigned char *mem = (const unsigned char *)vmem;
val = mem[3] << 24;
val |= mem[2] << 16;
val |= mem[1] << 8;
val |= mem[0];
return val;
}
#define IVF_FRAME_HDR_SZ (sizeof(uint32_t) + sizeof(uint64_t))
#define RAW_FRAME_HDR_SZ (sizeof(uint32_t))
static int read_frame(FILE *infile,
uint8_t **buf,
uint32_t *buf_sz,
uint32_t *buf_alloc_sz,
int is_ivf)
{
char raw_hdr[IVF_FRAME_HDR_SZ];
uint32_t new_buf_sz;
/* For both the raw and ivf formats, the frame size is the first 4 bytes
* of the frame header. We just need to special case on the header
* size.
*/
if (fread(raw_hdr, is_ivf ? IVF_FRAME_HDR_SZ : RAW_FRAME_HDR_SZ, 1,
infile) != 1)
{
if (!feof(infile))
fprintf(stderr, "Failed to read frame size\n");
new_buf_sz = 0;
}
else
{
new_buf_sz = mem_get_le32(raw_hdr);
if (new_buf_sz > 256 * 1024 * 1024)
{
fprintf(stderr, "Error: Read invalid frame size (%u)\n",
new_buf_sz);
new_buf_sz = 0;
}
if (!is_ivf && new_buf_sz > 256 * 1024)
fprintf(stderr, "Warning: Read invalid frame size (%u)"
" - not a raw file?\n", new_buf_sz);
if (new_buf_sz > *buf_alloc_sz)
{
uint8_t *new_buf = realloc(*buf, 2 * new_buf_sz);
if (new_buf)
{
*buf = new_buf;
*buf_alloc_sz = 2 * new_buf_sz;
}
else
{
fprintf(stderr, "Failed to allocate compressed data buffer\n");
new_buf_sz = 0;
}
}
}
*buf_sz = new_buf_sz;
if (*buf_sz)
{
if (fread(*buf, 1, *buf_sz, infile) != *buf_sz)
{
fprintf(stderr, "Failed to read full frame\n");
return 1;
}
return 0;
}
return 1;
}
void *out_open(const char *out_fn, int do_md5)
{
void *out = NULL;
if (do_md5)
{
#if CONFIG_MD5
MD5Context *md5_ctx = out = malloc(sizeof(MD5Context));
(void)out_fn;
MD5Init(md5_ctx);
#endif
}
else
{
FILE *outfile = out = strcmp("-", out_fn) ? fopen(out_fn, "wb") : stdout;
if (!outfile)
{
fprintf(stderr, "Failed to output file");
exit(EXIT_FAILURE);
}
}
return out;
}
void out_put(void *out, const uint8_t *buf, unsigned int len, int do_md5)
{
if (do_md5)
{
#if CONFIG_MD5
MD5Update(out, buf, len);
#endif
}
else
{
fwrite(buf, 1, len, out);
}
}
void out_close(void *out, const char *out_fn, int do_md5)
{
if (do_md5)
{
#if CONFIG_MD5
uint8_t md5[16];
int i;
MD5Final(md5, out);
free(out);
for (i = 0; i < 16; i++)
printf("%02x", md5[i]);
printf(" %s\n", out_fn);
#endif
}
else
{
fclose(out);
}
}
unsigned int file_is_ivf(FILE *infile,
unsigned int *fourcc,
unsigned int *width,
unsigned int *height,
unsigned int *timebase_num,
unsigned int *timebase_den)
{
char raw_hdr[32];
int is_ivf = 0;
if (fread(raw_hdr, 1, 32, infile) == 32)
{
if (raw_hdr[0] == 'D' && raw_hdr[1] == 'K'
&& raw_hdr[2] == 'I' && raw_hdr[3] == 'F')
{
is_ivf = 1;
if (mem_get_le16(raw_hdr + 4) != 0)
fprintf(stderr, "Error: Unrecognized IVF version! This file may not"
" decode properly.");
*fourcc = mem_get_le32(raw_hdr + 8);
*width = mem_get_le16(raw_hdr + 12);
*height = mem_get_le16(raw_hdr + 14);
*timebase_den = mem_get_le32(raw_hdr + 16);
*timebase_num = mem_get_le32(raw_hdr + 20);
}
}
if (!is_ivf)
rewind(infile);
return is_ivf;
}
int main(int argc, const char **argv_)
{
vpx_codec_ctx_t decoder;
char *prefix = NULL, *fn = NULL;
int i;
uint8_t *buf = NULL;
uint32_t buf_sz = 0, buf_alloc_sz = 0;
FILE *infile;
int frame_in = 0, frame_out = 0, flipuv = 0, noblit = 0, do_md5 = 0, progress = 0;
int stop_after = 0, postproc = 0, summary = 0, quiet = 0;
vpx_codec_iface_t *iface = NULL;
unsigned int is_ivf, fourcc;
unsigned long dx_time = 0;
struct arg arg;
char **argv, **argi, **argj;
const char *fn2 = 0;
int use_y4m = 0;
unsigned int width;
unsigned int height;
unsigned int timebase_num;
unsigned int timebase_den;
void *out = NULL;
vpx_codec_dec_cfg_t cfg = {0};
#if CONFIG_VP8_DECODER
vp8_postproc_cfg_t vp8_pp_cfg = {0};
#endif
/* Parse command line */
exec_name = argv_[0];
argv = argv_dup(argc - 1, argv_ + 1);
for (argi = argj = argv; (*argj = *argi); argi += arg.argv_step)
{
memset(&arg, 0, sizeof(arg));
arg.argv_step = 1;
if (arg_match(&arg, &codecarg, argi))
{
int j, k = -1;
for (j = 0; j < sizeof(ifaces) / sizeof(ifaces[0]); j++)
if (!strcmp(ifaces[j].name, arg.val))
k = j;
if (k >= 0)
iface = ifaces[k].iface;
else
die("Error: Unrecognized argument (%s) to --codec\n",
arg.val);
}
else if (arg_match(&arg, &outputfile, argi))
fn2 = arg.val;
else if (arg_match(&arg, &usey4marg, argi))
use_y4m = 1;
else if (arg_match(&arg, &prefixarg, argi))
prefix = strdup(arg.val);
else if (arg_match(&arg, &use_yv12, argi))
flipuv = 1;
else if (arg_match(&arg, &use_i420, argi))
flipuv = 0;
else if (arg_match(&arg, &flipuvarg, argi))
flipuv = 1;
else if (arg_match(&arg, &noblitarg, argi))
noblit = 1;
else if (arg_match(&arg, &progressarg, argi))
progress = 1;
else if (arg_match(&arg, &limitarg, argi))
stop_after = arg_parse_uint(&arg);
else if (arg_match(&arg, &postprocarg, argi))
postproc = 1;
else if (arg_match(&arg, &md5arg, argi))
do_md5 = 1;
else if (arg_match(&arg, &summaryarg, argi))
summary = 1;
else if (arg_match(&arg, &threadsarg, argi))
cfg.threads = arg_parse_uint(&arg);
else if (arg_match(&arg, &quietarg, argi))
quiet = 1;
#if CONFIG_VP8_DECODER
else if (arg_match(&arg, &addnoise_level, argi))
{
postproc = 1;
vp8_pp_cfg.post_proc_flag |= VP8_ADDNOISE;
vp8_pp_cfg.noise_level = arg_parse_uint(&arg);
}
else if (arg_match(&arg, &demacroblock_level, argi))
{
postproc = 1;
vp8_pp_cfg.post_proc_flag |= VP8_DEMACROBLOCK;
vp8_pp_cfg.deblocking_level = arg_parse_uint(&arg);
}
else if (arg_match(&arg, &deblock, argi))
{
postproc = 1;
vp8_pp_cfg.post_proc_flag |= VP8_DEBLOCK;
}
else if (arg_match(&arg, &pp_debug_info, argi))
{
unsigned int level = arg_parse_uint(&arg);
postproc = 1;
vp8_pp_cfg.post_proc_flag &= ~0x7;
if (level)
vp8_pp_cfg.post_proc_flag |= 8 << (level - 1);
}
#endif
else
argj++;
}
/* Check for unrecognized options */
for (argi = argv; *argi; argi++)
if (argi[0][0] == '-' && strlen(argi[0]) > 1)
die("Error: Unrecognized option %s\n", *argi);
/* Handle non-option arguments */
fn = argv[0];
if (!fn)
usage_exit();
if (!prefix)
prefix = strdup("img");
/* Open file */
infile = strcmp(fn, "-") ? fopen(fn, "rb") : stdin;
if (!infile)
{
fprintf(stderr, "Failed to open file");
return EXIT_FAILURE;
}
if (fn2)
out = out_open(fn2, do_md5);
is_ivf = file_is_ivf(infile, &fourcc, &width, &height,
&timebase_num, &timebase_den);
if (is_ivf)
{
if (use_y4m)
{
char buffer[128];
if (!fn2)
{
fprintf(stderr, "YUV4MPEG2 output only supported with -o.\n");
return EXIT_FAILURE;
}
/*Correct for the factor of 2 applied to the timebase in the
encoder.*/
if(timebase_den&1)timebase_num<<=1;
else timebase_den>>=1;
/*Note: We can't output an aspect ratio here because IVF doesn't
store one, and neither does VP8.
That will have to wait until these tools support WebM natively.*/
sprintf(buffer, "YUV4MPEG2 C%s W%u H%u F%u:%u I%c\n",
"420jpeg", width, height, timebase_den, timebase_num, 'p');
out_put(out, (unsigned char *)buffer, strlen(buffer), do_md5);
}
/* Try to determine the codec from the fourcc. */
for (i = 0; i < sizeof(ifaces) / sizeof(ifaces[0]); i++)
if ((fourcc & ifaces[i].fourcc_mask) == ifaces[i].fourcc)
{
vpx_codec_iface_t *ivf_iface = ifaces[i].iface;
if (iface && iface != ivf_iface)
fprintf(stderr, "Notice -- IVF header indicates codec: %s\n",
ifaces[i].name);
else
iface = ivf_iface;
break;
}
}
else if(use_y4m)
{
fprintf(stderr, "YUV4MPEG2 output only supported from IVF input.\n");
return EXIT_FAILURE;
}
if (vpx_codec_dec_init(&decoder, iface ? iface : ifaces[0].iface, &cfg,
postproc ? VPX_CODEC_USE_POSTPROC : 0))
{
fprintf(stderr, "Failed to initialize decoder: %s\n", vpx_codec_error(&decoder));
return EXIT_FAILURE;
}
if (!quiet)
fprintf(stderr, "%s\n", decoder.name);
#if CONFIG_VP8_DECODER
if (vp8_pp_cfg.post_proc_flag
&& vpx_codec_control(&decoder, VP8_SET_POSTPROC, &vp8_pp_cfg))
{
fprintf(stderr, "Failed to configure postproc: %s\n", vpx_codec_error(&decoder));
return EXIT_FAILURE;
}
#endif
/* Decode file */
while (!read_frame(infile, &buf, &buf_sz, &buf_alloc_sz, is_ivf))
{
vpx_codec_iter_t iter = NULL;
vpx_image_t *img;
struct vpx_usec_timer timer;
vpx_usec_timer_start(&timer);
if (vpx_codec_decode(&decoder, buf, buf_sz, NULL, 0))
{
const char *detail = vpx_codec_error_detail(&decoder);
fprintf(stderr, "Failed to decode frame: %s\n", vpx_codec_error(&decoder));
if (detail)
fprintf(stderr, " Additional information: %s\n", detail);
goto fail;
}
vpx_usec_timer_mark(&timer);
dx_time += vpx_usec_timer_elapsed(&timer);
++frame_in;
if (progress)
fprintf(stderr, "decoded frame %d.\n", frame_in);
if ((img = vpx_codec_get_frame(&decoder, &iter)))
++frame_out;
if (!noblit)
{
if (img)
{
unsigned int y;
char out_fn[128+24];
uint8_t *buf;
const char *sfx = flipuv ? "yv12" : "i420";
if (!fn2)
{
sprintf(out_fn, "%s-%dx%d-%04d.%s",
prefix, img->d_w, img->d_h, frame_in, sfx);
out = out_open(out_fn, do_md5);
}
else if(use_y4m)
out_put(out, (unsigned char *)"FRAME\n", 6, do_md5);
buf = img->planes[VPX_PLANE_Y];
for (y = 0; y < img->d_h; y++)
{
out_put(out, buf, img->d_w, do_md5);
buf += img->stride[VPX_PLANE_Y];
}
buf = img->planes[flipuv?VPX_PLANE_V:VPX_PLANE_U];
for (y = 0; y < (1 + img->d_h) / 2; y++)
{
out_put(out, buf, (1 + img->d_w) / 2, do_md5);
buf += img->stride[VPX_PLANE_U];
}
buf = img->planes[flipuv?VPX_PLANE_U:VPX_PLANE_V];
for (y = 0; y < (1 + img->d_h) / 2; y++)
{
out_put(out, buf, (1 + img->d_w) / 2, do_md5);
buf += img->stride[VPX_PLANE_V];
}
if (!fn2)
out_close(out, out_fn, do_md5);
}
}
if (stop_after && frame_in >= stop_after)
break;
}
if (summary)
{
fprintf(stderr, "%d decoded frames/%d showed frames in %lu us (%.2f fps)\n",
frame_in, frame_out, dx_time, (float)frame_out * 1000000.0 / (float)dx_time);
}
fail:
if (vpx_codec_destroy(&decoder))
{
fprintf(stderr, "Failed to destroy decoder: %s\n", vpx_codec_error(&decoder));
return EXIT_FAILURE;
}
if (fn2)
out_close(out, fn2, do_md5);
free(buf);
fclose(infile);
free(prefix);
free(argv);
return EXIT_SUCCESS;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,60 +0,0 @@
//#include <strmif.h>
#include "EbmlBufferWriter.h"
#include "EbmlWriter.h"
//#include <cassert>
//#include <limits>
//#include <malloc.h> //_alloca
#include <stdlib.h>
#include <wchar.h>
#include <string.h>
void Ebml_Write(EbmlGlobal *glob, const void *buffer_in, unsigned long len)
{
unsigned char *src = glob->buf;
src += glob->offset;
memcpy(src, buffer_in, len);
glob->offset += len;
}
static void _Serialize(EbmlGlobal *glob, const unsigned char *p, const unsigned char *q)
{
while (q != p)
{
--q;
unsigned long cbWritten;
memcpy(&(glob->buf[glob->offset]), q, 1);
glob->offset ++;
}
}
void Ebml_Serialize(EbmlGlobal *glob, const void *buffer_in, unsigned long len)
{
//assert(buf);
const unsigned char *const p = (const unsigned char *)(buffer_in);
const unsigned char *const q = p + len;
_Serialize(glob, p, q);
}
void Ebml_StartSubElement(EbmlGlobal *glob, EbmlLoc *ebmlLoc, unsigned long class_id)
{
Ebml_WriteID(glob, class_id);
ebmlLoc->offset = glob->offset;
//todo this is always taking 8 bytes, this may need later optimization
unsigned long long unknownLen = 0x01FFFFFFFFFFFFFFLLU;
Ebml_Serialize(glob, (void *)&unknownLen, 8); //this is a key that says lenght unknown
}
void Ebml_EndSubElement(EbmlGlobal *glob, EbmlLoc *ebmlLoc)
{
unsigned long long size = glob->offset - ebmlLoc->offset - 8;
unsigned long long curOffset = glob->offset;
glob->offset = ebmlLoc->offset;
size |= 0x0100000000000000LLU;
Ebml_Serialize(glob, &size, 8);
glob->offset = curOffset;
}

View File

@@ -1,21 +0,0 @@
#ifndef EBMLBUFFERWRITER_HPP
#define EBMLBUFFERWRITER_HPP
typedef struct
{
unsigned long long offset;
} EbmlLoc;
typedef struct
{
unsigned char *buf;
unsigned int length;
unsigned int offset;
} EbmlGlobal;
void Ebml_StartSubElement(EbmlGlobal *glob, EbmlLoc *ebmlLoc, unsigned long class_id);
void Ebml_EndSubElement(EbmlGlobal *glob, EbmlLoc *ebmlLoc);
#endif

View File

@@ -1,231 +0,0 @@
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree. An additional intellectual property rights grant can be found
// in the file PATENTS. All contributing project authors may
// be found in the AUTHORS file in the root of the source tree.
#ifndef MKV_DEFS_HPP
#define MKV_DEFS_HPP 1
//Commenting out values not available in webm, but available in matroska
enum mkv
{
EBML = 0x1A45DFA3,
EBMLVersion = 0x4286,
EBMLReadVersion = 0x42F7,
EBMLMaxIDLength = 0x42F2,
EBMLMaxSizeLength = 0x42F3,
DocType = 0x4282,
DocTypeVersion = 0x4287,
DocTypeReadVersion = 0x4285,
// CRC_32 = 0xBF,
Void = 0xEC,
SignatureSlot = 0x1B538667,
SignatureAlgo = 0x7E8A,
SignatureHash = 0x7E9A,
SignaturePublicKey = 0x7EA5,
Signature = 0x7EB5,
SignatureElements = 0x7E5B,
SignatureElementList = 0x7E7B,
SignedElement = 0x6532,
//segment
Segment = 0x18538067,
//Meta Seek Information
SeekHead = 0x114D9B74,
Seek = 0x4DBB,
SeekID = 0x53AB,
SeekPosition = 0x53AC,
//Segment Information
Info = 0x1549A966,
// SegmentUID = 0x73A4,
// SegmentFilename = 0x7384,
// PrevUID = 0x3CB923,
// PrevFilename = 0x3C83AB,
// NextUID = 0x3EB923,
// NextFilename = 0x3E83BB,
// SegmentFamily = 0x4444,
// ChapterTranslate = 0x6924,
// ChapterTranslateEditionUID = 0x69FC,
// ChapterTranslateCodec = 0x69BF,
// ChapterTranslateID = 0x69A5,
TimecodeScale = 0x2AD7B1,
Segment_Duration = 0x4489,
DateUTC = 0x4461,
// Title = 0x7BA9,
MuxingApp = 0x4D80,
WritingApp = 0x5741,
//Cluster
Cluster = 0x1F43B675,
Timecode = 0xE7,
// SilentTracks = 0x5854,
// SilentTrackNumber = 0x58D7,
// Position = 0xA7,
PrevSize = 0xAB,
BlockGroup = 0xA0,
Block = 0xA1,
// BlockVirtual = 0xA2,
// BlockAdditions = 0x75A1,
// BlockMore = 0xA6,
// BlockAddID = 0xEE,
// BlockAdditional = 0xA5,
BlockDuration = 0x9B,
// ReferencePriority = 0xFA,
ReferenceBlock = 0xFB,
// ReferenceVirtual = 0xFD,
// CodecState = 0xA4,
// Slices = 0x8E,
// TimeSlice = 0xE8,
LaceNumber = 0xCC,
// FrameNumber = 0xCD,
// BlockAdditionID = 0xCB,
// MkvDelay = 0xCE,
// Cluster_Duration = 0xCF,
SimpleBlock = 0xA3,
// EncryptedBlock = 0xAF,
//Track
Tracks = 0x1654AE6B,
TrackEntry = 0xAE,
TrackNumber = 0xD7,
TrackUID = 0x73C5,
TrackType = 0x83,
FlagEnabled = 0xB9,
FlagDefault = 0x88,
FlagForced = 0x55AA,
FlagLacing = 0x9C,
// MinCache = 0x6DE7,
// MaxCache = 0x6DF8,
DefaultDuration = 0x23E383,
// TrackTimecodeScale = 0x23314F,
// TrackOffset = 0x537F,
// MaxBlockAdditionID = 0x55EE,
Name = 0x536E,
Language = 0x22B59C,
CodecID = 0x86,
CodecPrivate = 0x63A2,
CodecName = 0x258688,
// AttachmentLink = 0x7446,
// CodecSettings = 0x3A9697,
// CodecInfoURL = 0x3B4040,
// CodecDownloadURL = 0x26B240,
// CodecDecodeAll = 0xAA,
// TrackOverlay = 0x6FAB,
// TrackTranslate = 0x6624,
// TrackTranslateEditionUID = 0x66FC,
// TrackTranslateCodec = 0x66BF,
// TrackTranslateTrackID = 0x66A5,
//video
Video = 0xE0,
FlagInterlaced = 0x9A,
// StereoMode = 0x53B8,
PixelWidth = 0xB0,
PixelHeight = 0xBA,
PixelCropBottom = 0x54AA,
PixelCropTop = 0x54BB,
PixelCropLeft = 0x54CC,
PixelCropRight = 0x54DD,
DisplayWidth = 0x54B0,
DisplayHeight = 0x54BA,
DisplayUnit = 0x54B2,
AspectRatioType = 0x54B3,
// ColourSpace = 0x2EB524,
// GammaValue = 0x2FB523,
FrameRate = 0x2383E3,
//end video
//audio
Audio = 0xE1,
SamplingFrequency = 0xB5,
OutputSamplingFrequency = 0x78B5,
Channels = 0x9F,
// ChannelPositions = 0x7D7B,
BitDepth = 0x6264,
//end audio
//content encoding
// ContentEncodings = 0x6d80,
// ContentEncoding = 0x6240,
// ContentEncodingOrder = 0x5031,
// ContentEncodingScope = 0x5032,
// ContentEncodingType = 0x5033,
// ContentCompression = 0x5034,
// ContentCompAlgo = 0x4254,
// ContentCompSettings = 0x4255,
// ContentEncryption = 0x5035,
// ContentEncAlgo = 0x47e1,
// ContentEncKeyID = 0x47e2,
// ContentSignature = 0x47e3,
// ContentSigKeyID = 0x47e4,
// ContentSigAlgo = 0x47e5,
// ContentSigHashAlgo = 0x47e6,
//end content encoding
//Cueing Data
Cues = 0x1C53BB6B,
CuePoint = 0xBB,
CueTime = 0xB3,
CueTrackPositions = 0xB7,
CueTrack = 0xF7,
CueClusterPosition = 0xF1,
CueBlockNumber = 0x5378,
// CueCodecState = 0xEA,
// CueReference = 0xDB,
// CueRefTime = 0x96,
// CueRefCluster = 0x97,
// CueRefNumber = 0x535F,
// CueRefCodecState = 0xEB,
//Attachment
// Attachments = 0x1941A469,
// AttachedFile = 0x61A7,
// FileDescription = 0x467E,
// FileName = 0x466E,
// FileMimeType = 0x4660,
// FileData = 0x465C,
// FileUID = 0x46AE,
// FileReferral = 0x4675,
//Chapters
// Chapters = 0x1043A770,
// EditionEntry = 0x45B9,
// EditionUID = 0x45BC,
// EditionFlagHidden = 0x45BD,
// EditionFlagDefault = 0x45DB,
// EditionFlagOrdered = 0x45DD,
// ChapterAtom = 0xB6,
// ChapterUID = 0x73C4,
// ChapterTimeStart = 0x91,
// ChapterTimeEnd = 0x92,
// ChapterFlagHidden = 0x98,
// ChapterFlagEnabled = 0x4598,
// ChapterSegmentUID = 0x6E67,
// ChapterSegmentEditionUID = 0x6EBC,
// ChapterPhysicalEquiv = 0x63C3,
// ChapterTrack = 0x8F,
// ChapterTrackNumber = 0x89,
// ChapterDisplay = 0x80,
// ChapString = 0x85,
// ChapLanguage = 0x437C,
// ChapCountry = 0x437E,
// ChapProcess = 0x6944,
// ChapProcessCodecID = 0x6955,
// ChapProcessPrivate = 0x450D,
// ChapProcessCommand = 0x6911,
// ChapProcessTime = 0x6922,
// ChapProcessData = 0x6933,
//Tagging
// Tags = 0x1254C367,
// Tag = 0x7373,
// Targets = 0x63C0,
// TargetTypeValue = 0x68CA,
// TargetType = 0x63CA,
// Tagging_TrackUID = 0x63C5,
// Tagging_EditionUID = 0x63C9,
// Tagging_ChapterUID = 0x63C4,
// AttachmentUID = 0x63C6,
// SimpleTag = 0x67C8,
// TagName = 0x45A3,
// TagLanguage = 0x447A,
// TagDefault = 0x4484,
// TagString = 0x4487,
// TagBinary = 0x4485,
};
#endif

View File

@@ -1,166 +0,0 @@
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree. An additional intellectual property rights grant can be found
// in the file PATENTS. All contributing project authors may
// be found in the AUTHORS file in the root of the source tree.
#include "EbmlWriter.h"
#include <stdlib.h>
#include <wchar.h>
#include <string.h>
#if defined(_MSC_VER)
#define LITERALU64(n) n
#else
#define LITERALU64(n) n##LLU
#endif
void Ebml_WriteLen(EbmlGlobal *glob, long long val)
{
//TODO check and make sure we are not > than 0x0100000000000000LLU
unsigned char size = 8; //size in bytes to output
unsigned long long minVal = LITERALU64(0x00000000000000ff); //mask to compare for byte size
for (size = 1; size < 8; size ++)
{
if (val < minVal)
break;
minVal = (minVal << 7);
}
val |= (LITERALU64(0x000000000000080) << ((size - 1) * 7));
Ebml_Serialize(glob, (void *) &val, size);
}
void Ebml_WriteString(EbmlGlobal *glob, const char *str)
{
const size_t size_ = strlen(str);
const unsigned long long size = size_;
Ebml_WriteLen(glob, size);
//TODO: it's not clear from the spec whether the nul terminator
//should be serialized too. For now we omit the null terminator.
Ebml_Write(glob, str, size);
}
void Ebml_WriteUTF8(EbmlGlobal *glob, const wchar_t *wstr)
{
const size_t strlen = wcslen(wstr);
//TODO: it's not clear from the spec whether the nul terminator
//should be serialized too. For now we include it.
const unsigned long long size = strlen;
Ebml_WriteLen(glob, size);
Ebml_Write(glob, wstr, size);
}
void Ebml_WriteID(EbmlGlobal *glob, unsigned long class_id)
{
if (class_id >= 0x01000000)
Ebml_Serialize(glob, (void *)&class_id, 4);
else if (class_id >= 0x00010000)
Ebml_Serialize(glob, (void *)&class_id, 3);
else if (class_id >= 0x00000100)
Ebml_Serialize(glob, (void *)&class_id, 2);
else
Ebml_Serialize(glob, (void *)&class_id, 1);
}
void Ebml_SerializeUnsigned64(EbmlGlobal *glob, unsigned long class_id, uint64_t ui)
{
unsigned char sizeSerialized = 8 | 0x80;
Ebml_WriteID(glob, class_id);
Ebml_Serialize(glob, &sizeSerialized, 1);
Ebml_Serialize(glob, &ui, 8);
}
void Ebml_SerializeUnsigned(EbmlGlobal *glob, unsigned long class_id, unsigned long ui)
{
unsigned char size = 8; //size in bytes to output
unsigned char sizeSerialized = 0;
unsigned long minVal;
Ebml_WriteID(glob, class_id);
minVal = 0x7fLU; //mask to compare for byte size
for (size = 1; size < 4; size ++)
{
if (ui < minVal)
{
break;
}
minVal <<= 7;
}
sizeSerialized = 0x80 | size;
Ebml_Serialize(glob, &sizeSerialized, 1);
Ebml_Serialize(glob, &ui, size);
}
//TODO: perhaps this is a poor name for this id serializer helper function
void Ebml_SerializeBinary(EbmlGlobal *glob, unsigned long class_id, unsigned long bin)
{
int size;
for (size=4; size > 1; size--)
{
if (bin & 0x000000ff << ((size-1) * 8))
break;
}
Ebml_WriteID(glob, class_id);
Ebml_WriteLen(glob, size);
Ebml_WriteID(glob, bin);
}
void Ebml_SerializeFloat(EbmlGlobal *glob, unsigned long class_id, double d)
{
unsigned char len = 0x88;
Ebml_WriteID(glob, class_id);
Ebml_Serialize(glob, &len, 1);
Ebml_Serialize(glob, &d, 8);
}
void Ebml_WriteSigned16(EbmlGlobal *glob, short val)
{
signed long out = ((val & 0x003FFFFF) | 0x00200000) << 8;
Ebml_Serialize(glob, &out, 3);
}
void Ebml_SerializeString(EbmlGlobal *glob, unsigned long class_id, const char *s)
{
Ebml_WriteID(glob, class_id);
Ebml_WriteString(glob, s);
}
void Ebml_SerializeUTF8(EbmlGlobal *glob, unsigned long class_id, wchar_t *s)
{
Ebml_WriteID(glob, class_id);
Ebml_WriteUTF8(glob, s);
}
void Ebml_SerializeData(EbmlGlobal *glob, unsigned long class_id, unsigned char *data, unsigned long data_length)
{
unsigned char size = 4;
Ebml_WriteID(glob, class_id);
Ebml_WriteLen(glob, data_length);
Ebml_Write(glob, data, data_length);
}
void Ebml_WriteVoid(EbmlGlobal *glob, unsigned long vSize)
{
unsigned char tmp = 0;
unsigned long i = 0;
Ebml_WriteID(glob, 0xEC);
Ebml_WriteLen(glob, vSize);
for (i = 0; i < vSize; i++)
{
Ebml_Write(glob, &tmp, 1);
}
}
//TODO Serialize Date

View File

@@ -1,38 +0,0 @@
#ifndef EBMLWRITER_HPP
#define EBMLWRITER_HPP
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree. An additional intellectual property rights grant can be found
// in the file PATENTS. All contributing project authors may
// be found in the AUTHORS file in the root of the source tree.
//note: you must define write and serialize functions as well as your own EBML_GLOBAL
//These functions MUST be implemented
#include <stddef.h>
#include "vpx/vpx_integer.h"
typedef struct EbmlGlobal EbmlGlobal;
void Ebml_Serialize(EbmlGlobal *glob, const void *, unsigned long);
void Ebml_Write(EbmlGlobal *glob, const void *, unsigned long);
/////
void Ebml_WriteLen(EbmlGlobal *glob, long long val);
void Ebml_WriteString(EbmlGlobal *glob, const char *str);
void Ebml_WriteUTF8(EbmlGlobal *glob, const wchar_t *wstr);
void Ebml_WriteID(EbmlGlobal *glob, unsigned long class_id);
void Ebml_SerializeUnsigned64(EbmlGlobal *glob, unsigned long class_id, uint64_t ui);
void Ebml_SerializeUnsigned(EbmlGlobal *glob, unsigned long class_id, unsigned long ui);
void Ebml_SerializeBinary(EbmlGlobal *glob, unsigned long class_id, unsigned long ui);
void Ebml_SerializeFloat(EbmlGlobal *glob, unsigned long class_id, double d);
//TODO make this more generic to signed
void Ebml_WriteSigned16(EbmlGlobal *glob, short val);
void Ebml_SerializeString(EbmlGlobal *glob, unsigned long class_id, const char *s);
void Ebml_SerializeUTF8(EbmlGlobal *glob, unsigned long class_id, wchar_t *s);
void Ebml_SerializeData(EbmlGlobal *glob, unsigned long class_id, unsigned char *data, unsigned long data_length);
void Ebml_WriteVoid(EbmlGlobal *glob, unsigned long vSize);
//TODO need date function
#endif

View File

@@ -1,25 +0,0 @@
#Variables
CC=gcc
LINKER=gcc
FLAGS=
#Build Targets
EbmlWriter.o: EbmlWriter.c EbmlWriter.h
$(CC) $(FLAGS) -c EbmlWriter.c
EbmlBufferWriter.o: EbmlBufferWriter.c EbmlBufferWriter.h
$(CC) $(FLAGS) -c EbmlBufferWriter.c
MkvElement.o: MkvElement.c WebMElement.h
$(CC) $(FLAGS) -c MkvElement.c
testlibmkv.o: testlibmkv.c
$(CC) $(FLAGS) -c testlibmkv.c
testlibmkv: testlibmkv.o MkvElement.o EbmlBufferWriter.o EbmlWriter.o
$(LINKER) $(FLAGS) testlibmkv.o MkvElement.o EbmlBufferWriter.o EbmlWriter.o -o testlibmkv
clean:
rm -rf *.o testlibmkv

View File

@@ -1,220 +0,0 @@
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree. An additional intellectual property rights grant can be found
// in the file PATENTS. All contributing project authors may
// be found in the AUTHORS file in the root of the source tree.
#include "EbmlBufferWriter.h"
#include "EbmlIDs.h"
#include "WebMElement.h"
#include <stdio.h>
#define kVorbisPrivateMaxSize 4000
void writeHeader(EbmlGlobal *glob)
{
EbmlLoc start;
Ebml_StartSubElement(glob, &start, EBML);
Ebml_SerializeUnsigned(glob, EBMLVersion, 1);
Ebml_SerializeUnsigned(glob, EBMLReadVersion, 1); //EBML Read Version
Ebml_SerializeUnsigned(glob, EBMLMaxIDLength, 4); //EBML Max ID Length
Ebml_SerializeUnsigned(glob, EBMLMaxSizeLength, 8); //EBML Max Size Length
Ebml_SerializeString(glob, DocType, "webm"); //Doc Type
Ebml_SerializeUnsigned(glob, DocTypeVersion, 2); //Doc Type Version
Ebml_SerializeUnsigned(glob, DocTypeReadVersion, 2); //Doc Type Read Version
Ebml_EndSubElement(glob, &start);
}
void writeSimpleBlock(EbmlGlobal *glob, unsigned char trackNumber, short timeCode,
int isKeyframe, unsigned char lacingFlag, int discardable,
unsigned char *data, unsigned long dataLength)
{
Ebml_WriteID(glob, SimpleBlock);
unsigned long blockLength = 4 + dataLength;
blockLength |= 0x10000000; //TODO check length < 0x0FFFFFFFF
Ebml_Serialize(glob, &blockLength, 4);
trackNumber |= 0x80; //TODO check track nubmer < 128
Ebml_Write(glob, &trackNumber, 1);
//Ebml_WriteSigned16(glob, timeCode,2); //this is 3 bytes
Ebml_Serialize(glob, &timeCode, 2);
unsigned char flags = 0x00 | (isKeyframe ? 0x80 : 0x00) | (lacingFlag << 1) | discardable;
Ebml_Write(glob, &flags, 1);
Ebml_Write(glob, data, dataLength);
}
static UInt64 generateTrackID(unsigned int trackNumber)
{
UInt64 t = time(NULL) * trackNumber;
UInt64 r = rand();
r = r << 32;
r += rand();
UInt64 rval = t ^ r;
return rval;
}
void writeVideoTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
double frameRate)
{
EbmlLoc start;
Ebml_StartSubElement(glob, &start, TrackEntry);
Ebml_SerializeUnsigned(glob, TrackNumber, trackNumber);
UInt64 trackID = generateTrackID(trackNumber);
Ebml_SerializeUnsigned(glob, TrackUID, trackID);
Ebml_SerializeString(glob, CodecName, "VP8"); //TODO shouldn't be fixed
Ebml_SerializeUnsigned(glob, TrackType, 1); //video is always 1
Ebml_SerializeString(glob, CodecID, codecId);
{
EbmlLoc videoStart;
Ebml_StartSubElement(glob, &videoStart, Video);
Ebml_SerializeUnsigned(glob, PixelWidth, pixelWidth);
Ebml_SerializeUnsigned(glob, PixelHeight, pixelHeight);
Ebml_SerializeFloat(glob, FrameRate, frameRate);
Ebml_EndSubElement(glob, &videoStart); //Video
}
Ebml_EndSubElement(glob, &start); //Track Entry
}
void writeAudioTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
char *codecId, double samplingFrequency, unsigned int channels,
unsigned char *private, unsigned long privateSize)
{
EbmlLoc start;
Ebml_StartSubElement(glob, &start, TrackEntry);
Ebml_SerializeUnsigned(glob, TrackNumber, trackNumber);
UInt64 trackID = generateTrackID(trackNumber);
Ebml_SerializeUnsigned(glob, TrackUID, trackID);
Ebml_SerializeUnsigned(glob, TrackType, 2); //audio is always 2
//I am using defaults for thesed required fields
/* Ebml_SerializeUnsigned(glob, FlagEnabled, 1);
Ebml_SerializeUnsigned(glob, FlagDefault, 1);
Ebml_SerializeUnsigned(glob, FlagForced, 1);
Ebml_SerializeUnsigned(glob, FlagLacing, flagLacing);*/
Ebml_SerializeString(glob, CodecID, codecId);
Ebml_SerializeData(glob, CodecPrivate, private, privateSize);
Ebml_SerializeString(glob, CodecName, "VORBIS"); //fixed for now
{
EbmlLoc AudioStart;
Ebml_StartSubElement(glob, &AudioStart, Audio);
Ebml_SerializeFloat(glob, SamplingFrequency, samplingFrequency);
Ebml_SerializeUnsigned(glob, Channels, channels);
Ebml_EndSubElement(glob, &AudioStart);
}
Ebml_EndSubElement(glob, &start);
}
void writeSegmentInformation(EbmlGlobal *ebml, EbmlLoc* startInfo, unsigned long timeCodeScale, double duration)
{
Ebml_StartSubElement(ebml, startInfo, Info);
Ebml_SerializeUnsigned(ebml, TimecodeScale, timeCodeScale);
Ebml_SerializeFloat(ebml, Segment_Duration, duration * 1000.0); //Currently fixed to using milliseconds
Ebml_SerializeString(ebml, 0x4D80, "QTmuxingAppLibWebM-0.0.1");
Ebml_SerializeString(ebml, 0x5741, "QTwritingAppLibWebM-0.0.1");
Ebml_EndSubElement(ebml, startInfo);
}
/*
void Mkv_InitializeSegment(Ebml& ebml_out, EbmlLoc& ebmlLoc)
{
Ebml_StartSubElement(ebml_out, ebmlLoc, 0x18538067);
}
void Mkv_InitializeSeek(Ebml& ebml_out, EbmlLoc& ebmlLoc)
{
Ebml_StartSubElement(ebml_out, ebmlLoc, 0x114d9b74);
}
void Mkv_WriteSeekInformation(Ebml& ebml_out, SeekStruct& seekInformation)
{
EbmlLoc ebmlLoc;
Ebml_StartSubElement(ebml_out, ebmlLoc, 0x4dbb);
Ebml_SerializeString(ebml_out, 0x53ab, seekInformation.SeekID);
Ebml_SerializeUnsigned(ebml_out, 0x53ac, seekInformation.SeekPosition);
Ebml_EndSubElement(ebml_out, ebmlLoc);
}
void Mkv_WriteSegmentInformation(Ebml& ebml_out, SegmentInformationStruct& segmentInformation)
{
Ebml_SerializeUnsigned(ebml_out, 0x73a4, segmentInformation.segmentUID);
if (segmentInformation.filename != 0)
Ebml_SerializeString(ebml_out, 0x7384, segmentInformation.filename);
Ebml_SerializeUnsigned(ebml_out, 0x2AD7B1, segmentInformation.TimecodeScale);
Ebml_SerializeUnsigned(ebml_out, 0x4489, segmentInformation.Duration);
//TODO date
Ebml_SerializeWString(ebml_out, 0x4D80, L"MKVMUX");
Ebml_SerializeWString(ebml_out, 0x5741, segmentInformation.WritingApp);
}
void Mkv_InitializeTrack(Ebml& ebml_out, EbmlLoc& ebmlLoc)
{
Ebml_StartSubElement(ebml_out, ebmlLoc, 0x1654AE6B);
}
static void Mkv_WriteGenericTrackData(Ebml& ebml_out, TrackStruct& track)
{
Ebml_SerializeUnsigned(ebml_out, 0xD7, track.TrackNumber);
Ebml_SerializeUnsigned(ebml_out, 0x73C5, track.TrackUID);
Ebml_SerializeUnsigned(ebml_out, 0x83, track.TrackType);
Ebml_SerializeUnsigned(ebml_out, 0xB9, track.FlagEnabled ? 1 :0);
Ebml_SerializeUnsigned(ebml_out, 0x88, track.FlagDefault ? 1 :0);
Ebml_SerializeUnsigned(ebml_out, 0x55AA, track.FlagForced ? 1 :0);
if (track.Language != 0)
Ebml_SerializeString(ebml_out, 0x22B59C, track.Language);
if (track.CodecID != 0)
Ebml_SerializeString(ebml_out, 0x86, track.CodecID);
if (track.CodecPrivate != 0)
Ebml_SerializeData(ebml_out, 0x63A2, track.CodecPrivate, track.CodecPrivateLength);
if (track.CodecName != 0)
Ebml_SerializeWString(ebml_out, 0x258688, track.CodecName);
}
void Mkv_WriteVideoTrack(Ebml& ebml_out, TrackStruct & track, VideoTrackStruct& video)
{
EbmlLoc trackHeadLoc, videoHeadLoc;
Ebml_StartSubElement(ebml_out, trackHeadLoc, 0xAE); //start Track
Mkv_WriteGenericTrackData(ebml_out, track);
Ebml_StartSubElement(ebml_out, videoHeadLoc, 0xE0); //start Video
Ebml_SerializeUnsigned(ebml_out, 0x9A, video.FlagInterlaced ? 1 :0);
Ebml_SerializeUnsigned(ebml_out, 0xB0, video.PixelWidth);
Ebml_SerializeUnsigned(ebml_out, 0xBA, video.PixelHeight);
Ebml_SerializeUnsigned(ebml_out, 0x54B0, video.PixelDisplayWidth);
Ebml_SerializeUnsigned(ebml_out, 0x54BA, video.PixelDisplayHeight);
Ebml_SerializeUnsigned(ebml_out, 0x54B2, video.displayUnit);
Ebml_SerializeFloat(ebml_out, 0x2383E3, video.FrameRate);
Ebml_EndSubElement(ebml_out, videoHeadLoc);
Ebml_EndSubElement(ebml_out, trackHeadLoc);
}
void Mkv_WriteAudioTrack(Ebml& ebml_out, TrackStruct & track, AudioTrackStruct& video)
{
EbmlLoc trackHeadLoc, audioHeadLoc;
Ebml_StartSubElement(ebml_out, trackHeadLoc, 0xAE);
Mkv_WriteGenericTrackData(ebml_out, track);
Ebml_StartSubElement(ebml_out, audioHeadLoc, 0xE0); //start Audio
Ebml_SerializeFloat(ebml_out, 0xB5, video.SamplingFrequency);
Ebml_SerializeUnsigned(ebml_out, 0x9F, video.Channels);
Ebml_SerializeUnsigned(ebml_out, 0x6264, video.BitDepth);
Ebml_EndSubElement(ebml_out, audioHeadLoc); // end audio
Ebml_EndSubElement(ebml_out, trackHeadLoc);
}
void Mkv_WriteEbmlClusterHead(Ebml& ebml_out, EbmlLoc& ebmlLoc, ClusterHeadStruct & clusterHead)
{
Ebml_StartSubElement(ebml_out, ebmlLoc, 0x1F43B675);
Ebml_SerializeUnsigned(ebml_out, 0x6264, clusterHead.TimeCode);
}
void Mkv_WriteSimpleBlockHead(Ebml& ebml_out, EbmlLoc& ebmlLoc, SimpleBlockStruct& block)
{
Ebml_StartSubElement(ebml_out, ebmlLoc, 0xA3);
Ebml_Write1UInt(ebml_out, block.TrackNumber);
Ebml_WriteSigned16(ebml_out,block.TimeCode);
unsigned char flags = 0x00 | (block.iskey ? 0x80:0x00) | (block.lacing << 1) | block.discardable;
Ebml_Write1UInt(ebml_out, flags); //TODO this may be the wrong function
Ebml_Serialize(ebml_out, block.data, block.dataLength);
Ebml_EndSubElement(ebml_out,ebmlLoc);
}
*/

View File

@@ -1,35 +0,0 @@
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree. An additional intellectual property rights grant can be found
// in the file PATENTS. All contributing project authors may
// be found in the AUTHORS file in the root of the source tree.
#ifndef MKV_CONTEXT_HPP
#define MKV_CONTEXT_HPP 1
void writeSimpleBock(EbmlGlobal *ebml, unsigned char trackNumber, unsigned short timeCode,
int isKeyframe, unsigned char lacingFlag, int discardable,
unsigned char *data, unsigned long dataLength);
// these are helper functions
void writeHeader(EbmlGlobal *ebml);
void writeSegmentInformation(EbmlGlobal *ebml, EbmlLoc* startInfo , unsigned long timeCodeScale, double duration);
//this function is a helper only, it assumes a lot of defaults
void writeVideoTrack(EbmlGlobal *ebml, unsigned int trackNumber, int flagLacing,
char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
double frameRate);
void writeAudioTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
char *codecId, double samplingFrequency, unsigned int channels,
unsigned char *private, unsigned long privateSize);
void writeSimpleBlock(EbmlGlobal *ebml, unsigned char trackNumber, short timeCode,
int isKeyframe, unsigned char lacingFlag, int discardable,
unsigned char *data, unsigned long dataLength);
#endif

View File

@@ -1,63 +0,0 @@
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree. An additional intellectual property rights grant can be found
// in the file PATENTS. All contributing project authors may
// be found in the AUTHORS file in the root of the source tree.
#include "EbmlIDs.h"
#include "EbmlBufferWriter.h"
#include "WebMElement.h"
#include <stdio.h>
int main(int argc, char *argv[])
{
//init the datatype we're using for ebml output
unsigned char data[8192];
EbmlGlobal ebml;
ebml.buf = data;
ebml.offset = 0;
ebml.length = 8192;
writeHeader(&ebml);
{
EbmlLoc startSegment;
Ebml_StartSubElement(&ebml, &startSegment, Segment); //segment
{
//segment info
EbmlLoc startInfo;
Ebml_StartSubElement(&ebml, &startInfo, Info);
Ebml_SerializeString(&ebml, 0x4D80, "muxingAppLibMkv");
Ebml_SerializeString(&ebml, 0x5741, "writingAppLibMkv");
Ebml_EndSubElement(&ebml, &startInfo);
}
{
EbmlLoc trackStart;
Ebml_StartSubElement(&ebml, &trackStart, Tracks);
writeVideoTrack(&ebml, 1, 1, "V_MS/VFW/FOURCC", 320, 240, 29.97);
//writeAudioTrack(&ebml,2,1, "A_VORBIS", 32000, 1, NULL, 0);
Ebml_EndSubElement(&ebml, &trackStart);
}
{
EbmlLoc clusterStart;
Ebml_StartSubElement(&ebml, &clusterStart, Cluster); //cluster
Ebml_SerializeUnsigned(&ebml, Timecode, 0);
unsigned char someData[4] = {1, 2, 3, 4};
writeSimpleBlock(&ebml, 1, 0, 1, 0, 0, someData, 4);
Ebml_EndSubElement(&ebml, &clusterStart);
} //end cluster
Ebml_EndSubElement(&ebml, &startSegment);
}
//dump ebml stuff to the file
FILE *file_out = fopen("test.mkv", "wb");
size_t bytesWritten = fwrite(data, 1, ebml.offset, file_out);
fclose(file_out);
return 0;
}

View File

@@ -1,5 +1,5 @@
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source

134
libs.mk
View File

@@ -1,5 +1,5 @@
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source
@@ -9,15 +9,7 @@
## ##
# ARM assembly files are written in RVCT-style. We use some make magic to ASM:=$(if $(filter yes,$(CONFIG_GCC)),.asm.s,.asm)
# filter those files to allow GCC compilation
ifeq ($(ARCH_ARM),yes)
ASM:=$(if $(filter yes,$(CONFIG_GCC)),.asm.s,.asm)
else
ASM:=.asm
endif
CODEC_SRCS-yes += libs.mk
include $(SRC_PATH_BARE)/vpx/vpx_codec.mk include $(SRC_PATH_BARE)/vpx/vpx_codec.mk
CODEC_SRCS-yes += $(addprefix vpx/,$(call enabled,API_SRCS)) CODEC_SRCS-yes += $(addprefix vpx/,$(call enabled,API_SRCS))
@@ -67,6 +59,7 @@ CODEC_LIB=$(if $(CONFIG_STATIC_MSVCRT),vpxmt,vpxmd)
# This variable uses deferred expansion intentionally, since the results of # This variable uses deferred expansion intentionally, since the results of
# $(wildcard) may change during the course of the Make. # $(wildcard) may change during the course of the Make.
VS_PLATFORMS = $(foreach d,$(wildcard */Release/$(CODEC_LIB).lib),$(word 1,$(subst /, ,$(d)))) VS_PLATFORMS = $(foreach d,$(wildcard */Release/$(CODEC_LIB).lib),$(word 1,$(subst /, ,$(d))))
CODEC_SRCS-yes += $(SRC_PATH_BARE)/libs.mk # to show up in the msvs workspace
endif endif
# The following pairs define a mapping of locations in the distribution # The following pairs define a mapping of locations in the distribution
@@ -97,9 +90,7 @@ ifeq ($(ARCH_X86)$(ARCH_X86_64),yes)
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/emms.asm CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/emms.asm
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86.h CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86.h
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86_abi_support.asm CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86_abi_support.asm
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86_cpuid.c
endif endif
CODEC_SRCS-$(ARCH_ARM) += vpx_ports/arm_cpudetect.c
CODEC_SRCS-$(ARCH_ARM) += $(BUILD_PFX)vpx_config.asm CODEC_SRCS-$(ARCH_ARM) += $(BUILD_PFX)vpx_config.asm
CODEC_EXPORTS-$(BUILD_LIBVPX) += vpx/exports_com CODEC_EXPORTS-$(BUILD_LIBVPX) += vpx/exports_com
CODEC_EXPORTS-$(CONFIG_ENCODERS) += vpx/exports_enc CODEC_EXPORTS-$(CONFIG_ENCODERS) += vpx/exports_enc
@@ -123,18 +114,6 @@ endif
else else
INSTALL-LIBS-yes += $(LIBSUBDIR)/libvpx.a INSTALL-LIBS-yes += $(LIBSUBDIR)/libvpx.a
INSTALL-LIBS-$(CONFIG_DEBUG_LIBS) += $(LIBSUBDIR)/libvpx_g.a INSTALL-LIBS-$(CONFIG_DEBUG_LIBS) += $(LIBSUBDIR)/libvpx_g.a
#Install the OpenCL kernels if CL enabled.
ifeq ($(CONFIG_OPENCL),yes)
INSTALL-LIBS-yes += $(LIBSUBDIR)/vp8/common/opencl/filter_cl.cl
INSTALL-LIBS-yes += $(LIBSUBDIR)/vp8/common/opencl/idctllm_cl.cl
INSTALL-LIBS-yes += $(LIBSUBDIR)/vp8/common/opencl/loopfilter.cl
#only install decoder CL files if VP8 decoder enabled
ifeq ($(CONFIG_VP8_DECODER),yes)
INSTALL-LIBS-yes += $(LIBSUBDIR)/vp8/decoder/opencl/dequantize_cl.cl
endif
endif #CONFIG_OPENCL=yes
endif endif
CODEC_SRCS=$(call enabled,CODEC_SRCS) CODEC_SRCS=$(call enabled,CODEC_SRCS)
@@ -144,22 +123,29 @@ INSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(call enabled,CODEC_EXPORTS)
ifeq ($(CONFIG_EXTERNAL_BUILD),yes) ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
ifeq ($(CONFIG_MSVS),yes) ifeq ($(CONFIG_MSVS),yes)
ifeq ($(ARCH_ARM),yes)
ifeq ($(HAVE_ARMV5TE),yes)
ARM_ARCH=v5
endif
ifeq ($(HAVE_ARMV6),yes)
ARM_ARCH=v6
endif
obj_int_extract.vcproj: $(SRC_PATH_BARE)/build/make/obj_int_extract.c obj_int_extract.vcproj: $(SRC_PATH_BARE)/build/make/obj_int_extract.c
@cp $(SRC_PATH_BARE)/build/x86-msvs/obj_int_extract.bat . @cp $(SRC_PATH_BARE)/build/arm-wince-vs8/obj_int_extract.bat .
@echo " [CREATE] $@" @echo " [CREATE] $@"
$(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh \ $(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh\
--exe \ --exe\
--target=$(TOOLCHAIN) \ --target=$(TOOLCHAIN)\
--name=obj_int_extract \ $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
--ver=$(CONFIG_VS_VERSION) \ --name=obj_int_extract\
--proj-guid=E1360C65-D375-4335-8057-7ED99CC3F9B2 \ --proj-guid=E1360C65-D375-4335-8057-7ED99CC3F9B2\
$(if $(CONFIG_STATIC_MSVCRT),--static-crt) \ --out=$@ $^\
--out=$@ $^ \ -I".&quot;;&quot;$(SRC_PATH_BARE)"
-I. \
-I"$(SRC_PATH_BARE)" \
PROJECTS-$(BUILD_LIBVPX) += obj_int_extract.vcproj PROJECTS-$(BUILD_LIBVPX) += obj_int_extract.vcproj
PROJECTS-$(BUILD_LIBVPX) += obj_int_extract.bat PROJECTS-$(BUILD_LIBVPX) += obj_int_extract.bat
PROJECTS-$(BUILD_LIBVPX) += armasm$(ARM_ARCH).rules
endif
vpx.def: $(call enabled,CODEC_EXPORTS) vpx.def: $(call enabled,CODEC_EXPORTS)
@echo " [CREATE] $@" @echo " [CREATE] $@"
@@ -170,16 +156,15 @@ CLEAN-OBJS += vpx.def
vpx.vcproj: $(CODEC_SRCS) vpx.def vpx.vcproj: $(CODEC_SRCS) vpx.def
@echo " [CREATE] $@" @echo " [CREATE] $@"
$(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh \ $(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh\
--lib \ --lib\
--target=$(TOOLCHAIN) \ --target=$(TOOLCHAIN)\
$(if $(CONFIG_STATIC_MSVCRT),--static-crt) \ $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
--name=vpx \ --name=vpx\
--proj-guid=DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74 \ --proj-guid=DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74\
--module-def=vpx.def \ --module-def=vpx.def\
--ver=$(CONFIG_VS_VERSION) \ --ver=$(CONFIG_VS_VERSION)\
--out=$@ $(CFLAGS) $^ \ --out=$@ $(CFLAGS) $^\
--src-path-bare="$(SRC_PATH_BARE)" \
PROJECTS-$(BUILD_LIBVPX) += vpx.vcproj PROJECTS-$(BUILD_LIBVPX) += vpx.vcproj
@@ -216,26 +201,6 @@ $(addprefix $(DIST_DIR)/,$(LIBVPX_SO_SYMLINKS)):
INSTALL-LIBS-$(CONFIG_SHARED) += $(LIBVPX_SO_SYMLINKS) INSTALL-LIBS-$(CONFIG_SHARED) += $(LIBVPX_SO_SYMLINKS)
INSTALL-LIBS-$(CONFIG_SHARED) += $(LIBSUBDIR)/$(LIBVPX_SO) INSTALL-LIBS-$(CONFIG_SHARED) += $(LIBSUBDIR)/$(LIBVPX_SO)
LIBS-$(BUILD_LIBVPX) += vpx.pc
vpx.pc: config.mk libs.mk
@echo " [CREATE] $@"
$(qexec)echo '# pkg-config file from libvpx $(VERSION_STRING)' > $@
$(qexec)echo 'prefix=$(PREFIX)' >> $@
$(qexec)echo 'exec_prefix=$${prefix}' >> $@
$(qexec)echo 'libdir=$${prefix}/lib' >> $@
$(qexec)echo 'includedir=$${prefix}/include' >> $@
$(qexec)echo '' >> $@
$(qexec)echo 'Name: vpx' >> $@
$(qexec)echo 'Description: WebM Project VPx codec implementation' >> $@
$(qexec)echo 'Version: $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH)' >> $@
$(qexec)echo 'Requires:' >> $@
$(qexec)echo 'Conflicts:' >> $@
$(qexec)echo 'Libs: -L$${libdir} -lvpx' >> $@
$(qexec)echo 'Cflags: -I$${includedir}' >> $@
INSTALL-LIBS-yes += $(LIBSUBDIR)/pkgconfig/vpx.pc
INSTALL_MAPS += $(LIBSUBDIR)/pkgconfig/%.pc %.pc
CLEAN-OBJS += vpx.pc
endif endif
LIBS-$(LIPO_LIBVPX) += libvpx.a LIBS-$(LIPO_LIBVPX) += libvpx.a
@@ -263,44 +228,9 @@ endif
# #
# Add assembler dependencies for configuration and offsets # Add assembler dependencies for configuration and offsets
# #
$(filter %.s.o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm #$(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm $(BUILD_PFX)vpx_asm_offsets.asm
$(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm $(filter %.s.o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm
$(filter %.asm.o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm
#
# Calculate platform- and compiler-specific offsets for hand coded assembly
#
ifeq ($(CONFIG_EXTERNAL_BUILD),) # Visual Studio uses obj_int_extract.bat
ifeq ($(ARCH_ARM), yes)
asm_com_offsets.asm: obj_int_extract
asm_com_offsets.asm: $(VP8_PREFIX)common/asm_com_offsets.c.o
./obj_int_extract rvds $< $(ADS2GAS) > $@
OBJS-yes += $(VP8_PREFIX)common/asm_com_offsets.c.o
CLEAN-OBJS += asm_com_offsets.asm
$(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)asm_com_offsets.asm
endif
ifeq ($(ARCH_ARM)$(ARCH_X86)$(ARCH_X86_64), yes)
ifeq ($(CONFIG_VP8_ENCODER), yes)
asm_enc_offsets.asm: obj_int_extract
asm_enc_offsets.asm: $(VP8_PREFIX)encoder/asm_enc_offsets.c.o
./obj_int_extract rvds $< $(ADS2GAS) > $@
OBJS-yes += $(VP8_PREFIX)encoder/asm_enc_offsets.c.o
CLEAN-OBJS += asm_enc_offsets.asm
$(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)asm_enc_offsets.asm
endif
endif
ifeq ($(ARCH_ARM), yes)
ifeq ($(CONFIG_VP8_DECODER), yes)
asm_dec_offsets.asm: obj_int_extract
asm_dec_offsets.asm: $(VP8_PREFIX)decoder/asm_dec_offsets.c.o
./obj_int_extract rvds $< $(ADS2GAS) > $@
OBJS-yes += $(VP8_PREFIX)decoder/asm_dec_offsets.c.o
CLEAN-OBJS += asm_dec_offsets.asm
$(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)asm_dec_offsets.asm
endif
endif
endif
$(shell $(SRC_PATH_BARE)/build/make/version.sh "$(SRC_PATH_BARE)" $(BUILD_PFX)vpx_version.h) $(shell $(SRC_PATH_BARE)/build/make/version.sh "$(SRC_PATH_BARE)" $(BUILD_PFX)vpx_version.h)
CLEAN-OBJS += $(BUILD_PFX)vpx_version.h CLEAN-OBJS += $(BUILD_PFX)vpx_version.h

View File

@@ -31,7 +31,7 @@
The WebM project is an open source project supported by its community. For The WebM project is an open source project supported by its community. For
questions about this SDK, please mail the apps-devel@webmproject.org list. questions about this SDK, please mail the apps-devel@webmproject.org list.
To contribute, see http://www.webmproject.org/code/contribute and mail To contribute, see http://www.webmproject.org/code/contribute and mail
codec-devel@webmproject.org. vpx-devel@webmproject.org.
*/ */
/*!\page changelog CHANGELOG /*!\page changelog CHANGELOG

View File

@@ -20,6 +20,8 @@
* Still in the public domain. * Still in the public domain.
*/ */
#include <sys/types.h> /* for stupid systems */
#include <string.h> /* for memcpy() */ #include <string.h> /* for memcpy() */
#include "md5_utils.h" #include "md5_utils.h"

40
nestegg/.gitignore vendored
View File

@@ -1,40 +0,0 @@
*.lo
*.o
*.swp
*~
.deps
.dirstamp
.libs
Makefile
Makefile.in
_stdint.h
aclocal.m4
autom4te.cache
compile
config.guess
config.h
config.h.in
config.log
config.status
config.sub
configure
depcomp
docs/Doxyfile
docs/doxygen-build.stamp
docs/html
install-sh
libtool
ltmain.sh
m4/libtool.m4
m4/ltoptions.m4
m4/ltsugar.m4
m4/ltversion.m4
m4/lt~obsolete.m4
missing
nestegg-uninstalled.pc
nestegg.pc
src/.dirstamp
src/libnestegg.la
stamp-h1
test/test
include/nestegg/nestegg-stdint.h

View File

@@ -1 +0,0 @@
Matthew Gregan <kinetik@flim.org>

View File

@@ -1,8 +0,0 @@
Build instructions for libnestegg
=================================
0. Change directory into the source directory.
1. Run |autoreconf --install| to generate configure.
2. Run |./configure| to configure the build.
3. Run |make| to build.
4. Run |make check| to run the test suite.

View File

@@ -1,13 +0,0 @@
Copyright © 2010 Mozilla Foundation
Permission to use, copy, modify, and distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

View File

@@ -1,51 +0,0 @@
AUTOMAKE_OPTIONS = foreign 1.11 no-dist-gzip dist-bzip2 subdir-objects
ACLOCAL_AMFLAGS = -I m4
INCLUDES = -I$(top_srcdir)/include -I. -I$(top_srcdir)/halloc
AM_CFLAGS = -ansi -pedantic -Wall -Wextra -Wno-long-long -O0 -g
SUBDIRS = docs
EXTRA_DIST = \
AUTHORS README LICENSE \
nestegg-uninstalled.pc.in \
m4/as-ac-expand.m4 \
m4/pkg.m4 \
m4/ax_create_stdint_h.m4 \
halloc/src/halloc.c \
halloc/halloc.h \
halloc/src/align.h \
halloc/src/hlist.h \
halloc/src/macros.h
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = nestegg.pc
nesteggincludedir = $(includedir)/nestegg
nestegginclude_HEADERS = include/nestegg/nestegg.h include/nestegg/nestegg-stdint.h
lib_LTLIBRARIES = src/libnestegg.la
src_libnestegg_la_SOURCES = \
src/nestegg.c \
halloc/src/halloc.c \
halloc/halloc.h \
halloc/src/align.h \
halloc/src/hlist.h \
halloc/src/macros.h
check_PROGRAMS = test/test
test_test_SOURCES = test/test.c
test_test_LDADD = src/libnestegg.la
DISTCLEANFILES = include/nestegg/nestegg-stdint.h
dist-hook:
find $(distdir) -type d -name '.git' | xargs rm -rf
debug:
$(MAKE) all CFLAGS="@DEBUG@"
profile:
$(MAKE) all CFLAGS="@PROFILE@"

View File

@@ -1,6 +0,0 @@
See INSTALL for build instructions.
Licensed under an ISC-style license. See LICENSE for details.
The source under the halloc/ directory is licensed under a BSD license. See
halloc/halloc.h for details.

View File

@@ -1,21 +0,0 @@
- Document when read, seek, tell callbacks are used.
- Add an automated testsuite.
- Test (and fix, if necessary) support for unknown sizes.
- Test (and fix, if necessary) support for large files.
- Read past unknown elements rather than seeking.
- Try to handle unknown elements with unknown sizes.
- Formalize handling of default element values.
- Try to resynchronize stream when read_block fails so that failure to parse
a single block can be treated as non-fatal.
- Make logging more useful to API users.
- Avoid reparsing Cues and ignore any SeekHead at end of file.
- Optionally build a Cue index as Clusters are parsed.
- Support seeking without Cues.
- Avoid building a list of Clusters as they are parsed and retain only the
last one parsed.
- Add an asynchronous error code to struct nestegg and ensure that API calls
continue to fail safely one a fatal error has been returned.
- Modify parser/data structures to provide a clean separation. Perhaps the
parser should return a generic tree of nodes that a second pass uses to
initialize the main data structures.
- Use pool allocator for all allocations.

View File

@@ -1,124 +0,0 @@
dnl ------------------------------------------------
dnl Initialization and Versioning
dnl ------------------------------------------------
AC_INIT(libnestegg,[0.1git])
AC_CANONICAL_HOST
AC_CANONICAL_TARGET
AC_CONFIG_MACRO_DIR([m4])
AM_CONFIG_HEADER([config.h])
AC_CONFIG_SRCDIR([src/nestegg.c])
AM_INIT_AUTOMAKE
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
dnl Library versioning
dnl CURRENT, REVISION, AGE
dnl - library source changed -> increment REVISION
dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0
dnl - interfaces added -> increment AGE
dnl - interfaces removed -> AGE = 0
NESTEGG_CURRENT=0
NESTEGG_REVISION=0
NESTEGG_AGE=1
AC_SUBST(NESTEGG_CURRENT)
AC_SUBST(NESTEGG_REVISION)
AC_SUBST(NESTEGG_AGE)
dnl --------------------------------------------------
dnl Check for programs
dnl --------------------------------------------------
dnl save $CFLAGS since AC_PROG_CC likes to insert "-g -O2"
dnl if $CFLAGS is blank
cflags_save="$CFLAGS"
AC_PROG_CC
AC_PROG_CPP
CFLAGS="$cflags_save"
AM_PROG_CC_C_O
AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
dnl Check for doxygen
AC_ARG_ENABLE([doc],
AS_HELP_STRING([--enable-doc], [Build API documentation]),
[ac_enable_doc=$enableval], [ac_enable_doc=auto])
if test "x$ac_enable_doc" != "xno"; then
AC_CHECK_PROG(HAVE_DOXYGEN, doxygen, true, false)
if test "x$HAVE_DOXYGEN" = "xfalse" -a "x$ac_enable_doc" = "xyes"; then
AC_MSG_ERROR([*** API documentation explicitly requested but Doxygen not found])
fi
else
HAVE_DOXYGEN=false
fi
AM_CONDITIONAL(HAVE_DOXYGEN,$HAVE_DOXYGEN)
if test $HAVE_DOXYGEN = "false"; then
AC_MSG_WARN([*** doxygen not found, API documentation will not be built])
fi
# Generate portable stdint.h replacement
AX_CREATE_STDINT_H(include/nestegg/nestegg-stdint.h)
# Test whenever ld supports -version-script
AC_PROG_LD
AC_PROG_LD_GNU
AC_MSG_CHECKING([how to control symbol export])
dnl --------------------------------------------------
dnl Do substitutions
dnl --------------------------------------------------
AC_SUBST(DEBUG)
AC_SUBST(PROFILE)
AC_OUTPUT([
Makefile
docs/Makefile
docs/Doxyfile
nestegg.pc
nestegg-uninstalled.pc
])
AS_AC_EXPAND(LIBDIR, ${libdir})
AS_AC_EXPAND(INCLUDEDIR, ${includedir})
AS_AC_EXPAND(BINDIR, ${bindir})
AS_AC_EXPAND(DOCDIR, ${docdir})
if test $HAVE_DOXYGEN = "false"; then
doc_build="no"
else
doc_build="yes"
fi
AC_MSG_RESULT([
------------------------------------------------------------------------
$PACKAGE $VERSION: Automatic configuration OK.
General configuration:
API Documentation: .......... ${doc_build}
Installation paths:
libnestegg: .................. ${LIBDIR}
C header files: .............. ${INCLUDEDIR}/nestegg
Documentation: ............... ${DOCDIR}
Building:
Type 'make' to compile $PACKAGE.
Type 'make install' to install $PACKAGE.
Example programs will be built but not installed.
------------------------------------------------------------------------
])

File diff suppressed because it is too large Load Diff

View File

@@ -1,38 +0,0 @@
doc_DATA = doxygen-build.stamp
EXTRA_DIST = Doxyfile.in
if HAVE_DOXYGEN
doxygen-build.stamp: Doxyfile
doxygen
touch doxygen-build.stamp
else
doxygen-build.stamp:
echo "*** Warning: Doxygen not found; documentation will not be built."
touch doxygen-build.stamp
endif
dist_docdir = $(distdir)/libnestegg
dist-hook:
if test -d html; then \
mkdir $(dist_docdir); \
echo -n "copying built documenation..."; \
cp -rp html $(dist_docdir)/html; \
echo "OK"; \
fi
install-data-local: doxygen-build.stamp
$(mkinstalldirs) $(DESTDIR)$(docdir)
if test -d html; then \
cp -rp html $(DESTDIR)$(docdir)/html; \
fi
uninstall-local:
rm -rf $(DESTDIR)$(docdir)
clean-local:
if test -d html; then rm -rf html; fi
if test -f doxygen-build.stamp; then rm -f doxygen-build.stamp; fi

View File

@@ -1,45 +0,0 @@
halloc 1.2.1
============
Hierarchical memory heap interface - an extension to standard
malloc/free interface that simplifies tasks of memory disposal
when allocated structures exhibit hierarchical properties.
http://swapped.cc/halloc
=
To build libhalloc.a with GNU tools run
make
To install in /usr/include and /usr/lib
make install
To cleanup the build files
make clean
=
halloc-1.2.1
* fixed a double-free bug in _set_allocator() as per
Matthew Gregan comments
* switched to using NULL instead of 0 where applicable
halloc-1.2.0
* added missing <string.h> include to halloc.c
* improved standard compliance thanks to the feedback
received from Stan Tobias. Two things were fixed -
- hblock_t structure no longer uses zero-sized 'data'
array, which happened to be common, but non-standard
extension;
- secondly, added the code to test the behaviour of
realloc(ptr, 0). Standard allows it NOT to act as
free(), in which case halloc will use its own version
of allocator calling free() when neccessary.
halloc-1.1.0
* initial public release (rewrite of hhmalloc library)
=============================================================================
Copyright (c) 2004-2010, Alex Pankratov (ap@swapped.cc). All rights reserved.

View File

@@ -1,43 +0,0 @@
/*
* Copyright (c) 2004-2010 Alex Pankratov. All rights reserved.
*
* Hierarchical memory allocator, 1.2.1
* http://swapped.cc/halloc
*/
/*
* The program is distributed under terms of BSD license.
* You can obtain the copy of the license by visiting:
*
* http://www.opensource.org/licenses/bsd-license.php
*/
#ifndef _LIBP_HALLOC_H_
#define _LIBP_HALLOC_H_
#include <stddef.h> /* size_t */
/*
* Core API
*/
void * halloc (void * block, size_t len);
void hattach(void * block, void * parent);
/*
* standard malloc/free api
*/
void * h_malloc (size_t len);
void * h_calloc (size_t n, size_t len);
void * h_realloc(void * p, size_t len);
void h_free (void * p);
char * h_strdup (const char * str);
/*
* the underlying allocator
*/
typedef void * (* realloc_t)(void * ptr, size_t len);
extern realloc_t halloc_allocator;
#endif

View File

@@ -1,36 +0,0 @@
/*
* Copyright (c) 2004-2010 Alex Pankratov. All rights reserved.
*
* Hierarchical memory allocator, 1.2.1
* http://swapped.cc/halloc
*/
/*
* The program is distributed under terms of BSD license.
* You can obtain the copy of the license by visiting:
*
* http://www.opensource.org/licenses/bsd-license.php
*/
#ifndef _LIBP_ALIGN_H_
#define _LIBP_ALIGN_H_
/*
* a type with the most strict alignment requirements
*/
union max_align
{
char c;
short s;
long l;
int i;
float f;
double d;
void * v;
void (*q)(void);
};
typedef union max_align max_align_t;
#endif

View File

@@ -1,254 +0,0 @@
/*
* Copyright (c) 2004i-2010 Alex Pankratov. All rights reserved.
*
* Hierarchical memory allocator, 1.2.1
* http://swapped.cc/halloc
*/
/*
* The program is distributed under terms of BSD license.
* You can obtain the copy of the license by visiting:
*
* http://www.opensource.org/licenses/bsd-license.php
*/
#include <stdlib.h> /* realloc */
#include <string.h> /* memset & co */
#include "../halloc.h"
#include "align.h"
#include "hlist.h"
/*
* block control header
*/
typedef struct hblock
{
#ifndef NDEBUG
#define HH_MAGIC 0x20040518L
long magic;
#endif
hlist_item_t siblings; /* 2 pointers */
hlist_head_t children; /* 1 pointer */
max_align_t data[1]; /* not allocated, see below */
} hblock_t;
#define sizeof_hblock offsetof(hblock_t, data)
/*
*
*/
realloc_t halloc_allocator = NULL;
#define allocator halloc_allocator
/*
* static methods
*/
static void _set_allocator(void);
static void * _realloc(void * ptr, size_t n);
static int _relate(hblock_t * b, hblock_t * p);
static void _free_children(hblock_t * p);
/*
* Core API
*/
void * halloc(void * ptr, size_t len)
{
hblock_t * p;
/* set up default allocator */
if (! allocator)
{
_set_allocator();
assert(allocator);
}
/* calloc */
if (! ptr)
{
if (! len)
return NULL;
p = allocator(0, len + sizeof_hblock);
if (! p)
return NULL;
#ifndef NDEBUG
p->magic = HH_MAGIC;
#endif
hlist_init(&p->children);
hlist_init_item(&p->siblings);
return p->data;
}
p = structof(ptr, hblock_t, data);
assert(p->magic == HH_MAGIC);
/* realloc */
if (len)
{
p = allocator(p, len + sizeof_hblock);
if (! p)
return NULL;
hlist_relink(&p->siblings);
hlist_relink_head(&p->children);
return p->data;
}
/* free */
_free_children(p);
hlist_del(&p->siblings);
allocator(p, 0);
return NULL;
}
void hattach(void * block, void * parent)
{
hblock_t * b, * p;
if (! block)
{
assert(! parent);
return;
}
/* detach */
b = structof(block, hblock_t, data);
assert(b->magic == HH_MAGIC);
hlist_del(&b->siblings);
if (! parent)
return;
/* attach */
p = structof(parent, hblock_t, data);
assert(p->magic == HH_MAGIC);
/* sanity checks */
assert(b != p); /* trivial */
assert(! _relate(p, b)); /* heavy ! */
hlist_add(&p->children, &b->siblings);
}
/*
* malloc/free api
*/
void * h_malloc(size_t len)
{
return halloc(0, len);
}
void * h_calloc(size_t n, size_t len)
{
void * ptr = halloc(0, len*=n);
return ptr ? memset(ptr, 0, len) : NULL;
}
void * h_realloc(void * ptr, size_t len)
{
return halloc(ptr, len);
}
void h_free(void * ptr)
{
halloc(ptr, 0);
}
char * h_strdup(const char * str)
{
size_t len = strlen(str);
char * ptr = halloc(0, len + 1);
return ptr ? (ptr[len] = 0, memcpy(ptr, str, len)) : NULL;
}
/*
* static stuff
*/
static void _set_allocator(void)
{
void * p;
assert(! allocator);
/*
* the purpose of the test below is to check the behaviour
* of realloc(ptr, 0), which is defined in the standard
* as an implementation-specific. if it returns zero,
* then it's equivalent to free(). it can however return
* non-zero, in which case it cannot be used for freeing
* memory blocks and we'll need to supply our own version
*
* Thanks to Stan Tobias for pointing this tricky part out.
*/
allocator = realloc;
if (! (p = malloc(1)))
/* hmm */
return;
if ((p = realloc(p, 0)))
{
/* realloc cannot be used as free() */
allocator = _realloc;
free(p);
}
}
static void * _realloc(void * ptr, size_t n)
{
/*
* free'ing realloc()
*/
if (n)
return realloc(ptr, n);
free(ptr);
return NULL;
}
static int _relate(hblock_t * b, hblock_t * p)
{
hlist_item_t * i;
if (!b || !p)
return 0;
/*
* since there is no 'parent' pointer, which would've allowed
* O(log(n)) upward traversal, the check must use O(n) downward
* iteration of the entire hierarchy; and this can be VERY SLOW
*/
hlist_for_each(i, &p->children)
{
hblock_t * q = structof(i, hblock_t, siblings);
if (q == b || _relate(b, q))
return 1;
}
return 0;
}
static void _free_children(hblock_t * p)
{
hlist_item_t * i, * tmp;
#ifndef NDEBUG
/*
* this catches loops in hierarchy with almost zero
* overhead (compared to _relate() running time)
*/
assert(p && p->magic == HH_MAGIC);
p->magic = 0;
#endif
hlist_for_each_safe(i, tmp, &p->children)
{
hblock_t * q = structof(i, hblock_t, siblings);
_free_children(q);
allocator(q, 0);
}
}

View File

@@ -1,136 +0,0 @@
/*
* Copyright (c) 2004-2010 Alex Pankratov. All rights reserved.
*
* Hierarchical memory allocator, 1.2.1
* http://swapped.cc/halloc
*/
/*
* The program is distributed under terms of BSD license.
* You can obtain the copy of the license by visiting:
*
* http://www.opensource.org/licenses/bsd-license.php
*/
#ifndef _LIBP_HLIST_H_
#define _LIBP_HLIST_H_
#include <assert.h>
#include "macros.h" /* static_inline */
/*
* weak double-linked list w/ tail sentinel
*/
typedef struct hlist_head hlist_head_t;
typedef struct hlist_item hlist_item_t;
/*
*
*/
struct hlist_head
{
hlist_item_t * next;
};
struct hlist_item
{
hlist_item_t * next;
hlist_item_t ** prev;
};
/*
* shared tail sentinel
*/
struct hlist_item hlist_null;
/*
*
*/
#define __hlist_init(h) { &hlist_null }
#define __hlist_init_item(i) { &hlist_null, &(i).next }
static_inline void hlist_init(hlist_head_t * h);
static_inline void hlist_init_item(hlist_item_t * i);
/* static_inline void hlist_purge(hlist_head_t * h); */
/* static_inline bool_t hlist_empty(const hlist_head_t * h); */
/* static_inline hlist_item_t * hlist_head(const hlist_head_t * h); */
/* static_inline hlist_item_t * hlist_next(const hlist_item_t * i); */
/* static_inline hlist_item_t * hlist_prev(const hlist_item_t * i,
const hlist_head_t * h); */
static_inline void hlist_add(hlist_head_t * h, hlist_item_t * i);
/* static_inline void hlist_add_prev(hlist_item_t * l, hlist_item_t * i); */
/* static_inline void hlist_add_next(hlist_item_t * l, hlist_item_t * i); */
static_inline void hlist_del(hlist_item_t * i);
static_inline void hlist_relink(hlist_item_t * i);
static_inline void hlist_relink_head(hlist_head_t * h);
#define hlist_for_each(i, h) \
for (i = (h)->next; i != &hlist_null; i = i->next)
#define hlist_for_each_safe(i, tmp, h) \
for (i = (h)->next, tmp = i->next; \
i!= &hlist_null; \
i = tmp, tmp = i->next)
/*
* static
*/
static_inline void hlist_init(hlist_head_t * h)
{
assert(h);
h->next = &hlist_null;
}
static_inline void hlist_init_item(hlist_item_t * i)
{
assert(i);
i->prev = &i->next;
i->next = &hlist_null;
}
static_inline void hlist_add(hlist_head_t * h, hlist_item_t * i)
{
hlist_item_t * next;
assert(h && i);
next = i->next = h->next;
next->prev = &i->next;
h->next = i;
i->prev = &h->next;
}
static_inline void hlist_del(hlist_item_t * i)
{
hlist_item_t * next;
assert(i);
next = i->next;
next->prev = i->prev;
*i->prev = next;
hlist_init_item(i);
}
static_inline void hlist_relink(hlist_item_t * i)
{
assert(i);
*i->prev = i;
i->next->prev = &i->next;
}
static_inline void hlist_relink_head(hlist_head_t * h)
{
assert(h);
h->next->prev = &h->next;
}
#endif

View File

@@ -1,36 +0,0 @@
/*
* Copyright (c) 2004-2010 Alex Pankratov. All rights reserved.
*
* Hierarchical memory allocator, 1.2.1
* http://swapped.cc/halloc
*/
/*
* The program is distributed under terms of BSD license.
* You can obtain the copy of the license by visiting:
*
* http://www.opensource.org/licenses/bsd-license.php
*/
#ifndef _LIBP_MACROS_H_
#define _LIBP_MACROS_H_
#include <stddef.h> /* offsetof */
/*
restore pointer to the structure by a pointer to its field
*/
#define structof(p,t,f) ((t*)(- offsetof(t,f) + (char*)(p)))
/*
* redefine for the target compiler
*/
#ifdef _WIN32
#define static_inline static __inline
#else
#define static_inline static __inline__
#endif
#endif

View File

@@ -1,292 +0,0 @@
/*
* Copyright © 2010 Mozilla Foundation
*
* This program is made available under an ISC-style license. See the
* accompanying file LICENSE for details.
*/
#ifndef NESTEGG_671cac2a_365d_ed69_d7a3_4491d3538d79
#define NESTEGG_671cac2a_365d_ed69_d7a3_4491d3538d79
#include "vpx/vpx_integer.h"
#ifdef __cplusplus
extern "C" {
#endif
/** @mainpage
@section intro Introduction
This is the documentation fot the <tt>libnestegg</tt> C API.
<tt>libnestegg</tt> is a demultiplexing library for <a
href="http://www.matroska.org/">Matroska</a> and <a
href="http://www.webmproject.org/">WebMedia</a> media files.
@section example Example code
@code
nestegg * demux_ctx;
nestegg_init(&demux_ctx, io, NULL);
nestegg_packet * pkt;
while ((r = nestegg_read_packet(demux_ctx, &pkt)) > 0) {
unsigned int track;
nestegg_packet_track(pkt, &track);
// This example decodes the first track only.
if (track == 0) {
unsigned int chunk, chunks;
nestegg_packet_count(pkt, &chunks);
// Decode each chunk of data.
for (chunk = 0; chunk < chunks; ++chunk) {
unsigned char * data;
size_t data_size;
nestegg_packet_data(pkt, chunk, &data, &data_size);
example_codec_decode(codec_ctx, data, data_size);
}
}
nestegg_free_packet(pkt);
}
nestegg_destroy(demux_ctx);
@endcode
*/
/** @file
The <tt>libnestegg</tt> C API. */
#define NESTEGG_TRACK_VIDEO 0 /**< Track is of type video. */
#define NESTEGG_TRACK_AUDIO 1 /**< Track is of type audio. */
#define NESTEGG_CODEC_VP8 0 /**< Track uses Google On2 VP8 codec. */
#define NESTEGG_CODEC_VORBIS 1 /**< Track uses Xiph Vorbis codec. */
#define NESTEGG_SEEK_SET 0 /**< Seek offset relative to beginning of stream. */
#define NESTEGG_SEEK_CUR 1 /**< Seek offset relative to current position in stream. */
#define NESTEGG_SEEK_END 2 /**< Seek offset relative to end of stream. */
#define NESTEGG_LOG_DEBUG 1 /**< Debug level log message. */
#define NESTEGG_LOG_INFO 10 /**< Informational level log message. */
#define NESTEGG_LOG_WARNING 100 /**< Warning level log message. */
#define NESTEGG_LOG_ERROR 1000 /**< Error level log message. */
#define NESTEGG_LOG_CRITICAL 10000 /**< Critical level log message. */
typedef struct nestegg nestegg; /**< Opaque handle referencing the stream state. */
typedef struct nestegg_packet nestegg_packet; /**< Opaque handle referencing a packet of data. */
/** User supplied IO context. */
typedef struct {
/** User supplied read callback.
@param buffer Buffer to read data into.
@param length Length of supplied buffer in bytes.
@param userdata The #userdata supplied by the user.
@retval 1 Read succeeded.
@retval 0 End of stream.
@retval -1 Error. */
int (* read)(void * buffer, size_t length, void * userdata);
/** User supplied seek callback.
@param offset Offset within the stream to seek to.
@param whence Seek direction. One of #NESTEGG_SEEK_SET,
#NESTEGG_SEEK_CUR, or #NESTEGG_SEEK_END.
@param userdata The #userdata supplied by the user.
@retval 0 Seek succeeded.
@retval -1 Error. */
int (* seek)(int64_t offset, int whence, void * userdata);
/** User supplied tell callback.
@param userdata The #userdata supplied by the user.
@returns Current position within the stream.
@retval -1 Error. */
int64_t (* tell)(void * userdata);
/** User supplied pointer to be passed to the IO callbacks. */
void * userdata;
} nestegg_io;
/** Parameters specific to a video track. */
typedef struct {
unsigned int width; /**< Width of the video frame in pixels. */
unsigned int height; /**< Height of the video frame in pixels. */
unsigned int display_width; /**< Display width of the video frame in pixels. */
unsigned int display_height; /**< Display height of the video frame in pixels. */
unsigned int crop_bottom; /**< Pixels to crop from the bottom of the frame. */
unsigned int crop_top; /**< Pixels to crop from the top of the frame. */
unsigned int crop_left; /**< Pixels to crop from the left of the frame. */
unsigned int crop_right; /**< Pixels to crop from the right of the frame. */
} nestegg_video_params;
/** Parameters specific to an audio track. */
typedef struct {
double rate; /**< Sampling rate in Hz. */
unsigned int channels; /**< Number of audio channels. */
unsigned int depth; /**< Bits per sample. */
} nestegg_audio_params;
/** Logging callback function pointer. */
typedef void (* nestegg_log)(nestegg * context, unsigned int severity, char const * format, ...);
/** Initialize a nestegg context. During initialization the parser will
read forward in the stream processing all elements until the first
block of media is reached. All track metadata has been processed at this point.
@param context Storage for the new nestegg context. @see nestegg_destroy
@param io User supplied IO context.
@param callback Optional logging callback function pointer. May be NULL.
@retval 0 Success.
@retval -1 Error. */
int nestegg_init(nestegg ** context, nestegg_io io, nestegg_log callback);
/** Destroy a nestegg context and free associated memory.
@param context #nestegg context to be freed. @see nestegg_init */
void nestegg_destroy(nestegg * context);
/** Query the duration of the media stream in nanoseconds.
@param context Stream context initialized by #nestegg_init.
@param duration Storage for the queried duration.
@retval 0 Success.
@retval -1 Error. */
int nestegg_duration(nestegg * context, uint64_t * duration);
/** Query the tstamp scale of the media stream in nanoseconds.
Timecodes presented by nestegg have been scaled by this value
before presentation to the caller.
@param context Stream context initialized by #nestegg_init.
@param scale Storage for the queried scale factor.
@retval 0 Success.
@retval -1 Error. */
int nestegg_tstamp_scale(nestegg * context, uint64_t * scale);
/** Query the number of tracks in the media stream.
@param context Stream context initialized by #nestegg_init.
@param tracks Storage for the queried track count.
@retval 0 Success.
@retval -1 Error. */
int nestegg_track_count(nestegg * context, unsigned int * tracks);
/** Seek @a track to @a tstamp. Stream seek will terminate at the earliest
key point in the stream at or before @a tstamp. Other tracks in the
stream will output packets with unspecified but nearby timestamps.
@param context Stream context initialized by #nestegg_init.
@param track Zero based track number.
@param tstamp Absolute timestamp in nanoseconds.
@retval 0 Success.
@retval -1 Error. */
int nestegg_track_seek(nestegg * context, unsigned int track, uint64_t tstamp);
/** Query the type specified by @a track.
@param context Stream context initialized by #nestegg_init.
@param track Zero based track number.
@retval #NESTEGG_TRACK_VIDEO Track type is video.
@retval #NESTEGG_TRACK_AUDIO Track type is audio.
@retval -1 Error. */
int nestegg_track_type(nestegg * context, unsigned int track);
/** Query the codec ID specified by @a track.
@param context Stream context initialized by #nestegg_init.
@param track Zero based track number.
@retval #NESTEGG_CODEC_VP8 Track codec is VP8.
@retval #NESTEGG_CODEC_VORBIS Track codec is Vorbis.
@retval -1 Error. */
int nestegg_track_codec_id(nestegg * context, unsigned int track);
/** Query the number of codec initialization chunks for @a track. Each
chunk of data should be passed to the codec initialization functions in
the order returned.
@param context Stream context initialized by #nestegg_init.
@param track Zero based track number.
@param count Storage for the queried chunk count.
@retval 0 Success.
@retval -1 Error. */
int nestegg_track_codec_data_count(nestegg * context, unsigned int track,
unsigned int * count);
/** Get a pointer to chunk number @a item of codec initialization data for
@a track.
@param context Stream context initialized by #nestegg_init.
@param track Zero based track number.
@param item Zero based chunk item number.
@param data Storage for the queried data pointer.
The data is owned by the #nestegg context.
@param length Storage for the queried data size.
@retval 0 Success.
@retval -1 Error. */
int nestegg_track_codec_data(nestegg * context, unsigned int track, unsigned int item,
unsigned char ** data, size_t * length);
/** Query the video parameters specified by @a track.
@param context Stream context initialized by #nestegg_init.
@param track Zero based track number.
@param params Storage for the queried video parameters.
@retval 0 Success.
@retval -1 Error. */
int nestegg_track_video_params(nestegg * context, unsigned int track,
nestegg_video_params * params);
/** Query the audio parameters specified by @a track.
@param context Stream context initialized by #nestegg_init.
@param track Zero based track number.
@param params Storage for the queried audio parameters.
@retval 0 Success.
@retval -1 Error. */
int nestegg_track_audio_params(nestegg * context, unsigned int track,
nestegg_audio_params * params);
/** Read a packet of media data. A packet consists of one or more chunks of
data associated with a single track. nestegg_read_packet should be
called in a loop while the return value is 1 to drive the stream parser
forward. @see nestegg_free_packet
@param context Context returned by #nestegg_init.
@param packet Storage for the returned nestegg_packet.
@retval 1 Additional packets may be read in subsequent calls.
@retval 0 End of stream.
@retval -1 Error. */
int nestegg_read_packet(nestegg * context, nestegg_packet ** packet);
/** Destroy a nestegg_packet and free associated memory.
@param packet #nestegg_packet to be freed. @see nestegg_read_packet */
void nestegg_free_packet(nestegg_packet * packet);
/** Query the track number of @a packet.
@param packet Packet initialized by #nestegg_read_packet.
@param track Storage for the queried zero based track index.
@retval 0 Success.
@retval -1 Error. */
int nestegg_packet_track(nestegg_packet * packet, unsigned int * track);
/** Query the time stamp in nanoseconds of @a packet.
@param packet Packet initialized by #nestegg_read_packet.
@param tstamp Storage for the queried timestamp in nanoseconds.
@retval 0 Success.
@retval -1 Error. */
int nestegg_packet_tstamp(nestegg_packet * packet, uint64_t * tstamp);
/** Query the number of data chunks contained in @a packet.
@param packet Packet initialized by #nestegg_read_packet.
@param count Storage for the queried timestamp in nanoseconds.
@retval 0 Success.
@retval -1 Error. */
int nestegg_packet_count(nestegg_packet * packet, unsigned int * count);
/** Get a pointer to chunk number @a item of packet data.
@param packet Packet initialized by #nestegg_read_packet.
@param item Zero based chunk item number.
@param data Storage for the queried data pointer.
The data is owned by the #nestegg_packet packet.
@param length Storage for the queried data size.
@retval 0 Success.
@retval -1 Error. */
int nestegg_packet_data(nestegg_packet * packet, unsigned int item,
unsigned char ** data, size_t * length);
#ifdef __cplusplus
}
#endif
#endif /* NESTEGG_671cac2a_365d_ed69_d7a3_4491d3538d79 */

View File

@@ -1,43 +0,0 @@
dnl as-ac-expand.m4 0.2.0
dnl autostars m4 macro for expanding directories using configure's prefix
dnl thomas@apestaart.org
dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR)
dnl example
dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir)
dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local
AC_DEFUN([AS_AC_EXPAND],
[
EXP_VAR=[$1]
FROM_VAR=[$2]
dnl first expand prefix and exec_prefix if necessary
prefix_save=$prefix
exec_prefix_save=$exec_prefix
dnl if no prefix given, then use /usr/local, the default prefix
if test "x$prefix" = "xNONE"; then
prefix="$ac_default_prefix"
fi
dnl if no exec_prefix given, then use prefix
if test "x$exec_prefix" = "xNONE"; then
exec_prefix=$prefix
fi
full_var="$FROM_VAR"
dnl loop until it doesn't change anymore
while true; do
new_full_var="`eval echo $full_var`"
if test "x$new_full_var" = "x$full_var"; then break; fi
full_var=$new_full_var
done
dnl clean up
full_var=$new_full_var
AC_SUBST([$1], "$full_var")
dnl restore prefix and exec_prefix
prefix=$prefix_save
exec_prefix=$exec_prefix_save
])

View File

@@ -1,695 +0,0 @@
dnl @synopsis AX_CREATE_STDINT_H [( HEADER-TO-GENERATE [, HEDERS-TO-CHECK])]
dnl
dnl the "ISO C9X: 7.18 Integer types <stdint.h>" section requires the
dnl existence of an include file <stdint.h> that defines a set of
dnl typedefs, especially uint8_t,int32_t,uintptr_t. Many older
dnl installations will not provide this file, but some will have the
dnl very same definitions in <inttypes.h>. In other enviroments we can
dnl use the inet-types in <sys/types.h> which would define the typedefs
dnl int8_t and u_int8_t respectivly.
dnl
dnl This macros will create a local "_stdint.h" or the headerfile given
dnl as an argument. In many cases that file will just "#include
dnl <stdint.h>" or "#include <inttypes.h>", while in other environments
dnl it will provide the set of basic 'stdint's definitions/typedefs:
dnl
dnl int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t
dnl int_least32_t.. int_fast32_t.. intmax_t
dnl
dnl which may or may not rely on the definitions of other files, or
dnl using the AC_CHECK_SIZEOF macro to determine the actual sizeof each
dnl type.
dnl
dnl if your header files require the stdint-types you will want to
dnl create an installable file mylib-int.h that all your other
dnl installable header may include. So if you have a library package
dnl named "mylib", just use
dnl
dnl AX_CREATE_STDINT_H(mylib-int.h)
dnl
dnl in configure.ac and go to install that very header file in
dnl Makefile.am along with the other headers (mylib.h) - and the
dnl mylib-specific headers can simply use "#include <mylib-int.h>" to
dnl obtain the stdint-types.
dnl
dnl Remember, if the system already had a valid <stdint.h>, the
dnl generated file will include it directly. No need for fuzzy
dnl HAVE_STDINT_H things... (oops, GCC 4.2.x has deliberatly disabled
dnl its stdint.h for non-c99 compilation and the c99-mode is not the
dnl default. Therefore this macro will not use the compiler's stdint.h
dnl - please complain to the GCC developers).
dnl
dnl @category C
dnl @author Guido U. Draheim <guidod@gmx.de>
dnl @version 2006-10-13
dnl @license GPLWithACException
AC_DEFUN([AX_CHECK_DATA_MODEL],[
AC_CHECK_SIZEOF(char)
AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(void*)
ac_cv_char_data_model=""
ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char"
ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short"
ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int"
ac_cv_long_data_model=""
ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int"
ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long"
ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp"
AC_MSG_CHECKING([data model])
case "$ac_cv_char_data_model/$ac_cv_long_data_model" in
122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;;
122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;;
122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;;
124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;;
124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;;
124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;;
124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;;
128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;;
128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;;
222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;;
333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;;
444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;;
666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;;
888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;;
222/*|333/*|444/*|666/*|888/*) :
ac_cv_data_model="iDSP" ; n="unusual dsptype" ;;
*) ac_cv_data_model="none" ; n="very unusual model" ;;
esac
AC_MSG_RESULT([$ac_cv_data_model ($ac_cv_long_data_model, $n)])
])
dnl AX_CHECK_HEADER_STDINT_X([HEADERLIST][,ACTION-IF])
AC_DEFUN([AX_CHECK_HEADER_STDINT_X],[
AC_CACHE_CHECK([for stdint uintptr_t], [ac_cv_header_stdint_x],[
ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h)
AC_MSG_RESULT([(..)])
for i in m4_ifval([$1],[$1],[stdint.h inttypes.h sys/inttypes.h sys/types.h])
do
unset ac_cv_type_uintptr_t
unset ac_cv_type_uint64_t
AC_CHECK_TYPE(uintptr_t,[ac_cv_header_stdint_x=$i],continue,[#include <$i>])
AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>])
m4_ifvaln([$1],[$1]) break
done
AC_MSG_CHECKING([for stdint uintptr_t])
])
])
AC_DEFUN([AX_CHECK_HEADER_STDINT_O],[
AC_CACHE_CHECK([for stdint uint32_t], [ac_cv_header_stdint_o],[
ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h)
AC_MSG_RESULT([(..)])
for i in m4_ifval([$1],[$1],[inttypes.h sys/inttypes.h sys/types.h stdint.h])
do
unset ac_cv_type_uint32_t
unset ac_cv_type_uint64_t
AC_CHECK_TYPE(uint32_t,[ac_cv_header_stdint_o=$i],continue,[#include <$i>])
AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>])
m4_ifvaln([$1],[$1]) break
break;
done
AC_MSG_CHECKING([for stdint uint32_t])
])
])
AC_DEFUN([AX_CHECK_HEADER_STDINT_U],[
AC_CACHE_CHECK([for stdint u_int32_t], [ac_cv_header_stdint_u],[
ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h)
AC_MSG_RESULT([(..)])
for i in m4_ifval([$1],[$1],[sys/types.h inttypes.h sys/inttypes.h]) ; do
unset ac_cv_type_u_int32_t
unset ac_cv_type_u_int64_t
AC_CHECK_TYPE(u_int32_t,[ac_cv_header_stdint_u=$i],continue,[#include <$i>])
AC_CHECK_TYPE(u_int64_t,[and64="/u_int64_t"],[and64=""],[#include<$i>])
m4_ifvaln([$1],[$1]) break
break;
done
AC_MSG_CHECKING([for stdint u_int32_t])
])
])
AC_DEFUN([AX_CREATE_STDINT_H],
[# ------ AX CREATE STDINT H -------------------------------------
AC_MSG_CHECKING([for stdint types])
ac_stdint_h=`echo ifelse($1, , _stdint.h, $1)`
# try to shortcircuit - if the default include path of the compiler
# can find a "stdint.h" header then we assume that all compilers can.
AC_CACHE_VAL([ac_cv_header_stdint_t],[
old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS=""
old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS=""
old_CFLAGS="$CFLAGS" ; CFLAGS=""
AC_TRY_COMPILE([#include <stdint.h>],[int_least32_t v = 0;],
[ac_cv_stdint_result="(assuming C99 compatible system)"
ac_cv_header_stdint_t="stdint.h"; ],
[ac_cv_header_stdint_t=""])
if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then
CFLAGS="-std=c99"
AC_TRY_COMPILE([#include <stdint.h>],[int_least32_t v = 0;],
[AC_MSG_WARN(your GCC compiler has a defunct stdint.h for its default-mode)])
fi
CXXFLAGS="$old_CXXFLAGS"
CPPFLAGS="$old_CPPFLAGS"
CFLAGS="$old_CFLAGS" ])
v="... $ac_cv_header_stdint_h"
if test "$ac_stdint_h" = "stdint.h" ; then
AC_MSG_RESULT([(are you sure you want them in ./stdint.h?)])
elif test "$ac_stdint_h" = "inttypes.h" ; then
AC_MSG_RESULT([(are you sure you want them in ./inttypes.h?)])
elif test "_$ac_cv_header_stdint_t" = "_" ; then
AC_MSG_RESULT([(putting them into $ac_stdint_h)$v])
else
ac_cv_header_stdint="$ac_cv_header_stdint_t"
AC_MSG_RESULT([$ac_cv_header_stdint (shortcircuit)])
fi
if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit..
dnl .....intro message done, now do a few system checks.....
dnl btw, all old CHECK_TYPE macros do automatically "DEFINE" a type,
dnl therefore we use the autoconf implementation detail CHECK_TYPE_NEW
dnl instead that is triggered with 3 or more arguments (see types.m4)
inttype_headers=`echo $2 | sed -e 's/,/ /g'`
ac_cv_stdint_result="(no helpful system typedefs seen)"
AX_CHECK_HEADER_STDINT_X(dnl
stdint.h inttypes.h sys/inttypes.h $inttype_headers,
ac_cv_stdint_result="(seen uintptr_t$and64 in $i)")
if test "_$ac_cv_header_stdint_x" = "_" ; then
AX_CHECK_HEADER_STDINT_O(dnl,
inttypes.h sys/inttypes.h stdint.h $inttype_headers,
ac_cv_stdint_result="(seen uint32_t$and64 in $i)")
fi
if test "_$ac_cv_header_stdint_x" = "_" ; then
if test "_$ac_cv_header_stdint_o" = "_" ; then
AX_CHECK_HEADER_STDINT_U(dnl,
sys/types.h inttypes.h sys/inttypes.h $inttype_headers,
ac_cv_stdint_result="(seen u_int32_t$and64 in $i)")
fi fi
dnl if there was no good C99 header file, do some typedef checks...
if test "_$ac_cv_header_stdint_x" = "_" ; then
AC_MSG_CHECKING([for stdint datatype model])
AC_MSG_RESULT([(..)])
AX_CHECK_DATA_MODEL
fi
if test "_$ac_cv_header_stdint_x" != "_" ; then
ac_cv_header_stdint="$ac_cv_header_stdint_x"
elif test "_$ac_cv_header_stdint_o" != "_" ; then
ac_cv_header_stdint="$ac_cv_header_stdint_o"
elif test "_$ac_cv_header_stdint_u" != "_" ; then
ac_cv_header_stdint="$ac_cv_header_stdint_u"
else
ac_cv_header_stdint="stddef.h"
fi
AC_MSG_CHECKING([for extra inttypes in chosen header])
AC_MSG_RESULT([($ac_cv_header_stdint)])
dnl see if int_least and int_fast types are present in _this_ header.
unset ac_cv_type_int_least32_t
unset ac_cv_type_int_fast32_t
AC_CHECK_TYPE(int_least32_t,,,[#include <$ac_cv_header_stdint>])
AC_CHECK_TYPE(int_fast32_t,,,[#include<$ac_cv_header_stdint>])
AC_CHECK_TYPE(intmax_t,,,[#include <$ac_cv_header_stdint>])
fi # shortcircut to system "stdint.h"
# ------------------ PREPARE VARIABLES ------------------------------
if test "$GCC" = "yes" ; then
ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1`
else
ac_cv_stdint_message="using $CC"
fi
AC_MSG_RESULT([make use of $ac_cv_header_stdint in $ac_stdint_h dnl
$ac_cv_stdint_result])
dnl -----------------------------------------------------------------
# ----------------- DONE inttypes.h checks START header -------------
AC_CONFIG_COMMANDS([$ac_stdint_h],[
AC_MSG_NOTICE(creating $ac_stdint_h : $_ac_stdint_h)
ac_stdint=$tmp/_stdint.h
echo "#ifndef" $_ac_stdint_h >$ac_stdint
echo "#define" $_ac_stdint_h "1" >>$ac_stdint
echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint
echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint
echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint
if test "_$ac_cv_header_stdint_t" != "_" ; then
echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint
echo "#include <stdint.h>" >>$ac_stdint
echo "#endif" >>$ac_stdint
echo "#endif" >>$ac_stdint
else
cat >>$ac_stdint <<STDINT_EOF
/* ................... shortcircuit part ........................... */
#if defined HAVE_STDINT_H || defined _STDINT_HAVE_STDINT_H
#include <stdint.h>
#else
#include <stddef.h>
/* .................... configured part ............................ */
STDINT_EOF
echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint
if test "_$ac_cv_header_stdint_x" != "_" ; then
ac_header="$ac_cv_header_stdint_x"
echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint
else
echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint
fi
echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint
if test "_$ac_cv_header_stdint_o" != "_" ; then
ac_header="$ac_cv_header_stdint_o"
echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint
else
echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint
fi
echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint
if test "_$ac_cv_header_stdint_u" != "_" ; then
ac_header="$ac_cv_header_stdint_u"
echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint
else
echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint
fi
echo "" >>$ac_stdint
if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then
echo "#include <$ac_header>" >>$ac_stdint
echo "" >>$ac_stdint
fi fi
echo "/* which 64bit typedef has been found */" >>$ac_stdint
if test "$ac_cv_type_uint64_t" = "yes" ; then
echo "#define _STDINT_HAVE_UINT64_T" "1" >>$ac_stdint
else
echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint
fi
if test "$ac_cv_type_u_int64_t" = "yes" ; then
echo "#define _STDINT_HAVE_U_INT64_T" "1" >>$ac_stdint
else
echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint
fi
echo "" >>$ac_stdint
echo "/* which type model has been detected */" >>$ac_stdint
if test "_$ac_cv_char_data_model" != "_" ; then
echo "#define _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint
echo "#define _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint
else
echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint
echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint
fi
echo "" >>$ac_stdint
echo "/* whether int_least types were detected */" >>$ac_stdint
if test "$ac_cv_type_int_least32_t" = "yes"; then
echo "#define _STDINT_HAVE_INT_LEAST32_T" "1" >>$ac_stdint
else
echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint
fi
echo "/* whether int_fast types were detected */" >>$ac_stdint
if test "$ac_cv_type_int_fast32_t" = "yes"; then
echo "#define _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint
else
echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint
fi
echo "/* whether intmax_t type was detected */" >>$ac_stdint
if test "$ac_cv_type_intmax_t" = "yes"; then
echo "#define _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint
else
echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint
fi
echo "" >>$ac_stdint
cat >>$ac_stdint <<STDINT_EOF
/* .................... detections part ............................ */
/* whether we need to define bitspecific types from compiler base types */
#ifndef _STDINT_HEADER_INTPTR
#ifndef _STDINT_HEADER_UINT32
#ifndef _STDINT_HEADER_U_INT32
#define _STDINT_NEED_INT_MODEL_T
#else
#define _STDINT_HAVE_U_INT_TYPES
#endif
#endif
#endif
#ifdef _STDINT_HAVE_U_INT_TYPES
#undef _STDINT_NEED_INT_MODEL_T
#endif
#ifdef _STDINT_CHAR_MODEL
#if _STDINT_CHAR_MODEL+0 == 122 || _STDINT_CHAR_MODEL+0 == 124
#ifndef _STDINT_BYTE_MODEL
#define _STDINT_BYTE_MODEL 12
#endif
#endif
#endif
#ifndef _STDINT_HAVE_INT_LEAST32_T
#define _STDINT_NEED_INT_LEAST_T
#endif
#ifndef _STDINT_HAVE_INT_FAST32_T
#define _STDINT_NEED_INT_FAST_T
#endif
#ifndef _STDINT_HEADER_INTPTR
#define _STDINT_NEED_INTPTR_T
#ifndef _STDINT_HAVE_INTMAX_T
#define _STDINT_NEED_INTMAX_T
#endif
#endif
/* .................... definition part ............................ */
/* some system headers have good uint64_t */
#ifndef _HAVE_UINT64_T
#if defined _STDINT_HAVE_UINT64_T || defined HAVE_UINT64_T
#define _HAVE_UINT64_T
#elif defined _STDINT_HAVE_U_INT64_T || defined HAVE_U_INT64_T
#define _HAVE_UINT64_T
typedef u_int64_t uint64_t;
#endif
#endif
#ifndef _HAVE_UINT64_T
/* .. here are some common heuristics using compiler runtime specifics */
#if defined __STDC_VERSION__ && defined __STDC_VERSION__ >= 199901L
#define _HAVE_UINT64_T
#define _HAVE_LONGLONG_UINT64_T
typedef long long int64_t;
typedef unsigned long long uint64_t;
#elif !defined __STRICT_ANSI__
#if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__
#define _HAVE_UINT64_T
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
#elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__
/* note: all ELF-systems seem to have loff-support which needs 64-bit */
#if !defined _NO_LONGLONG
#define _HAVE_UINT64_T
#define _HAVE_LONGLONG_UINT64_T
typedef long long int64_t;
typedef unsigned long long uint64_t;
#endif
#elif defined __alpha || (defined __mips && defined _ABIN32)
#if !defined _NO_LONGLONG
typedef long int64_t;
typedef unsigned long uint64_t;
#endif
/* compiler/cpu type to define int64_t */
#endif
#endif
#endif
#if defined _STDINT_HAVE_U_INT_TYPES
/* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */
typedef u_int8_t uint8_t;
typedef u_int16_t uint16_t;
typedef u_int32_t uint32_t;
/* glibc compatibility */
#ifndef __int8_t_defined
#define __int8_t_defined
#endif
#endif
#ifdef _STDINT_NEED_INT_MODEL_T
/* we must guess all the basic types. Apart from byte-adressable system, */
/* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */
/* (btw, those nibble-addressable systems are way off, or so we assume) */
dnl /* have a look at "64bit and data size neutrality" at */
dnl /* http://unix.org/version2/whatsnew/login_64bit.html */
dnl /* (the shorthand "ILP" types always have a "P" part) */
#if defined _STDINT_BYTE_MODEL
#if _STDINT_LONG_MODEL+0 == 242
/* 2:4:2 = IP16 = a normal 16-bit system */
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
#ifndef __int8_t_defined
#define __int8_t_defined
typedef char int8_t;
typedef short int16_t;
typedef long int32_t;
#endif
#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444
/* 2:4:4 = LP32 = a 32-bit system derived from a 16-bit */
/* 4:4:4 = ILP32 = a normal 32-bit system */
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
#ifndef __int8_t_defined
#define __int8_t_defined
typedef char int8_t;
typedef short int16_t;
typedef int int32_t;
#endif
#elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488
/* 4:8:4 = IP32 = a 32-bit system prepared for 64-bit */
/* 4:8:8 = LP64 = a normal 64-bit system */
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
#ifndef __int8_t_defined
#define __int8_t_defined
typedef char int8_t;
typedef short int16_t;
typedef int int32_t;
#endif
/* this system has a "long" of 64bit */
#ifndef _HAVE_UINT64_T
#define _HAVE_UINT64_T
typedef unsigned long uint64_t;
typedef long int64_t;
#endif
#elif _STDINT_LONG_MODEL+0 == 448
/* LLP64 a 64-bit system derived from a 32-bit system */
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
#ifndef __int8_t_defined
#define __int8_t_defined
typedef char int8_t;
typedef short int16_t;
typedef int int32_t;
#endif
/* assuming the system has a "long long" */
#ifndef _HAVE_UINT64_T
#define _HAVE_UINT64_T
#define _HAVE_LONGLONG_UINT64_T
typedef unsigned long long uint64_t;
typedef long long int64_t;
#endif
#else
#define _STDINT_NO_INT32_T
#endif
#else
#define _STDINT_NO_INT8_T
#define _STDINT_NO_INT32_T
#endif
#endif
/*
* quote from SunOS-5.8 sys/inttypes.h:
* Use at your own risk. As of February 1996, the committee is squarely
* behind the fixed sized types; the "least" and "fast" types are still being
* discussed. The probability that the "fast" types may be removed before
* the standard is finalized is high enough that they are not currently
* implemented.
*/
#if defined _STDINT_NEED_INT_LEAST_T
typedef int8_t int_least8_t;
typedef int16_t int_least16_t;
typedef int32_t int_least32_t;
#ifdef _HAVE_UINT64_T
typedef int64_t int_least64_t;
#endif
typedef uint8_t uint_least8_t;
typedef uint16_t uint_least16_t;
typedef uint32_t uint_least32_t;
#ifdef _HAVE_UINT64_T
typedef uint64_t uint_least64_t;
#endif
/* least types */
#endif
#if defined _STDINT_NEED_INT_FAST_T
typedef int8_t int_fast8_t;
typedef int int_fast16_t;
typedef int32_t int_fast32_t;
#ifdef _HAVE_UINT64_T
typedef int64_t int_fast64_t;
#endif
typedef uint8_t uint_fast8_t;
typedef unsigned uint_fast16_t;
typedef uint32_t uint_fast32_t;
#ifdef _HAVE_UINT64_T
typedef uint64_t uint_fast64_t;
#endif
/* fast types */
#endif
#ifdef _STDINT_NEED_INTMAX_T
#ifdef _HAVE_UINT64_T
typedef int64_t intmax_t;
typedef uint64_t uintmax_t;
#else
typedef long intmax_t;
typedef unsigned long uintmax_t;
#endif
#endif
#ifdef _STDINT_NEED_INTPTR_T
#ifndef __intptr_t_defined
#define __intptr_t_defined
/* we encourage using "long" to store pointer values, never use "int" ! */
#if _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484
typedef unsigned int uintptr_t;
typedef int intptr_t;
#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444
typedef unsigned long uintptr_t;
typedef long intptr_t;
#elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T
typedef uint64_t uintptr_t;
typedef int64_t intptr_t;
#else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */
typedef unsigned long uintptr_t;
typedef long intptr_t;
#endif
#endif
#endif
/* The ISO C99 standard specifies that in C++ implementations these
should only be defined if explicitly requested. */
#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
#ifndef UINT32_C
/* Signed. */
# define INT8_C(c) c
# define INT16_C(c) c
# define INT32_C(c) c
# ifdef _HAVE_LONGLONG_UINT64_T
# define INT64_C(c) c ## L
# else
# define INT64_C(c) c ## LL
# endif
/* Unsigned. */
# define UINT8_C(c) c ## U
# define UINT16_C(c) c ## U
# define UINT32_C(c) c ## U
# ifdef _HAVE_LONGLONG_UINT64_T
# define UINT64_C(c) c ## UL
# else
# define UINT64_C(c) c ## ULL
# endif
/* Maximal type. */
# ifdef _HAVE_LONGLONG_UINT64_T
# define INTMAX_C(c) c ## L
# define UINTMAX_C(c) c ## UL
# else
# define INTMAX_C(c) c ## LL
# define UINTMAX_C(c) c ## ULL
# endif
/* literalnumbers */
#endif
#endif
/* These limits are merily those of a two complement byte-oriented system */
/* Minimum of signed integral types. */
# define INT8_MIN (-128)
# define INT16_MIN (-32767-1)
# define INT32_MIN (-2147483647-1)
# define INT64_MIN (-__INT64_C(9223372036854775807)-1)
/* Maximum of signed integral types. */
# define INT8_MAX (127)
# define INT16_MAX (32767)
# define INT32_MAX (2147483647)
# define INT64_MAX (__INT64_C(9223372036854775807))
/* Maximum of unsigned integral types. */
# define UINT8_MAX (255)
# define UINT16_MAX (65535)
# define UINT32_MAX (4294967295U)
# define UINT64_MAX (__UINT64_C(18446744073709551615))
/* Minimum of signed integral types having a minimum size. */
# define INT_LEAST8_MIN INT8_MIN
# define INT_LEAST16_MIN INT16_MIN
# define INT_LEAST32_MIN INT32_MIN
# define INT_LEAST64_MIN INT64_MIN
/* Maximum of signed integral types having a minimum size. */
# define INT_LEAST8_MAX INT8_MAX
# define INT_LEAST16_MAX INT16_MAX
# define INT_LEAST32_MAX INT32_MAX
# define INT_LEAST64_MAX INT64_MAX
/* Maximum of unsigned integral types having a minimum size. */
# define UINT_LEAST8_MAX UINT8_MAX
# define UINT_LEAST16_MAX UINT16_MAX
# define UINT_LEAST32_MAX UINT32_MAX
# define UINT_LEAST64_MAX UINT64_MAX
/* shortcircuit*/
#endif
/* once */
#endif
#endif
STDINT_EOF
fi
if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then
AC_MSG_NOTICE([$ac_stdint_h is unchanged])
else
ac_dir=`AS_DIRNAME(["$ac_stdint_h"])`
AS_MKDIR_P(["$ac_dir"])
rm -f $ac_stdint_h
mv $ac_stdint $ac_stdint_h
fi
],[# variables for create stdint.h replacement
PACKAGE="$PACKAGE"
VERSION="$VERSION"
ac_stdint_h="$ac_stdint_h"
_ac_stdint_h=AS_TR_CPP(_$PACKAGE-$ac_stdint_h)
ac_cv_stdint_message="$ac_cv_stdint_message"
ac_cv_header_stdint_t="$ac_cv_header_stdint_t"
ac_cv_header_stdint_x="$ac_cv_header_stdint_x"
ac_cv_header_stdint_o="$ac_cv_header_stdint_o"
ac_cv_header_stdint_u="$ac_cv_header_stdint_u"
ac_cv_type_uint64_t="$ac_cv_type_uint64_t"
ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t"
ac_cv_char_data_model="$ac_cv_char_data_model"
ac_cv_long_data_model="$ac_cv_long_data_model"
ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t"
ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t"
ac_cv_type_intmax_t="$ac_cv_type_intmax_t"
])
])

View File

@@ -1,157 +0,0 @@
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
#
# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# PKG_PROG_PKG_CONFIG([MIN-VERSION])
# ----------------------------------
AC_DEFUN([PKG_PROG_PKG_CONFIG],
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
fi
if test -n "$PKG_CONFIG"; then
_pkg_min_version=m4_default([$1], [0.9.0])
AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
PKG_CONFIG=""
fi
fi[]dnl
])# PKG_PROG_PKG_CONFIG
# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
#
# Check to see whether a particular set of modules exists. Similar
# to PKG_CHECK_MODULES(), but does not set variables or print errors.
#
#
# Similar to PKG_CHECK_MODULES, make sure that the first instance of
# this or PKG_CHECK_MODULES is called, or make sure to call
# PKG_CHECK_EXISTS manually
# --------------------------------------------------------------
AC_DEFUN([PKG_CHECK_EXISTS],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
if test -n "$PKG_CONFIG" && \
AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
m4_ifval([$2], [$2], [:])
m4_ifvaln([$3], [else
$3])dnl
fi])
# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
# ---------------------------------------------
m4_define([_PKG_CONFIG],
[if test -n "$PKG_CONFIG"; then
if test -n "$$1"; then
pkg_cv_[]$1="$$1"
else
PKG_CHECK_EXISTS([$3],
[pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
[pkg_failed=yes])
fi
else
pkg_failed=untried
fi[]dnl
])# _PKG_CONFIG
# _PKG_SHORT_ERRORS_SUPPORTED
# -----------------------------
AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
_pkg_short_errors_supported=yes
else
_pkg_short_errors_supported=no
fi[]dnl
])# _PKG_SHORT_ERRORS_SUPPORTED
# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
#
#
# Note that if there is a possibility the first call to
# PKG_CHECK_MODULES might not happen, you should be sure to include an
# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
#
#
# --------------------------------------------------------------
AC_DEFUN([PKG_CHECK_MODULES],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
pkg_failed=no
AC_MSG_CHECKING([for $1])
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
_PKG_CONFIG([$1][_LIBS], [libs], [$2])
m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
and $1[]_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.])
if test $pkg_failed = yes; then
_PKG_SHORT_ERRORS_SUPPORTED
if test $_pkg_short_errors_supported = yes; then
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
else
$1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
fi
# Put the nasty error message in config.log where it belongs
echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
ifelse([$4], , [AC_MSG_ERROR(dnl
[Package requirements ($2) were not met:
$$1_PKG_ERRORS
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
_PKG_TEXT
])],
[AC_MSG_RESULT([no])
$4])
elif test $pkg_failed = untried; then
ifelse([$4], , [AC_MSG_FAILURE(dnl
[The pkg-config script could not be found or is too old. Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.
_PKG_TEXT
To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
[$4])
else
$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
AC_MSG_RESULT([yes])
ifelse([$3], , :, [$3])
fi[]dnl
])# PKG_CHECK_MODULES

View File

@@ -1,13 +0,0 @@
# nestegg uninstalled pkg-config file
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: nestegg
Description: WebM/Matroska demuxer
Version: @VERSION@
Conflicts:
Libs: -L${libdir} -lnestegg
Cflags: -I${includedir}

View File

@@ -1,13 +0,0 @@
# nestegg installed pkg-config file
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: nestegg
Description: WebM/Matroska demuxer
Version: @VERSION@
Conflicts:
Libs: -L${libdir} -lnestegg
Cflags: -I${includedir}

File diff suppressed because it is too large Load Diff

View File

@@ -1,248 +0,0 @@
/*
* Copyright © 2010 Mozilla Foundation
*
* This program is made available under an ISC-style license. See the
* accompanying file LICENSE for details.
*/
#include <assert.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "nestegg/nestegg.h"
#undef DEBUG
#define SEEK_TEST
static int
stdio_read(void * p, size_t length, void * fp)
{
size_t r;
r = fread(p, length, 1, fp);
if (r == 0 && feof(fp))
return 0;
return r == 0 ? -1 : 1;
}
static int
stdio_seek(int64_t offset, int whence, void * fp)
{
return fseek(fp, offset, whence);
}
static int64_t
stdio_tell(void * fp)
{
return ftell(fp);
}
static void
log_callback(nestegg * ctx, unsigned int severity, char const * fmt, ...)
{
va_list ap;
char const * sev = NULL;
#ifndef DEBUG
if (severity < NESTEGG_LOG_WARNING)
return;
#endif
switch (severity) {
case NESTEGG_LOG_DEBUG:
sev = "debug: ";
break;
case NESTEGG_LOG_WARNING:
sev = "warning: ";
break;
case NESTEGG_LOG_CRITICAL:
sev = "critical:";
break;
default:
sev = "unknown: ";
}
fprintf(stderr, "%p %s ", (void *) ctx, sev);
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
fprintf(stderr, "\n");
}
int
main(int argc, char * argv[])
{
FILE * fp;
int r, type;
nestegg * ctx;
nestegg_audio_params aparams;
nestegg_packet * pkt;
nestegg_video_params vparams;
size_t length, size;
uint64_t duration, tstamp, pkt_tstamp;
unsigned char * codec_data, * ptr;
unsigned int cnt, i, j, track, tracks, pkt_cnt, pkt_track;
unsigned int data_items = 0;
nestegg_io io = {
stdio_read,
stdio_seek,
stdio_tell,
NULL
};
if (argc != 2)
return EXIT_FAILURE;
fp = fopen(argv[1], "rb");
if (!fp)
return EXIT_FAILURE;
io.userdata = fp;
ctx = NULL;
r = nestegg_init(&ctx, io, log_callback);
if (r != 0)
return EXIT_FAILURE;
nestegg_track_count(ctx, &tracks);
nestegg_duration(ctx, &duration);
#ifdef DEBUG
fprintf(stderr, "media has %u tracks and duration %fs\n", tracks, duration / 1e9);
#endif
for (i = 0; i < tracks; ++i) {
type = nestegg_track_type(ctx, i);
#ifdef DEBUG
fprintf(stderr, "track %u: type: %d codec: %d", i,
type, nestegg_track_codec_id(ctx, i));
#endif
nestegg_track_codec_data_count(ctx, i, &data_items);
for (j = 0; j < data_items; ++j) {
nestegg_track_codec_data(ctx, i, j, &codec_data, &length);
#ifdef DEBUG
fprintf(stderr, " (%p, %u)", codec_data, (unsigned int) length);
#endif
}
if (type == NESTEGG_TRACK_VIDEO) {
nestegg_track_video_params(ctx, i, &vparams);
#ifdef DEBUG
fprintf(stderr, " video: %ux%u (d: %ux%u %ux%ux%ux%u)",
vparams.width, vparams.height,
vparams.display_width, vparams.display_height,
vparams.crop_top, vparams.crop_left, vparams.crop_bottom, vparams.crop_right);
#endif
} else if (type == NESTEGG_TRACK_AUDIO) {
nestegg_track_audio_params(ctx, i, &aparams);
#ifdef DEBUG
fprintf(stderr, " audio: %.2fhz %u bit %u channels",
aparams.rate, aparams.depth, aparams.channels);
#endif
}
#ifdef DEBUG
fprintf(stderr, "\n");
#endif
}
#ifdef SEEK_TEST
#ifdef DEBUG
fprintf(stderr, "seek to middle\n");
#endif
r = nestegg_track_seek(ctx, 0, duration / 2);
if (r == 0) {
#ifdef DEBUG
fprintf(stderr, "middle ");
#endif
r = nestegg_read_packet(ctx, &pkt);
if (r == 1) {
nestegg_packet_track(pkt, &track);
nestegg_packet_count(pkt, &cnt);
nestegg_packet_tstamp(pkt, &tstamp);
#ifdef DEBUG
fprintf(stderr, "* t %u pts %f frames %u\n", track, tstamp / 1e9, cnt);
#endif
nestegg_free_packet(pkt);
} else {
#ifdef DEBUG
fprintf(stderr, "middle seek failed\n");
#endif
}
}
#ifdef DEBUG
fprintf(stderr, "seek to ~end\n");
#endif
r = nestegg_track_seek(ctx, 0, duration - (duration / 10));
if (r == 0) {
#ifdef DEBUG
fprintf(stderr, "end ");
#endif
r = nestegg_read_packet(ctx, &pkt);
if (r == 1) {
nestegg_packet_track(pkt, &track);
nestegg_packet_count(pkt, &cnt);
nestegg_packet_tstamp(pkt, &tstamp);
#ifdef DEBUG
fprintf(stderr, "* t %u pts %f frames %u\n", track, tstamp / 1e9, cnt);
#endif
nestegg_free_packet(pkt);
} else {
#ifdef DEBUG
fprintf(stderr, "end seek failed\n");
#endif
}
}
#ifdef DEBUG
fprintf(stderr, "seek to ~start\n");
#endif
r = nestegg_track_seek(ctx, 0, duration / 10);
if (r == 0) {
#ifdef DEBUG
fprintf(stderr, "start ");
#endif
r = nestegg_read_packet(ctx, &pkt);
if (r == 1) {
nestegg_packet_track(pkt, &track);
nestegg_packet_count(pkt, &cnt);
nestegg_packet_tstamp(pkt, &tstamp);
#ifdef DEBUG
fprintf(stderr, "* t %u pts %f frames %u\n", track, tstamp / 1e9, cnt);
#endif
nestegg_free_packet(pkt);
} else {
#ifdef DEBUG
fprintf(stderr, "start seek failed\n");
#endif
}
}
#endif
while (nestegg_read_packet(ctx, &pkt) > 0) {
nestegg_packet_track(pkt, &pkt_track);
nestegg_packet_count(pkt, &pkt_cnt);
nestegg_packet_tstamp(pkt, &pkt_tstamp);
#ifdef DEBUG
fprintf(stderr, "t %u pts %f frames %u: ", pkt_track, pkt_tstamp / 1e9, pkt_cnt);
#endif
for (i = 0; i < pkt_cnt; ++i) {
nestegg_packet_data(pkt, i, &ptr, &size);
#ifdef DEBUG
fprintf(stderr, "%u ", (unsigned int) size);
#endif
}
#ifdef DEBUG
fprintf(stderr, "\n");
#endif
nestegg_free_packet(pkt);
}
nestegg_destroy(ctx);
fclose(fp);
return EXIT_SUCCESS;
}

210
release.sh Executable file
View File

@@ -0,0 +1,210 @@
#!/bin/sh
##
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
##
## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source
## tree. An additional intellectual property rights grant can be found
## in the file PATENTS. All contributing project authors may
## be found in the AUTHORS file in the root of the source tree.
##
self=$0
for opt; do
case $opt in
--clean) clean=yes;;
-j*) jopt=$opt;;
*) echo "Unsupported option $opt"; exit 1;;
esac
done
TAB="$(printf '\t')"
cat > release.mk << EOF
%\$(BUILD_SFX).tar.bz2: %/.done
${TAB}@echo "\$(subst .tar.bz2,,\$@): tarball"
${TAB}@cd \$(dir \$<); tar -cf - \$(subst .tar.bz2,,\$@) | bzip2 > ../\$@
%\$(BUILD_SFX).zip: %/.done
${TAB}@echo "\$(subst .zip,,\$@): zip"
${TAB}@rm -f \$@; cd \$(dir \$<); zip -rq ../\$@ \$(subst .zip,,\$@)
logs/%\$(BUILD_SFX).log.bz2: %/.done
${TAB}@echo "\$(subst .log.bz2,,\$(notdir \$@)): tarlog"
${TAB}@mkdir -p logs
${TAB}@cat \$< | bzip2 > \$@
%/.done:
${TAB}@mkdir -p \$(dir \$@)
${TAB}@echo "\$(dir \$@): configure \$(CONFIG_OPTS) \$(EXTRA_PATH)"
${TAB}@cd \$(dir \$@); export PATH=\$\$PATH\$(EXTRA_PATH); ../\$(SRC_ROOT)/configure \$(CONFIG_OPTS) >makelog.txt 2>&1
${TAB}@echo "\$(dir \$@): make"
${TAB}@cd \$(dir \$@); PATH=\$\$PATH\$(EXTRA_PATH) \$(MAKE) >>makelog.txt 2>&1
${TAB}@echo "\$(dir \$@): test install"
${TAB}@cd \$(dir \$@); PATH=\$\$PATH\$(EXTRA_PATH) \$(MAKE) install >>makelog.txt 2>&1
${TAB}@cd \$(dir \$@)/dist/build; PATH=\$\$PATH\$(EXTRA_PATH) \$(MAKE) >>makelog.txt 2>&1
${TAB}@echo "\$(dir \$@): install"
${TAB}@cd \$(dir \$@); PATH=\$\$PATH\$(EXTRA_PATH) \$(MAKE) install DIST_DIR=\$(TGT) >>makelog.txt 2>&1
${TAB}@touch \$@
#include release-deps.mk
EOF
#[ -f release-deps.mk ] || \
# find ${self%/*} -name .git -prune -o -type f -print0 \
# | xargs -0 -n1 echo \
# | sed -e 's; ;\\ ;g' | awk '{print "$(TGT)/.done: "$0}' > release-deps.mk
build_config_list() {
for codec in $CODEC_LIST; do
for arch in $ARCH_LIST; do
if [ -n "$OS_LIST" ]; then
for os in $OS_LIST; do
CONFIGS="$CONFIGS vpx-${codec}-${arch}-${os}"
done
else
CONFIGS="$CONFIGS vpx-${codec}-${arch}"
fi
done
done
}
CODEC_LIST="vp8 vp8cx vp8dx"
case `uname` in
Linux*)
ARCH_LIST="x86 x86_64"
OS_LIST="linux"
build_config_list
ARCH_LIST="armv5te armv6 armv7"
OS_LIST="linux-gcc"
;;
CYGWIN*)
TAR_SFX=.zip
for vs in vs7 vs8; do
for arch in x86-win32 x86_64-win64; do
for msvcrt in md mt; do
case $vs,$arch in
vs7,x86_64-win64) continue ;;
esac
ARCH_LIST="$ARCH_LIST ${arch}${msvcrt}-${vs}"
done
done
done
;;
Darwin*)
ARCH_LIST="universal"
OS_LIST="darwin8 darwin9"
;;
sun_os*)
ARCH_LIST="x86 x86_64"
OS_LIST="solaris"
;;
esac
build_config_list
TAR_SFX=${TAR_SFX:-.tar.bz2}
ARM_TOOLCHAIN=/usr/local/google/csl-2009q3-67
for cfg in $CONFIGS; do
full_cfg=$cfg
cfg=${cfg#vpx-}
opts=
rm -f makelog.txt
case $cfg in
src-*) opts="$opts --enable-codec-srcs"
cfg=${cfg#src-}
;;
eval-*) opts="$opts --enable-eval-limit"
cfg=${cfg#src-}
;;
esac
case $cfg in
#
# Linux
#
*x86-linux)
opts="$opts --target=x86-linux-gcc" ;;
*x86_64-linux)
opts="$opts --target=x86_64-linux-gcc" ;;
*arm*-linux-gcc)
armv=${cfg##*armv}
armv=${armv%%-*}
opts="$opts --target=armv${armv}-linux-gcc" ;;
*arm*-linux-rvct)
armv=${cfg##*armv}
armv=${armv%%-*}
opts="$opts --target=armv${armv}-linux-rvct"
opts="$opts --libc=${ARM_TOOLCHAIN}/arm-none-linux-gnueabi/libc" ;;
#
# Windows
#
# need --enable-debug-libs for now until we're smarter about
# building the debug/release from the customer installed
# environment
*-x86-win32*-vs*)
opts="$opts --target=x86-win32-vs${cfg##*-vs} --enable-debug-libs";;
*-x86_64-win64*-vs8)
opts="$opts --target=x86_64-win64-vs8 --enable-debug-libs" ;;
#
# Darwin
#
*-universal-darwin*)
opts="$opts --target=universal-darwin${cfg##*-darwin}-gcc" ;;
#
# Solaris
#
*x86-solaris)
opts="$opts --target=x86-solaris-gcc" ;;
*x86_64-solaris)
opts="$opts --target=x86_64-solaris-gcc" ;;
esac
case $cfg in
*x86-linux | *x86-solaris) opts="$opts --enable-pic" ;;
esac
case $cfg in
*-win[36][24]mt*) opts="$opts --enable-static-msvcrt" ;;
*-win[36][24]md*) opts="$opts --disable-static-msvcrt" ;;
esac
opts="$opts --disable-codecs"
case $cfg in
vp8*) opts="$opts --enable-vp8" ;;
esac
case $cfg in
*cx-*) opts="${opts}-encoder" ;;
*dx-*) opts="${opts}-decoder" ;;
esac
opts="$opts --enable-postproc"
[ "x${clean}" = "xyes" ] \
&& rm -rf ${full_cfg}${BUILD_SFX}${TAR_SFX} \
&& rm -rf logs/${full_cfg}${BUILD_SFX}.log.bz2
TGT=${full_cfg}${BUILD_SFX}
BUILD_TARGETS="logs/${TGT}.log.bz2 ${TGT}${TAR_SFX}"
echo "${BUILD_TARGETS}: CONFIG_OPTS=$opts" >>release.mk
echo "${BUILD_TARGETS}: TGT=${TGT}" >>release.mk
case $cfg in
*-arm*-linux-*)
echo "${BUILD_TARGETS}: EXTRA_PATH=:${ARM_TOOLCHAIN}/bin/" >>release.mk ;;
*-vs7)
echo "${BUILD_TARGETS}: EXTRA_PATH=:/cygdrive/c/Program\ Files/Microsoft\ Visual\ Studio\ .NET\ 2003/Common7/IDE" >>release.mk ;;
*-vs8)
echo "${BUILD_TARGETS}: EXTRA_PATH=:/cygdrive/c/Program\ Files/Microsoft\ Visual\ Studio\ 8/Common7/IDE" >>release.mk ;;
esac
MAKE_TGTS="$MAKE_TGTS ${TGT}${TAR_SFX} logs/${TGT}.log.bz2"
done
${MAKE:-make} ${jopt:--j3} -f release.mk \
SRC_ROOT=${self%/*} BUILD_SFX=${BUILD_SFX} ${MAKE_TGTS}

View File

@@ -1,5 +1,5 @@
## ##
## Copyright (c) 2010 The WebM project authors. All Rights Reserved. ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
## ##
## Use of this source code is governed by a BSD-style license ## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source ## that can be found in the LICENSE file in the root of the source
@@ -9,13 +9,38 @@
## ##
ifeq ($(ARCH_ARM),yes)
ARM_DEVELOP=no
ARM_DEVELOP:=$(if $(filter %vpx.vcproj,$(wildcard *.vcproj)),yes)
ifeq ($(ARM_DEVELOP),yes)
vpx.sln:
@echo " [COPY] $@"
@cp $(SRC_PATH_BARE)/build/arm-wince-vs8/vpx.sln .
PROJECTS-yes += vpx.sln
else
vpx.sln: $(wildcard *.vcproj)
@echo " [CREATE] $@"
$(SRC_PATH_BARE)/build/make/gen_msvs_sln.sh \
$(if $(filter %vpx.vcproj,$^),--dep=ivfdec:vpx) \
$(if $(filter %vpx.vcproj,$^),--dep=xma:vpx) \
--ver=$(CONFIG_VS_VERSION)\
--target=$(TOOLCHAIN)\
--out=$@ $^
vpx.sln.mk: vpx.sln
@true
PROJECTS-yes += vpx.sln vpx.sln.mk
-include vpx.sln.mk
endif
else
vpx.sln: $(wildcard *.vcproj) vpx.sln: $(wildcard *.vcproj)
@echo " [CREATE] $@" @echo " [CREATE] $@"
$(SRC_PATH_BARE)/build/make/gen_msvs_sln.sh \ $(SRC_PATH_BARE)/build/make/gen_msvs_sln.sh \
$(if $(filter %vpx.vcproj,$^),\ $(if $(filter %vpx.vcproj,$^),\
$(foreach vcp,$(filter-out %vpx.vcproj %obj_int_extract.vcproj,$^),\ $(foreach vcp,$(filter-out %vpx.vcproj,$^),\
--dep=$(vcp:.vcproj=):vpx)) \ --dep=$(vcp:.vcproj=):vpx)) \
--dep=vpx:obj_int_extract \
--ver=$(CONFIG_VS_VERSION)\ --ver=$(CONFIG_VS_VERSION)\
--out=$@ $^ --out=$@ $^
vpx.sln.mk: vpx.sln vpx.sln.mk: vpx.sln
@@ -23,6 +48,7 @@ vpx.sln.mk: vpx.sln
PROJECTS-yes += vpx.sln vpx.sln.mk PROJECTS-yes += vpx.sln vpx.sln.mk
-include vpx.sln.mk -include vpx.sln.mk
endif
# Always install this file, as it is an unconditional post-build rule. # Always install this file, as it is an unconditional post-build rule.
INSTALL_MAPS += src/% $(SRC_PATH_BARE)/% INSTALL_MAPS += src/% $(SRC_PATH_BARE)/%

View File

@@ -25,7 +25,7 @@
codec may write into to store details about a single instance of that codec. codec may write into to store details about a single instance of that codec.
Most of the context is implementation specific, and thus opaque to the Most of the context is implementation specific, and thus opaque to the
application. The context structure as seen by the application is of fixed application. The context structure as seen by the application is of fixed
size, and thus can be allocated with automatic storage or dynamically size, and thus can be allocated eith with automatic storage or dynamically
on the heap. on the heap.
Most operations require an initialized codec context. Codec context Most operations require an initialized codec context. Codec context
@@ -74,7 +74,7 @@
the ABI is versioned. The ABI version number must be passed at the ABI is versioned. The ABI version number must be passed at
initialization time to ensure the application is using a header file that initialization time to ensure the application is using a header file that
matches the library. The current ABI version number is stored in the matches the library. The current ABI version number is stored in the
preprocessor macros #VPX_CODEC_ABI_VERSION, #VPX_ENCODER_ABI_VERSION, and prepropcessor macros #VPX_CODEC_ABI_VERSION, #VPX_ENCODER_ABI_VERSION, and
#VPX_DECODER_ABI_VERSION. For convenience, each initialization function has #VPX_DECODER_ABI_VERSION. For convenience, each initialization function has
a wrapper macro that inserts the correct version number. These macros are a wrapper macro that inserts the correct version number. These macros are
named like the initialization methods, but without the _ver suffix. named like the initialization methods, but without the _ver suffix.
@@ -125,7 +125,7 @@
The special value <code>0</code> is reserved to represent an infinite The special value <code>0</code> is reserved to represent an infinite
deadline. In this case, the codec will perform as much processing as deadline. In this case, the codec will perform as much processing as
possible to yield the highest quality frame. possible to yeild the highest quality frame.
By convention, the value <code>1</code> is used to mean "return as fast as By convention, the value <code>1</code> is used to mean "return as fast as
possible." possible."
@@ -135,7 +135,7 @@
/*! \page usage_xma External Memory Allocation /*! \page usage_xma External Memory Allocation
Applications that wish to have fine grained control over how and where Applications that wish to have fine grained control over how and where
decoders allocate memory \ref MAY make use of the eXternal Memory Allocation decoders allocate memory \ref MAY make use of the e_xternal Memory Allocation
(XMA) interface. Not all codecs support the XMA \ref usage_features. (XMA) interface. Not all codecs support the XMA \ref usage_features.
To use a decoder in XMA mode, the decoder \ref MUST be initialized with the To use a decoder in XMA mode, the decoder \ref MUST be initialized with the
@@ -143,7 +143,7 @@
allocate is heavily dependent on the size of the encoded video frames. The allocate is heavily dependent on the size of the encoded video frames. The
size of the video must be known before requesting the decoder's memory map. size of the video must be known before requesting the decoder's memory map.
This stream information can be obtained with the vpx_codec_peek_stream_info() This stream information can be obtained with the vpx_codec_peek_stream_info()
function, which does not require a constructed decoder context. If the exact function, which does not require a contructed decoder context. If the exact
stream is not known, a stream info structure can be created that reflects stream is not known, a stream info structure can be created that reflects
the maximum size that the decoder instance is required to support. the maximum size that the decoder instance is required to support.
@@ -175,7 +175,7 @@
\section usage_xma_seg_szalign Segment Size and Alignment \section usage_xma_seg_szalign Segment Size and Alignment
The sz (size) and align (alignment) parameters describe the required size The sz (size) and align (alignment) parameters describe the required size
and alignment of the requested segment. Alignment will always be a power of and alignment of the requested segment. Alignment will always be a power of
two. Applications \ref MUST honor the alignment requested. Failure to do so two. Applications \ref MUST honor the aligment requested. Failure to do so
could result in program crashes or may incur a speed penalty. could result in program crashes or may incur a speed penalty.
\section usage_xma_seg_flags Segment Flags \section usage_xma_seg_flags Segment Flags

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
@@ -16,46 +16,54 @@
#include "findnearmv.h" #include "findnearmv.h"
#include "entropymode.h" #include "entropymode.h"
#include "systemdependent.h" #include "systemdependent.h"
#include "vpxerrors.h"
extern void vp8_init_scan_order_mask(); extern void vp8_init_scan_order_mask();
static void update_mode_info_border(MODE_INFO *mi, int rows, int cols) void vp8_update_mode_info_border(MODE_INFO *mi, int rows, int cols)
{ {
int i; int i;
vpx_memset(mi - cols - 2, 0, sizeof(MODE_INFO) * (cols + 1)); vpx_memset(mi - cols - 1, 0, sizeof(MODE_INFO) * cols + 1);
for (i = 0; i < rows; i++) for (i = 0; i < rows; i++)
{ {
vpx_memset(&mi[i*cols-1], 0, sizeof(MODE_INFO)); vpx_memset(&mi[i*cols-1], 0, sizeof(MODE_INFO));
} }
} }
void vp8_de_alloc_frame_buffers(VP8_COMMON *oci) void vp8_de_alloc_frame_buffers(VP8_COMMON *oci)
{ {
int i;
for (i = 0; i < NUM_YV12_BUFFERS; i++)
vp8_yv12_de_alloc_frame_buffer(&oci->yv12_fb[i]);
vp8_yv12_de_alloc_frame_buffer(&oci->temp_scale_frame); vp8_yv12_de_alloc_frame_buffer(&oci->temp_scale_frame);
vp8_yv12_de_alloc_frame_buffer(&oci->new_frame);
vp8_yv12_de_alloc_frame_buffer(&oci->last_frame);
vp8_yv12_de_alloc_frame_buffer(&oci->golden_frame);
vp8_yv12_de_alloc_frame_buffer(&oci->alt_ref_frame);
vp8_yv12_de_alloc_frame_buffer(&oci->post_proc_buffer); vp8_yv12_de_alloc_frame_buffer(&oci->post_proc_buffer);
vpx_free(oci->above_context); vpx_free(oci->above_context[Y1CONTEXT]);
vpx_free(oci->above_context[UCONTEXT]);
vpx_free(oci->above_context[VCONTEXT]);
vpx_free(oci->above_context[Y2CONTEXT]);
vpx_free(oci->mip); vpx_free(oci->mip);
oci->above_context = 0; oci->above_context[Y1CONTEXT] = 0;
oci->above_context[UCONTEXT] = 0;
oci->above_context[VCONTEXT] = 0;
oci->above_context[Y2CONTEXT] = 0;
oci->mip = 0; oci->mip = 0;
// Structure used to minitor GF useage
if (oci->gf_active_flags != 0)
vpx_free(oci->gf_active_flags);
oci->gf_active_flags = 0;
} }
int vp8_alloc_frame_buffers(VP8_COMMON *oci, int width, int height) int vp8_alloc_frame_buffers(VP8_COMMON *oci, int width, int height)
{ {
int i;
vp8_de_alloc_frame_buffers(oci); vp8_de_alloc_frame_buffers(oci);
/* our internal buffers are always multiples of 16 */ // our internal buffers are always multiples of 16
if ((width & 0xf) != 0) if ((width & 0xf) != 0)
width += 16 - (width & 0xf); width += 16 - (width & 0xf);
@@ -63,37 +71,41 @@ int vp8_alloc_frame_buffers(VP8_COMMON *oci, int width, int height)
height += 16 - (height & 0xf); height += 16 - (height & 0xf);
for (i = 0; i < NUM_YV12_BUFFERS; i++)
{
oci->fb_idx_ref_cnt[0] = 0;
if (vp8_yv12_alloc_frame_buffer(&oci->yv12_fb[i], width, height, VP8BORDERINPIXELS) < 0)
{
vp8_de_alloc_frame_buffers(oci);
return 1;
}
}
oci->new_fb_idx = 0;
oci->lst_fb_idx = 1;
oci->gld_fb_idx = 2;
oci->alt_fb_idx = 3;
oci->fb_idx_ref_cnt[0] = 1;
oci->fb_idx_ref_cnt[1] = 1;
oci->fb_idx_ref_cnt[2] = 1;
oci->fb_idx_ref_cnt[3] = 1;
if (vp8_yv12_alloc_frame_buffer(&oci->temp_scale_frame, width, 16, VP8BORDERINPIXELS) < 0) if (vp8_yv12_alloc_frame_buffer(&oci->temp_scale_frame, width, 16, VP8BORDERINPIXELS) < 0)
{ {
vp8_de_alloc_frame_buffers(oci); vp8_de_alloc_frame_buffers(oci);
return 1; return ALLOC_FAILURE;
}
if (vp8_yv12_alloc_frame_buffer(&oci->new_frame, width, height, VP8BORDERINPIXELS) < 0)
{
vp8_de_alloc_frame_buffers(oci);
return ALLOC_FAILURE;
}
if (vp8_yv12_alloc_frame_buffer(&oci->last_frame, width, height, VP8BORDERINPIXELS) < 0)
{
vp8_de_alloc_frame_buffers(oci);
return ALLOC_FAILURE;
}
if (vp8_yv12_alloc_frame_buffer(&oci->golden_frame, width, height, VP8BORDERINPIXELS) < 0)
{
vp8_de_alloc_frame_buffers(oci);
return ALLOC_FAILURE;
}
if (vp8_yv12_alloc_frame_buffer(&oci->alt_ref_frame, width, height, VP8BORDERINPIXELS) < 0)
{
vp8_de_alloc_frame_buffers(oci);
return ALLOC_FAILURE;
} }
if (vp8_yv12_alloc_frame_buffer(&oci->post_proc_buffer, width, height, VP8BORDERINPIXELS) < 0) if (vp8_yv12_alloc_frame_buffer(&oci->post_proc_buffer, width, height, VP8BORDERINPIXELS) < 0)
{ {
vp8_de_alloc_frame_buffers(oci); vp8_de_alloc_frame_buffers(oci);
return 1; return ALLOC_FAILURE;
} }
oci->mb_rows = height >> 4; oci->mb_rows = height >> 4;
@@ -105,21 +117,59 @@ int vp8_alloc_frame_buffers(VP8_COMMON *oci, int width, int height)
if (!oci->mip) if (!oci->mip)
{ {
vp8_de_alloc_frame_buffers(oci); vp8_de_alloc_frame_buffers(oci);
return 1; return ALLOC_FAILURE;
} }
oci->mi = oci->mip + oci->mode_info_stride + 1; oci->mi = oci->mip + oci->mode_info_stride + 1;
oci->above_context = vpx_calloc(sizeof(ENTROPY_CONTEXT_PLANES) * oci->mb_cols, 1); oci->above_context[Y1CONTEXT] = vpx_calloc(sizeof(ENTROPY_CONTEXT) * oci->mb_cols * 4 , 1);
if (!oci->above_context) if (!oci->above_context[Y1CONTEXT])
{ {
vp8_de_alloc_frame_buffers(oci); vp8_de_alloc_frame_buffers(oci);
return 1; return ALLOC_FAILURE;
} }
update_mode_info_border(oci->mi, oci->mb_rows, oci->mb_cols); oci->above_context[UCONTEXT] = vpx_calloc(sizeof(ENTROPY_CONTEXT) * oci->mb_cols * 2 , 1);
if (!oci->above_context[UCONTEXT])
{
vp8_de_alloc_frame_buffers(oci);
return ALLOC_FAILURE;
}
oci->above_context[VCONTEXT] = vpx_calloc(sizeof(ENTROPY_CONTEXT) * oci->mb_cols * 2 , 1);
if (!oci->above_context[VCONTEXT])
{
vp8_de_alloc_frame_buffers(oci);
return ALLOC_FAILURE;
}
oci->above_context[Y2CONTEXT] = vpx_calloc(sizeof(ENTROPY_CONTEXT) * oci->mb_cols , 1);
if (!oci->above_context[Y2CONTEXT])
{
vp8_de_alloc_frame_buffers(oci);
return ALLOC_FAILURE;
}
vp8_update_mode_info_border(oci->mi, oci->mb_rows, oci->mb_cols);
// Structures used to minitor GF usage
if (oci->gf_active_flags != 0)
vpx_free(oci->gf_active_flags);
oci->gf_active_flags = (unsigned char *)vpx_calloc(oci->mb_rows * oci->mb_cols, 1);
if (!oci->gf_active_flags)
{
vp8_de_alloc_frame_buffers(oci);
return ALLOC_FAILURE;
}
oci->gf_active_count = oci->mb_rows * oci->mb_cols;
return 0; return 0;
} }
@@ -130,32 +180,32 @@ void vp8_setup_version(VP8_COMMON *cm)
case 0: case 0:
cm->no_lpf = 0; cm->no_lpf = 0;
cm->simpler_lpf = 0; cm->simpler_lpf = 0;
cm->mcomp_filter_type = SIXTAP; cm->use_bilinear_mc_filter = 0;
cm->full_pixel = 0; cm->full_pixel = 0;
break; break;
case 1: case 1:
cm->no_lpf = 0; cm->no_lpf = 0;
cm->simpler_lpf = 1; cm->simpler_lpf = 1;
cm->mcomp_filter_type = BILINEAR; cm->use_bilinear_mc_filter = 1;
cm->full_pixel = 0; cm->full_pixel = 0;
break; break;
case 2: case 2:
cm->no_lpf = 1; cm->no_lpf = 1;
cm->simpler_lpf = 0; cm->simpler_lpf = 0;
cm->mcomp_filter_type = BILINEAR; cm->use_bilinear_mc_filter = 1;
cm->full_pixel = 0; cm->full_pixel = 0;
break; break;
case 3: case 3:
cm->no_lpf = 1; cm->no_lpf = 1;
cm->simpler_lpf = 1; cm->simpler_lpf = 1;
cm->mcomp_filter_type = BILINEAR; cm->use_bilinear_mc_filter = 1;
cm->full_pixel = 1; cm->full_pixel = 1;
break; break;
default: default:
/*4,5,6,7 are reserved for future use*/ //4,5,6,7 are reserved for future use
cm->no_lpf = 0; cm->no_lpf = 0;
cm->simpler_lpf = 0; cm->simpler_lpf = 0;
cm->mcomp_filter_type = SIXTAP; cm->use_bilinear_mc_filter = 0;
cm->full_pixel = 0; cm->full_pixel = 0;
break; break;
} }
@@ -170,16 +220,16 @@ void vp8_create_common(VP8_COMMON *oci)
oci->mb_no_coeff_skip = 1; oci->mb_no_coeff_skip = 1;
oci->no_lpf = 0; oci->no_lpf = 0;
oci->simpler_lpf = 0; oci->simpler_lpf = 0;
oci->mcomp_filter_type = SIXTAP; oci->use_bilinear_mc_filter = 0;
oci->full_pixel = 0; oci->full_pixel = 0;
oci->multi_token_partition = ONE_PARTITION; oci->multi_token_partition = ONE_PARTITION;
oci->clr_type = REG_YUV; oci->clr_type = REG_YUV;
oci->clamp_type = RECON_CLAMP_REQUIRED; oci->clamp_type = RECON_CLAMP_REQUIRED;
/* Initialise reference frame sign bias structure to defaults */ // Initialise reference frame sign bias structure to defaults
vpx_memset(oci->ref_frame_sign_bias, 0, sizeof(oci->ref_frame_sign_bias)); vpx_memset(oci->ref_frame_sign_bias, 0, sizeof(oci->ref_frame_sign_bias));
/* Default disable buffer to buffer copying */ // Default disable buffer to buffer copying
oci->copy_buffer_to_gf = 0; oci->copy_buffer_to_gf = 0;
oci->copy_buffer_to_arf = 0; oci->copy_buffer_to_arf = 0;
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source

View File

@@ -1,109 +0,0 @@
/*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "vpx_ports/config.h"
#include "vpx_ports/arm.h"
#include "vp8/common/g_common.h"
#include "vp8/common/pragmas.h"
#include "vp8/common/subpixel.h"
#include "vp8/common/loopfilter.h"
#include "vp8/common/recon.h"
#include "vp8/common/idct.h"
#include "vp8/common/onyxc_int.h"
void vp8_arch_arm_common_init(VP8_COMMON *ctx)
{
#if CONFIG_RUNTIME_CPU_DETECT
VP8_COMMON_RTCD *rtcd = &ctx->rtcd;
int flags = arm_cpu_caps();
int has_edsp = flags & HAS_EDSP;
int has_media = flags & HAS_MEDIA;
int has_neon = flags & HAS_NEON;
rtcd->flags = flags;
/* Override default functions with fastest ones for this CPU. */
#if HAVE_ARMV6
if (has_media)
{
rtcd->subpix.sixtap16x16 = vp8_sixtap_predict16x16_armv6;
rtcd->subpix.sixtap8x8 = vp8_sixtap_predict8x8_armv6;
rtcd->subpix.sixtap8x4 = vp8_sixtap_predict8x4_armv6;
rtcd->subpix.sixtap4x4 = vp8_sixtap_predict_armv6;
rtcd->subpix.bilinear16x16 = vp8_bilinear_predict16x16_armv6;
rtcd->subpix.bilinear8x8 = vp8_bilinear_predict8x8_armv6;
rtcd->subpix.bilinear8x4 = vp8_bilinear_predict8x4_armv6;
rtcd->subpix.bilinear4x4 = vp8_bilinear_predict4x4_armv6;
rtcd->idct.idct1 = vp8_short_idct4x4llm_1_v6;
rtcd->idct.idct16 = vp8_short_idct4x4llm_v6_dual;
rtcd->idct.iwalsh1 = vp8_short_inv_walsh4x4_1_v6;
rtcd->idct.iwalsh16 = vp8_short_inv_walsh4x4_v6;
rtcd->loopfilter.normal_mb_v = vp8_loop_filter_mbv_armv6;
rtcd->loopfilter.normal_b_v = vp8_loop_filter_bv_armv6;
rtcd->loopfilter.normal_mb_h = vp8_loop_filter_mbh_armv6;
rtcd->loopfilter.normal_b_h = vp8_loop_filter_bh_armv6;
rtcd->loopfilter.simple_mb_v = vp8_loop_filter_mbvs_armv6;
rtcd->loopfilter.simple_b_v = vp8_loop_filter_bvs_armv6;
rtcd->loopfilter.simple_mb_h = vp8_loop_filter_mbhs_armv6;
rtcd->loopfilter.simple_b_h = vp8_loop_filter_bhs_armv6;
rtcd->recon.copy16x16 = vp8_copy_mem16x16_v6;
rtcd->recon.copy8x8 = vp8_copy_mem8x8_v6;
rtcd->recon.copy8x4 = vp8_copy_mem8x4_v6;
rtcd->recon.recon = vp8_recon_b_armv6;
rtcd->recon.recon2 = vp8_recon2b_armv6;
rtcd->recon.recon4 = vp8_recon4b_armv6;
}
#endif
#if HAVE_ARMV7
if (has_neon)
{
rtcd->subpix.sixtap16x16 = vp8_sixtap_predict16x16_neon;
rtcd->subpix.sixtap8x8 = vp8_sixtap_predict8x8_neon;
rtcd->subpix.sixtap8x4 = vp8_sixtap_predict8x4_neon;
rtcd->subpix.sixtap4x4 = vp8_sixtap_predict_neon;
rtcd->subpix.bilinear16x16 = vp8_bilinear_predict16x16_neon;
rtcd->subpix.bilinear8x8 = vp8_bilinear_predict8x8_neon;
rtcd->subpix.bilinear8x4 = vp8_bilinear_predict8x4_neon;
rtcd->subpix.bilinear4x4 = vp8_bilinear_predict4x4_neon;
rtcd->idct.idct1 = vp8_short_idct4x4llm_1_neon;
rtcd->idct.idct16 = vp8_short_idct4x4llm_neon;
rtcd->idct.iwalsh1 = vp8_short_inv_walsh4x4_1_neon;
rtcd->idct.iwalsh16 = vp8_short_inv_walsh4x4_neon;
rtcd->loopfilter.normal_mb_v = vp8_loop_filter_mbv_neon;
rtcd->loopfilter.normal_b_v = vp8_loop_filter_bv_neon;
rtcd->loopfilter.normal_mb_h = vp8_loop_filter_mbh_neon;
rtcd->loopfilter.normal_b_h = vp8_loop_filter_bh_neon;
rtcd->loopfilter.simple_mb_v = vp8_loop_filter_mbvs_neon;
rtcd->loopfilter.simple_b_v = vp8_loop_filter_bvs_neon;
rtcd->loopfilter.simple_mb_h = vp8_loop_filter_mbhs_neon;
rtcd->loopfilter.simple_b_h = vp8_loop_filter_bhs_neon;
rtcd->recon.copy16x16 = vp8_copy_mem16x16_neon;
rtcd->recon.copy8x8 = vp8_copy_mem8x8_neon;
rtcd->recon.copy8x4 = vp8_copy_mem8x4_neon;
rtcd->recon.recon = vp8_recon_b_neon;
rtcd->recon.recon2 = vp8_recon2b_neon;
rtcd->recon.recon4 = vp8_recon4b_neon;
rtcd->recon.recon_mb = vp8_recon_mb_neon;
rtcd->recon.build_intra_predictors_mby =
vp8_build_intra_predictors_mby_neon;
rtcd->recon.build_intra_predictors_mby_s =
vp8_build_intra_predictors_mby_s_neon;
}
#endif
#endif
}

View File

@@ -1,5 +1,5 @@
; ;
; Copyright (c) 2010 The WebM project authors. All Rights Reserved. ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
; ;
; Use of this source code is governed by a BSD-style license ; Use of this source code is governed by a BSD-style license
; that can be found in the LICENSE file in the root of the source ; that can be found in the LICENSE file in the root of the source
@@ -15,19 +15,19 @@
AREA |.text|, CODE, READONLY ; name this block of code AREA |.text|, CODE, READONLY ; name this block of code
;------------------------------------- ;-------------------------------------
; r0 unsigned char *src_ptr, ; r0 unsigned char *src_ptr,
; r1 unsigned short *dst_ptr, ; r1 unsigned short *output_ptr,
; r2 unsigned int src_pitch, ; r2 unsigned int src_pixels_per_line,
; r3 unsigned int height, ; r3 unsigned int output_height,
; stack unsigned int width, ; stack unsigned int output_width,
; stack const short *vp8_filter ; stack const short *vp8_filter
;------------------------------------- ;-------------------------------------
; The output is transposed stroed in output array to make it easy for second pass filtering. ; The output is transposed stroed in output array to make it easy for second pass filtering.
|vp8_filter_block2d_bil_first_pass_armv6| PROC |vp8_filter_block2d_bil_first_pass_armv6| PROC
stmdb sp!, {r4 - r11, lr} stmdb sp!, {r4 - r11, lr}
ldr r11, [sp, #40] ; vp8_filter address ldr r11, [sp, #40] ; vp8_filter address
ldr r4, [sp, #36] ; width ldr r4, [sp, #36] ; output width
mov r12, r3 ; outer-loop counter mov r12, r3 ; outer-loop counter
sub r2, r2, r4 ; src increment for height loop sub r2, r2, r4 ; src increment for height loop
@@ -38,10 +38,10 @@
ldr r5, [r11] ; load up filter coefficients ldr r5, [r11] ; load up filter coefficients
mov r3, r3, lsl #1 ; height*2 mov r3, r3, lsl #1 ; output_height*2
add r3, r3, #2 ; plus 2 to make output buffer 4-bit aligned since height is actually (height+1) add r3, r3, #2 ; plus 2 to make output buffer 4-bit aligned since height is actually (height+1)
mov r11, r1 ; save dst_ptr for each row mov r11, r1 ; save output_ptr for each row
cmp r5, #128 ; if filter coef = 128, then skip the filter cmp r5, #128 ; if filter coef = 128, then skip the filter
beq bil_null_1st_filter beq bil_null_1st_filter
@@ -140,17 +140,17 @@
;--------------------------------- ;---------------------------------
; r0 unsigned short *src_ptr, ; r0 unsigned short *src_ptr,
; r1 unsigned char *dst_ptr, ; r1 unsigned char *output_ptr,
; r2 int dst_pitch, ; r2 int output_pitch,
; r3 unsigned int height, ; r3 unsigned int output_height,
; stack unsigned int width, ; stack unsigned int output_width,
; stack const short *vp8_filter ; stack const short *vp8_filter
;--------------------------------- ;---------------------------------
|vp8_filter_block2d_bil_second_pass_armv6| PROC |vp8_filter_block2d_bil_second_pass_armv6| PROC
stmdb sp!, {r4 - r11, lr} stmdb sp!, {r4 - r11, lr}
ldr r11, [sp, #40] ; vp8_filter address ldr r11, [sp, #40] ; vp8_filter address
ldr r4, [sp, #36] ; width ldr r4, [sp, #36] ; output width
ldr r5, [r11] ; load up filter coefficients ldr r5, [r11] ; load up filter coefficients
mov r12, r4 ; outer-loop counter = width, since we work on transposed data matrix mov r12, r4 ; outer-loop counter = width, since we work on transposed data matrix

View File

@@ -1,5 +1,5 @@
; ;
; Copyright (c) 2010 The WebM project authors. All Rights Reserved. ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
; ;
; Use of this source code is governed by a BSD-style license ; Use of this source code is governed by a BSD-style license
; that can be found in the LICENSE file in the root of the source ; that can be found in the LICENSE file in the root of the source

View File

@@ -1,5 +1,5 @@
; ;
; Copyright (c) 2010 The WebM project authors. All Rights Reserved. ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
; ;
; Use of this source code is governed by a BSD-style license ; Use of this source code is governed by a BSD-style license
; that can be found in the LICENSE file in the root of the source ; that can be found in the LICENSE file in the root of the source

View File

@@ -1,5 +1,5 @@
; ;
; Copyright (c) 2010 The WebM project authors. All Rights Reserved. ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
; ;
; Use of this source code is governed by a BSD-style license ; Use of this source code is governed by a BSD-style license
; that can be found in the LICENSE file in the root of the source ; that can be found in the LICENSE file in the root of the source

View File

@@ -1,67 +0,0 @@
;
; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
;
; Use of this source code is governed by a BSD-style license and patent
; grant that can be found in the LICENSE file in the root of the source
; tree. All contributing project authors may be found in the AUTHORS
; file in the root of the source tree.
;
EXPORT |vp8_dc_only_idct_add_v6|
AREA |.text|, CODE, READONLY
;void vp8_dc_only_idct_add_v6(short input_dc, unsigned char *pred_ptr,
; unsigned char *dst_ptr, int pitch, int stride)
; r0 input_dc
; r1 pred_ptr
; r2 dest_ptr
; r3 pitch
; sp stride
|vp8_dc_only_idct_add_v6| PROC
stmdb sp!, {r4 - r7, lr}
add r0, r0, #4 ; input_dc += 4
ldr r12, c0x0000FFFF
ldr r4, [r1], r3
ldr r6, [r1], r3
and r0, r12, r0, asr #3 ; input_dc >> 3 + mask
ldr lr, [sp, #20]
orr r0, r0, r0, lsl #16 ; a1 | a1
uxtab16 r5, r0, r4 ; a1+2 | a1+0
uxtab16 r4, r0, r4, ror #8 ; a1+3 | a1+1
uxtab16 r7, r0, r6
uxtab16 r6, r0, r6, ror #8
usat16 r5, #8, r5
usat16 r4, #8, r4
usat16 r7, #8, r7
usat16 r6, #8, r6
orr r5, r5, r4, lsl #8
orr r7, r7, r6, lsl #8
ldr r4, [r1], r3
ldr r6, [r1]
str r5, [r2], lr
str r7, [r2], lr
uxtab16 r5, r0, r4
uxtab16 r4, r0, r4, ror #8
uxtab16 r7, r0, r6
uxtab16 r6, r0, r6, ror #8
usat16 r5, #8, r5
usat16 r4, #8, r4
usat16 r7, #8, r7
usat16 r6, #8, r6
orr r5, r5, r4, lsl #8
orr r7, r7, r6, lsl #8
str r5, [r2], lr
str r7, [r2]
ldmia sp!, {r4 - r7, pc}
ENDP ; |vp8_dc_only_idct_add_v6|
; Constant Pool
c0x0000FFFF DCD 0x0000FFFF
END

View File

@@ -1,5 +1,5 @@
; ;
; Copyright (c) 2010 The WebM project authors. All Rights Reserved. ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
; ;
; Use of this source code is governed by a BSD-style license ; Use of this source code is governed by a BSD-style license
; that can be found in the LICENSE file in the root of the source ; that can be found in the LICENSE file in the root of the source
@@ -11,7 +11,6 @@
EXPORT |vp8_filter_block2d_first_pass_armv6| EXPORT |vp8_filter_block2d_first_pass_armv6|
EXPORT |vp8_filter_block2d_second_pass_armv6| EXPORT |vp8_filter_block2d_second_pass_armv6|
EXPORT |vp8_filter4_block2d_second_pass_armv6|
EXPORT |vp8_filter_block2d_first_pass_only_armv6| EXPORT |vp8_filter_block2d_first_pass_only_armv6|
EXPORT |vp8_filter_block2d_second_pass_only_armv6| EXPORT |vp8_filter_block2d_second_pass_only_armv6|
@@ -193,64 +192,6 @@
ENDP ENDP
;---------------------------------
; r0 short *src_ptr,
; r1 unsigned char *output_ptr,
; r2 unsigned int output_pitch,
; r3 unsigned int cnt,
; stack const short *vp8_filter
;---------------------------------
|vp8_filter4_block2d_second_pass_armv6| PROC
stmdb sp!, {r4 - r11, lr}
ldr r11, [sp, #36] ; vp8_filter address
mov r7, r3, lsl #16 ; height is top part of counter
ldr r4, [r11] ; load up packed filter coefficients
add lr, r1, r3 ; save final destination pointer
ldr r5, [r11, #4]
ldr r6, [r11, #8]
pkhbt r12, r5, r4 ; pack the filter differently
pkhbt r11, r6, r5
mov r4, #0x40 ; rounding factor (for smlad{x})
|height_loop_2nd_4|
ldrd r8, [r0, #-4] ; load the data
orr r7, r7, r3, lsr #1 ; loop counter
|width_loop_2nd_4|
ldr r10, [r0, #4]!
smladx r6, r9, r12, r4 ; apply filter
pkhbt r8, r9, r8
smlad r5, r8, r12, r4
pkhbt r8, r10, r9
smladx r6, r10, r11, r6
sub r7, r7, #1
smlad r5, r8, r11, r5
mov r8, r9 ; shift the data for the next loop
mov r9, r10
usat r6, #8, r6, asr #7 ; shift and clamp
usat r5, #8, r5, asr #7
strb r5, [r1], r2 ; the result is transposed back and stored
tst r7, #0xff
strb r6, [r1], r2
bne width_loop_2nd_4
subs r7, r7, #0x10000
add r0, r0, #16 ; update src for next loop
sub r1, lr, r7, lsr #16 ; update dst for next loop
bne height_loop_2nd_4
ldmia sp!, {r4 - r11, pc}
ENDP
;------------------------------------ ;------------------------------------
; r0 unsigned char *src_ptr ; r0 unsigned char *src_ptr
; r1 unsigned char *output_ptr, ; r1 unsigned char *output_ptr,

View File

@@ -1,5 +1,5 @@
; ;
; Copyright (c) 2010 The WebM project authors. All Rights Reserved. ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
; ;
; Use of this source code is governed by a BSD-style license ; Use of this source code is governed by a BSD-style license
; that can be found in the LICENSE file in the root of the source ; that can be found in the LICENSE file in the root of the source
@@ -15,6 +15,8 @@
EXPORT |vp8_short_idct4x4llm_v6_scott| EXPORT |vp8_short_idct4x4llm_v6_scott|
EXPORT |vp8_short_idct4x4llm_v6_dual| EXPORT |vp8_short_idct4x4llm_v6_dual|
EXPORT |vp8_dc_only_idct_armv6|
AREA |.text|, CODE, READONLY AREA |.text|, CODE, READONLY
;******************************************************************************** ;********************************************************************************
@@ -342,4 +344,34 @@ loop2_dual
ldmia sp!, {r4 - r11, pc} ; replace vars, return restore ldmia sp!, {r4 - r11, pc} ; replace vars, return restore
ENDP ENDP
; sjl added 10/17/08
;void dc_only_idct_armv6(short input_dc, short *output, int pitch)
|vp8_dc_only_idct_armv6| PROC
stmdb sp!, {r4 - r6, lr}
add r0, r0, #0x4
add r4, r1, r2 ; output + shortpitch
mov r0, r0, ASR #0x3 ;aka a1
add r5, r1, r2, LSL #1 ; output + shortpitch * 2
pkhbt r0, r0, r0, lsl #16 ; a1 | a1
add r6, r5, r2 ; output + shortpitch * 3
str r0, [r1, #0]
str r0, [r1, #4]
str r0, [r4, #0]
str r0, [r4, #4]
str r0, [r5, #0]
str r0, [r5, #4]
str r0, [r6, #0]
str r0, [r6, #4]
ldmia sp!, {r4 - r6, pc}
ENDP ; |vp8_dc_only_idct_armv6|
END END

View File

@@ -1,5 +1,5 @@
; ;
; Copyright (c) 2010 The WebM project authors. All Rights Reserved. ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
; ;
; Use of this source code is governed by a BSD-style license ; Use of this source code is governed by a BSD-style license
; that can be found in the LICENSE file in the root of the source ; that can be found in the LICENSE file in the root of the source
@@ -8,8 +8,8 @@
; be found in the AUTHORS file in the root of the source tree. ; be found in the AUTHORS file in the root of the source tree.
; ;
EXPORT |vp8_short_inv_walsh4x4_v6| EXPORT |vp8_short_inv_walsh4x4_armv6|
EXPORT |vp8_short_inv_walsh4x4_1_v6| EXPORT |vp8_short_inv_walsh4x4_1_armv6|
ARM ARM
REQUIRE8 REQUIRE8
@@ -17,8 +17,8 @@
AREA |.text|, CODE, READONLY ; name this block of code AREA |.text|, CODE, READONLY ; name this block of code
;short vp8_short_inv_walsh4x4_v6(short *input, short *output) ;short vp8_short_inv_walsh4x4_armv6(short *input, short *output)
|vp8_short_inv_walsh4x4_v6| PROC |vp8_short_inv_walsh4x4_armv6| PROC
stmdb sp!, {r4 - r11, lr} stmdb sp!, {r4 - r11, lr}
@@ -123,11 +123,11 @@
str r5, [r1] str r5, [r1]
ldmia sp!, {r4 - r11, pc} ldmia sp!, {r4 - r11, pc}
ENDP ; |vp8_short_inv_walsh4x4_v6| ENDP ; |vp8_short_inv_walsh4x4_armv6|
;short vp8_short_inv_walsh4x4_1_v6(short *input, short *output) ;short vp8_short_inv_walsh4x4_1_armv6(short *input, short *output)
|vp8_short_inv_walsh4x4_1_v6| PROC |vp8_short_inv_walsh4x4_1_armv6| PROC
ldrsh r2, [r0] ; [0] ldrsh r2, [r0] ; [0]
add r2, r2, #3 ; [0] + 3 add r2, r2, #3 ; [0] + 3
@@ -145,7 +145,7 @@
str r2, [r1] str r2, [r1]
bx lr bx lr
ENDP ; |vp8_short_inv_walsh4x4_1_v6| ENDP ; |vp8_short_inv_walsh4x4_1_armv6|
; Constant Pool ; Constant Pool
c0x00030003 DCD 0x00030003 c0x00030003 DCD 0x00030003

View File

@@ -1,5 +1,5 @@
; ;
; Copyright (c) 2010 The WebM project authors. All Rights Reserved. ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
; ;
; Use of this source code is governed by a BSD-style license ; Use of this source code is governed by a BSD-style license
; that can be found in the LICENSE file in the root of the source ; that can be found in the LICENSE file in the root of the source

View File

@@ -1,5 +1,5 @@
; ;
; Copyright (c) 2010 The WebM project authors. All Rights Reserved. ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
; ;
; Use of this source code is governed by a BSD-style license ; Use of this source code is governed by a BSD-style license
; that can be found in the LICENSE file in the root of the source ; that can be found in the LICENSE file in the root of the source

View File

@@ -1,5 +1,5 @@
; ;
; Copyright (c) 2010 The WebM project authors. All Rights Reserved. ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
; ;
; Use of this source code is governed by a BSD-style license ; Use of this source code is governed by a BSD-style license
; that can be found in the LICENSE file in the root of the source ; that can be found in the LICENSE file in the root of the source
@@ -55,87 +55,113 @@ pstep RN r1
;stack const char *thresh, ;stack const char *thresh,
;stack int count ;stack int count
; All 16 elements in flimit are equal. So, in the code, only one load is needed ;Note: All 16 elements in flimit are equal. So, in the code, only one load is needed
; for flimit. Same applies to limit. thresh is not used in simple looopfilter ;for flimit. Same way applies to limit and thresh.
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|vp8_loop_filter_simple_horizontal_edge_armv6| PROC |vp8_loop_filter_simple_horizontal_edge_armv6| PROC
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
stmdb sp!, {r4 - r11, lr} stmdb sp!, {r4 - r11, lr}
ldr r12, [r3] ; limit sub src, src, pstep, lsl #1 ; move src pointer down by 2 lines
ldr r3, [src, -pstep, lsl #1] ; p1
ldr r4, [src, -pstep] ; p0 ldr r12, [r3], #4 ; limit
ldr r5, [src] ; q0 ldr r3, [src], pstep ; p1
ldr r6, [src, pstep] ; q1
ldr r7, [r2] ; flimit ldr r9, [sp, #36] ; count for 8-in-parallel
ldr r4, [src], pstep ; p0
ldr r7, [r2], #4 ; flimit
ldr r5, [src], pstep ; q0
ldr r2, c0x80808080 ldr r2, c0x80808080
ldr r9, [sp, #40] ; count for 8-in-parallel
ldr r6, [src] ; q1
uadd8 r7, r7, r7 ; flimit * 2 uadd8 r7, r7, r7 ; flimit * 2
mov r9, r9, lsl #1 ; double the count. we're doing 4 at a time mov r9, r9, lsl #1 ; 4-in-parallel
uadd8 r12, r7, r12 ; flimit * 2 + limit uadd8 r12, r7, r12 ; flimit * 2 + limit
mov lr, #0 ; need 0 in a couple places
|simple_hnext8| |simple_hnext8|
; vp8_simple_filter_mask() ; vp8_simple_filter_mask() function
uqsub8 r7, r3, r6 ; p1 - q1 uqsub8 r7, r3, r6 ; p1 - q1
uqsub8 r8, r6, r3 ; q1 - p1 uqsub8 r8, r6, r3 ; q1 - p1
uqsub8 r10, r4, r5 ; p0 - q0 uqsub8 r10, r4, r5 ; p0 - q0
uqsub8 r11, r5, r4 ; q0 - p0 uqsub8 r11, r5, r4 ; q0 - p0
orr r8, r8, r7 ; abs(p1 - q1) orr r8, r8, r7 ; abs(p1 - q1)
ldr lr, c0x7F7F7F7F ; 01111111 mask
orr r10, r10, r11 ; abs(p0 - q0) orr r10, r10, r11 ; abs(p0 - q0)
and r8, lr, r8, lsr #1 ; abs(p1 - q1) / 2
uqadd8 r10, r10, r10 ; abs(p0 - q0) * 2 uqadd8 r10, r10, r10 ; abs(p0 - q0) * 2
uhadd8 r8, r8, lr ; abs(p1 - q2) >> 1 mvn lr, #0 ; r10 == -1
uqadd8 r10, r10, r8 ; abs(p0 - q0)*2 + abs(p1 - q1)/2 uqadd8 r10, r10, r8 ; abs(p0 - q0)*2 + abs(p1 - q1)/2
mvn r8, #0 ; STALL waiting on r10 :(
usub8 r10, r12, r10 ; compare to flimit. usub8 sets GE flags uqsub8 r10, r10, r12 ; compare to flimit
sel r10, r8, lr ; filter mask: F or 0 mov r8, #0
cmp r10, #0
beq simple_hskip_filter ; skip filtering if all masks are 0x00
;vp8_simple_filter() usub8 r10, r8, r10 ; use usub8 instead of ssub8
; STALL (maybe?) when are flags set? :/
sel r10, lr, r8 ; filter mask: lr
cmp r10, #0
beq simple_hskip_filter ; skip filtering
;vp8_simple_filter() function
eor r3, r3, r2 ; p1 offset to convert to a signed value eor r3, r3, r2 ; p1 offset to convert to a signed value
eor r6, r6, r2 ; q1 offset to convert to a signed value eor r6, r6, r2 ; q1 offset to convert to a signed value
eor r4, r4, r2 ; p0 offset to convert to a signed value eor r4, r4, r2 ; p0 offset to convert to a signed value
eor r5, r5, r2 ; q0 offset to convert to a signed value eor r5, r5, r2 ; q0 offset to convert to a signed value
qsub8 r3, r3, r6 ; vp8_filter = p1 - q1 qsub8 r3, r3, r6 ; vp8_filter (r3) = vp8_signed_char_clamp(p1-q1)
qsub8 r6, r5, r4 ; q0 - p0 qsub8 r6, r5, r4 ; vp8_filter = vp8_signed_char_clamp(vp8_filter + 3 * ( q0 - p0))
qadd8 r3, r3, r6 ; += q0 - p0
qadd8 r3, r3, r6
ldr r8, c0x03030303 ; r8 = 3
qadd8 r3, r3, r6
ldr r7, c0x04040404 ldr r7, c0x04040404
qadd8 r3, r3, r6 ; += q0 - p0
ldr r8, c0x03030303
qadd8 r3, r3, r6 ; vp8_filter = p1-q1 + 3*(q0-p0))
;STALL
and r3, r3, r10 ; vp8_filter &= mask
qadd8 r7 , r3 , r7 ; Filter1 = vp8_filter + 4 qadd8 r3, r3, r6
qadd8 r8 , r3 , r8 ; Filter2 = vp8_filter + 3 and r3, r3, lr ; vp8_filter &= mask;
shadd8 r7 , r7 , lr ;save bottom 3 bits so that we round one side +4 and the other +3
shadd8 r8 , r8 , lr qadd8 r8 , r3 , r8 ; Filter2 (r8) = vp8_signed_char_clamp(vp8_filter+3)
shadd8 r7 , r7 , lr qadd8 r3 , r3 , r7 ; Filter1 (r3) = vp8_signed_char_clamp(vp8_filter+4)
shadd8 r8 , r8 , lr
shadd8 r7 , r7 , lr ; Filter1 >>= 3
shadd8 r8 , r8 , lr ; Filter2 >>= 3
qsub8 r5 ,r5, r7 ; u = q0 - Filter1 mov r7, #0
qadd8 r4, r4, r8 ; u = p0 + Filter2 shadd8 r8 , r8 , r7 ; Filter2 >>= 3
eor r5, r5, r2 ; *oq0 = u^0x80 shadd8 r3 , r3 , r7 ; Filter1 >>= 3
str r5, [src] ; store oq0 result shadd8 r8 , r8 , r7
shadd8 r3 , r3 , r7
shadd8 r8 , r8 , r7 ; r8: Filter2
shadd8 r3 , r3 , r7 ; r7: filter1
;calculate output
sub src, src, pstep, lsl #1
qadd8 r4, r4, r8 ; u = vp8_signed_char_clamp(p0 + Filter2)
qsub8 r5 ,r5, r3 ; u = vp8_signed_char_clamp(q0 - Filter1)
eor r4, r4, r2 ; *op0 = u^0x80 eor r4, r4, r2 ; *op0 = u^0x80
str r4, [src, -pstep] ; store op0 result str r4, [src], pstep ; store op0 result
eor r5, r5, r2 ; *oq0 = u^0x80
str r5, [src], pstep ; store oq0 result
|simple_hskip_filter| |simple_hskip_filter|
subs r9, r9, #1 add src, src, #4
addne src, src, #4 ; next row sub src, src, pstep
sub src, src, pstep, lsl #1
ldrne r3, [src, -pstep, lsl #1] ; p1 subs r9, r9, #1
ldrne r4, [src, -pstep] ; p0
ldrne r5, [src] ; q0 ;pld [src]
ldrne r6, [src, pstep] ; q1 ;pld [src, pstep]
;pld [src, pstep, lsl #1]
ldrne r3, [src], pstep ; p1
ldrne r4, [src], pstep ; p0
ldrne r5, [src], pstep ; q0
ldrne r6, [src] ; q1
bne simple_hnext8 bne simple_hnext8
@@ -148,9 +174,9 @@ pstep RN r1
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
stmdb sp!, {r4 - r11, lr} stmdb sp!, {r4 - r11, lr}
ldr r12, [r2] ; r12: flimit ldr r12, [r2], #4 ; r12: flimit
ldr r2, c0x80808080 ldr r2, c0x80808080
ldr r7, [r3] ; limit ldr r7, [r3], #4 ; limit
; load soure data to r7, r8, r9, r10 ; load soure data to r7, r8, r9, r10
ldrh r3, [src, #-2] ldrh r3, [src, #-2]
@@ -187,14 +213,16 @@ pstep RN r1
uqsub8 r10, r5, r4 ; q0 - p0 uqsub8 r10, r5, r4 ; q0 - p0
orr r7, r7, r8 ; abs(p1 - q1) orr r7, r7, r8 ; abs(p1 - q1)
orr r9, r9, r10 ; abs(p0 - q0) orr r9, r9, r10 ; abs(p0 - q0)
mov r8, #0 ldr lr, c0x7F7F7F7F ; 0111 1111 mask
uqadd8 r9, r9, r9 ; abs(p0 - q0) * 2 uqadd8 r9, r9, r9 ; abs(p0 - q0) * 2
uhadd8 r7, r7, r8 ; abs(p1 - q1) / 2 and r7, lr, r7, lsr #1 ; abs(p1 - q1) / 2
mov r8, #0
uqadd8 r7, r7, r9 ; abs(p0 - q0)*2 + abs(p1 - q1)/2 uqadd8 r7, r7, r9 ; abs(p0 - q0)*2 + abs(p1 - q1)/2
mvn r10, #0 ; r10 == -1 mvn r10, #0 ; r10 == -1
uqsub8 r7, r7, r12 ; compare to flimit
usub8 r7, r12, r7 ; compare to flimit usub8 r7, r8, r7
sel lr, r10, r8 ; filter mask sel r7, r10, r8 ; filter mask: lr
cmp lr, #0 cmp lr, #0
beq simple_vskip_filter ; skip filtering beq simple_vskip_filter ; skip filtering
@@ -205,34 +233,35 @@ pstep RN r1
eor r4, r4, r2 ; p0 offset to convert to a signed value eor r4, r4, r2 ; p0 offset to convert to a signed value
eor r5, r5, r2 ; q0 offset to convert to a signed value eor r5, r5, r2 ; q0 offset to convert to a signed value
qsub8 r3, r3, r6 ; vp8_filter = p1 - q1 qsub8 r3, r3, r6 ; vp8_filter (r3) = vp8_signed_char_clamp(p1-q1)
qsub8 r6, r5, r4 ; q0 - p0 qsub8 r6, r5, r4 ; vp8_filter = vp8_signed_char_clamp(vp8_filter + 3 * ( q0 - p0))
qadd8 r3, r3, r6 ; vp8_filter += q0 - p0 qadd8 r3, r3, r6
ldr r9, c0x03030303 ; r9 = 3 ldr r8, c0x03030303 ; r8 = 3
qadd8 r3, r3, r6 ; vp8_filter += q0 - p0 qadd8 r3, r3, r6
ldr r7, c0x04040404 ldr r7, c0x04040404
qadd8 r3, r3, r6 ; vp8_filter = p1-q1 + 3*(q0-p0)) qadd8 r3, r3, r6
;STALL
and r3, r3, lr ; vp8_filter &= mask and r3, r3, lr ; vp8_filter &= mask
qadd8 r9 , r3 , r9 ; Filter2 = vp8_filter + 3 ;save bottom 3 bits so that we round one side +4 and the other +3
qadd8 r3 , r3 , r7 ; Filter1 = vp8_filter + 4 qadd8 r8 , r3 , r8 ; Filter2 (r8) = vp8_signed_char_clamp(vp8_filter+3)
qadd8 r3 , r3 , r7 ; Filter1 (r3) = vp8_signed_char_clamp(vp8_filter+4)
shadd8 r9 , r9 , r8 mov r7, #0
shadd8 r3 , r3 , r8 shadd8 r8 , r8 , r7 ; Filter2 >>= 3
shadd8 r9 , r9 , r8 shadd8 r3 , r3 , r7 ; Filter1 >>= 3
shadd8 r3 , r3 , r8 shadd8 r8 , r8 , r7
shadd8 r9 , r9 , r8 ; Filter2 >>= 3 shadd8 r3 , r3 , r7
shadd8 r3 , r3 , r8 ; Filter1 >>= 3 shadd8 r8 , r8 , r7 ; r8: filter2
shadd8 r3 , r3 , r7 ; r7: filter1
;calculate output ;calculate output
sub src, src, pstep, lsl #2 sub src, src, pstep, lsl #2
qadd8 r4, r4, r9 ; u = p0 + Filter2 qadd8 r4, r4, r8 ; u = vp8_signed_char_clamp(p0 + Filter2)
qsub8 r5, r5, r3 ; u = q0 - Filter1 qsub8 r5, r5, r3 ; u = vp8_signed_char_clamp(q0 - Filter1)
eor r4, r4, r2 ; *op0 = u^0x80 eor r4, r4, r2 ; *op0 = u^0x80
eor r5, r5, r2 ; *oq0 = u^0x80 eor r5, r5, r2 ; *oq0 = u^0x80
@@ -257,6 +286,10 @@ pstep RN r1
|simple_vskip_filter| |simple_vskip_filter|
subs r11, r11, #1 subs r11, r11, #1
;pld [src]
;pld [src, pstep]
;pld [src, pstep, lsl #1]
; load soure data to r7, r8, r9, r10 ; load soure data to r7, r8, r9, r10
ldrneh r3, [src, #-2] ldrneh r3, [src, #-2]
ldrneh r4, [src], pstep ldrneh r4, [src], pstep
@@ -276,12 +309,14 @@ pstep RN r1
bne simple_vnext8 bne simple_vnext8
ldmia sp!, {r4 - r11, pc} ldmia sp!, {r4 - r12, pc}
ENDP ; |vp8_loop_filter_simple_vertical_edge_armv6| ENDP ; |vp8_loop_filter_simple_vertical_edge_armv6|
; Constant Pool ; Constant Pool
c0x80808080 DCD 0x80808080 c0x80808080 DCD 0x80808080
c0x03030303 DCD 0x03030303 c0x03030303 DCD 0x03030303
c0x04040404 DCD 0x04040404 c0x04040404 DCD 0x04040404
c0x01010101 DCD 0x01010101
c0x7F7F7F7F DCD 0x7F7F7F7F
END END

View File

@@ -1,5 +1,5 @@
; ;
; Copyright (c) 2010 The WebM project authors. All Rights Reserved. ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
; ;
; Use of this source code is governed by a BSD-style license ; Use of this source code is governed by a BSD-style license
; that can be found in the LICENSE file in the root of the source ; that can be found in the LICENSE file in the root of the source
@@ -25,10 +25,10 @@
;and the result is stored in transpose. ;and the result is stored in transpose.
|vp8_sixtap_predict8x4_armv6| PROC |vp8_sixtap_predict8x4_armv6| PROC
stmdb sp!, {r4 - r11, lr} stmdb sp!, {r4 - r11, lr}
str r3, [sp, #-184]! ;reserve space on stack for temporary storage, store yoffset sub sp, sp, #184 ;reserve space on stack for temporary storage: 20x(8+1) +4
cmp r2, #0 ;skip first_pass filter if xoffset=0 cmp r2, #0 ;skip first_pass filter if xoffset=0
add lr, sp, #4 ;point to temporary buffer str r3, [sp], #4 ;store yoffset
beq skip_firstpass_filter beq skip_firstpass_filter
;first-pass filter ;first-pass filter
@@ -45,6 +45,7 @@
mov r2, #0x90000 ; height=9 is top part of counter mov r2, #0x90000 ; height=9 is top part of counter
sub r1, r1, #8 sub r1, r1, #8
mov lr, #20
|first_pass_hloop_v6| |first_pass_hloop_v6|
ldrb r6, [r0, #-5] ; load source data ldrb r6, [r0, #-5] ; load source data
@@ -82,10 +83,10 @@
tst r2, #0xff ; test loop counter tst r2, #0xff ; test loop counter
usat r11, #8, r11, asr #7 usat r11, #8, r11, asr #7
add r12, r12, #0x40 add r12, r12, #0x40
strh r11, [lr], #20 ; result is transposed and stored, which strh r11, [sp], lr ; result is transposed and stored, which
usat r12, #8, r12, asr #7 usat r12, #8, r12, asr #7
strh r12, [lr], #20 strh r12, [sp], lr
movne r11, r6 movne r11, r6
movne r12, r7 movne r12, r7
@@ -106,7 +107,8 @@
subs r2, r2, #0x10000 subs r2, r2, #0x10000
sub lr, lr, #158 mov r6, #158
sub sp, sp, r6
add r0, r0, r1 ; move to next input line add r0, r0, r1 ; move to next input line
@@ -114,7 +116,10 @@
;second pass filter ;second pass filter
secondpass_filter secondpass_filter
ldr r3, [sp], #4 ; load back yoffset mov r1, #18
sub sp, sp, r1 ; 18+4
ldr r3, [sp, #-4] ; load back yoffset
ldr r0, [sp, #216] ; load dst address from stack 180+36 ldr r0, [sp, #216] ; load dst address from stack 180+36
ldr r1, [sp, #220] ; load dst stride from stack 180+40 ldr r1, [sp, #220] ; load dst stride from stack 180+40
@@ -187,28 +192,30 @@ skip_firstpass_filter
sub r0, r0, r1, lsl #1 sub r0, r0, r1, lsl #1
sub r1, r1, #8 sub r1, r1, #8
mov r2, #9 mov r2, #9
mov r3, #20
skip_firstpass_hloop skip_firstpass_hloop
ldrb r4, [r0], #1 ; load data ldrb r4, [r0], #1 ; load data
subs r2, r2, #1 subs r2, r2, #1
ldrb r5, [r0], #1 ldrb r5, [r0], #1
strh r4, [lr], #20 ; store it to immediate buffer strh r4, [sp], r3 ; store it to immediate buffer
ldrb r6, [r0], #1 ; load data ldrb r6, [r0], #1 ; load data
strh r5, [lr], #20 strh r5, [sp], r3
ldrb r7, [r0], #1 ldrb r7, [r0], #1
strh r6, [lr], #20 strh r6, [sp], r3
ldrb r8, [r0], #1 ldrb r8, [r0], #1
strh r7, [lr], #20 strh r7, [sp], r3
ldrb r9, [r0], #1 ldrb r9, [r0], #1
strh r8, [lr], #20 strh r8, [sp], r3
ldrb r10, [r0], #1 ldrb r10, [r0], #1
strh r9, [lr], #20 strh r9, [sp], r3
ldrb r11, [r0], #1 ldrb r11, [r0], #1
strh r10, [lr], #20 strh r10, [sp], r3
add r0, r0, r1 ; move to next input line add r0, r0, r1 ; move to next input line
strh r11, [lr], #20 strh r11, [sp], r3
sub lr, lr, #158 ; move over to next column mov r4, #158
sub sp, sp, r4 ; move over to next column
bne skip_firstpass_hloop bne skip_firstpass_hloop
b secondpass_filter b secondpass_filter
@@ -243,6 +250,8 @@ skip_secondpass_hloop
ENDP ENDP
;----------------- ;-----------------
AREA subpelfilters8_dat, DATA, READWRITE ;read/write by default
;Data section with name data_area is specified. DCD reserves space in memory for 48 data.
;One word each is reserved. Label filter_coeff can be used to access the data. ;One word each is reserved. Label filter_coeff can be used to access the data.
;Data address: filter_coeff, filter_coeff+4, filter_coeff+8 ... ;Data address: filter_coeff, filter_coeff+4, filter_coeff+8 ...
_filter8_coeff_ _filter8_coeff_

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
@@ -10,29 +10,128 @@
#include <math.h> #include <math.h>
#include "vp8/common/filter.h" #include "subpixel.h"
#include "vp8/common/subpixel.h"
#include "bilinearfilter_arm.h" #define BLOCK_HEIGHT_WIDTH 4
#define VP8_FILTER_WEIGHT 128
#define VP8_FILTER_SHIFT 7
static const short bilinear_filters[8][2] =
{
{ 128, 0 },
{ 112, 16 },
{ 96, 32 },
{ 80, 48 },
{ 64, 64 },
{ 48, 80 },
{ 32, 96 },
{ 16, 112 }
};
extern void vp8_filter_block2d_bil_first_pass_armv6
(
unsigned char *src_ptr,
unsigned short *output_ptr,
unsigned int src_pixels_per_line,
unsigned int output_height,
unsigned int output_width,
const short *vp8_filter
);
extern void vp8_filter_block2d_bil_second_pass_armv6
(
unsigned short *src_ptr,
unsigned char *output_ptr,
int output_pitch,
unsigned int output_height,
unsigned int output_width,
const short *vp8_filter
);
/*
void vp8_filter_block2d_bil_first_pass_6
(
unsigned char *src_ptr,
unsigned short *output_ptr,
unsigned int src_pixels_per_line,
unsigned int output_height,
unsigned int output_width,
const short *vp8_filter
)
{
unsigned int i, j;
for ( i=0; i<output_height; i++ )
{
for ( j=0; j<output_width; j++ )
{
// Apply bilinear filter
output_ptr[j] = ( ( (int)src_ptr[0] * vp8_filter[0]) +
((int)src_ptr[1] * vp8_filter[1]) +
(VP8_FILTER_WEIGHT/2) ) >> VP8_FILTER_SHIFT;
src_ptr++;
}
// Next row...
src_ptr += src_pixels_per_line - output_width;
output_ptr += output_width;
}
}
void vp8_filter_block2d_bil_second_pass_6
(
unsigned short *src_ptr,
unsigned char *output_ptr,
int output_pitch,
unsigned int output_height,
unsigned int output_width,
const short *vp8_filter
)
{
unsigned int i,j;
int Temp;
for ( i=0; i<output_height; i++ )
{
for ( j=0; j<output_width; j++ )
{
// Apply filter
Temp = ((int)src_ptr[0] * vp8_filter[0]) +
((int)src_ptr[output_width] * vp8_filter[1]) +
(VP8_FILTER_WEIGHT/2);
output_ptr[j] = (unsigned int)(Temp >> VP8_FILTER_SHIFT);
src_ptr++;
}
// Next row...
//src_ptr += src_pixels_per_line - output_width;
output_ptr += output_pitch;
}
}
*/
void vp8_filter_block2d_bil_armv6 void vp8_filter_block2d_bil_armv6
( (
unsigned char *src_ptr, unsigned char *src_ptr,
unsigned char *dst_ptr, unsigned char *output_ptr,
unsigned int src_pitch, unsigned int src_pixels_per_line,
unsigned int dst_pitch, unsigned int dst_pitch,
const short *HFilter, const short *HFilter,
const short *VFilter, const short *VFilter,
int Width, int Width,
int Height int Height
) )
{ {
unsigned short FData[36*16]; /* Temp data buffer used in filtering */
/* First filter 1-D horizontally... */ unsigned short FData[36*16]; // Temp data bufffer used in filtering
vp8_filter_block2d_bil_first_pass_armv6(src_ptr, FData, src_pitch, Height + 1, Width, HFilter);
/* then 1-D vertically... */ // First filter 1-D horizontally...
vp8_filter_block2d_bil_second_pass_armv6(FData, dst_ptr, dst_pitch, Height, Width, VFilter); // pixel_step = 1;
vp8_filter_block2d_bil_first_pass_armv6(src_ptr, FData, src_pixels_per_line, Height + 1, Width, HFilter);
// then 1-D vertically...
vp8_filter_block2d_bil_second_pass_armv6(FData, output_ptr, dst_pitch, Height, Width, VFilter);
} }
@@ -49,8 +148,8 @@ void vp8_bilinear_predict4x4_armv6
const short *HFilter; const short *HFilter;
const short *VFilter; const short *VFilter;
HFilter = vp8_bilinear_filters[xoffset]; HFilter = bilinear_filters[xoffset];
VFilter = vp8_bilinear_filters[yoffset]; VFilter = bilinear_filters[yoffset];
vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 4, 4); vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 4, 4);
} }
@@ -68,8 +167,8 @@ void vp8_bilinear_predict8x8_armv6
const short *HFilter; const short *HFilter;
const short *VFilter; const short *VFilter;
HFilter = vp8_bilinear_filters[xoffset]; HFilter = bilinear_filters[xoffset];
VFilter = vp8_bilinear_filters[yoffset]; VFilter = bilinear_filters[yoffset];
vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 8); vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 8);
} }
@@ -87,8 +186,8 @@ void vp8_bilinear_predict8x4_armv6
const short *HFilter; const short *HFilter;
const short *VFilter; const short *VFilter;
HFilter = vp8_bilinear_filters[xoffset]; HFilter = bilinear_filters[xoffset];
VFilter = vp8_bilinear_filters[yoffset]; VFilter = bilinear_filters[yoffset];
vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 4); vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 4);
} }
@@ -106,8 +205,8 @@ void vp8_bilinear_predict16x16_armv6
const short *HFilter; const short *HFilter;
const short *VFilter; const short *VFilter;
HFilter = vp8_bilinear_filters[xoffset]; HFilter = bilinear_filters[xoffset];
VFilter = vp8_bilinear_filters[yoffset]; VFilter = bilinear_filters[yoffset];
vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 16, 16); vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 16, 16);
} }

View File

@@ -1,35 +0,0 @@
/*
* Copyright (c) 2011 The WebM project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef BILINEARFILTER_ARM_H
#define BILINEARFILTER_ARM_H
extern void vp8_filter_block2d_bil_first_pass_armv6
(
const unsigned char *src_ptr,
unsigned short *dst_ptr,
unsigned int src_pitch,
unsigned int height,
unsigned int width,
const short *vp8_filter
);
extern void vp8_filter_block2d_bil_second_pass_armv6
(
const unsigned short *src_ptr,
unsigned char *dst_ptr,
int dst_pitch,
unsigned int height,
unsigned int width,
const short *vp8_filter
);
#endif /* BILINEARFILTER_ARM_H */

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
@@ -11,10 +11,26 @@
#include "vpx_ports/config.h" #include "vpx_ports/config.h"
#include <math.h> #include <math.h>
#include "vp8/common/filter.h" #include "subpixel.h"
#include "vp8/common/subpixel.h"
#include "vpx_ports/mem.h" #include "vpx_ports/mem.h"
#define BLOCK_HEIGHT_WIDTH 4
#define VP8_FILTER_WEIGHT 128
#define VP8_FILTER_SHIFT 7
DECLARE_ALIGNED(16, static const short, sub_pel_filters[8][6]) =
{
{ 0, 0, 128, 0, 0, 0 }, // note that 1/8 pel positions are just as per alpha -0.5 bicubic
{ 0, -6, 123, 12, -1, 0 },
{ 2, -11, 108, 36, -8, 1 }, // New 1/4 pel 6 tap filter
{ 0, -9, 93, 50, -6, 0 },
{ 3, -16, 77, 77, -16, 3 }, // New 1/2 pel 6 tap filter
{ 0, -6, 50, 93, -9, 0 },
{ 1, -8, 36, 108, -11, 2 }, // New 1/4 pel 6 tap filter
{ 0, -1, 12, 123, -6, 0 },
};
extern void vp8_filter_block2d_first_pass_armv6 extern void vp8_filter_block2d_first_pass_armv6
( (
unsigned char *src_ptr, unsigned char *src_ptr,
@@ -34,15 +50,6 @@ extern void vp8_filter_block2d_second_pass_armv6
const short *vp8_filter const short *vp8_filter
); );
extern void vp8_filter4_block2d_second_pass_armv6
(
short *src_ptr,
unsigned char *output_ptr,
unsigned int output_pitch,
unsigned int cnt,
const short *vp8_filter
);
extern void vp8_filter_block2d_first_pass_only_armv6 extern void vp8_filter_block2d_first_pass_only_armv6
( (
unsigned char *src_ptr, unsigned char *src_ptr,
@@ -77,42 +84,79 @@ void vp8_sixtap_predict_armv6
{ {
const short *HFilter; const short *HFilter;
const short *VFilter; const short *VFilter;
DECLARE_ALIGNED_ARRAY(4, short, FData, 12*4); /* Temp data buffer used in filtering */ DECLARE_ALIGNED_ARRAY(4, short, FData, 12*4); // Temp data bufffer used in filtering
HFilter = vp8_sub_pel_filters[xoffset]; /* 6 tap */ HFilter = sub_pel_filters[xoffset]; // 6 tap
VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */ VFilter = sub_pel_filters[yoffset]; // 6 tap
/* Vfilter is null. First pass only */ // Vfilter is null. First pass only
if (xoffset && !yoffset) if (xoffset && !yoffset)
{ {
/*vp8_filter_block2d_first_pass_armv6 ( src_ptr, FData+2, src_pixels_per_line, 4, 4, HFilter ); //vp8_filter_block2d_first_pass_armv6 ( src_ptr, FData+2, src_pixels_per_line, 4, 4, HFilter );
vp8_filter_block2d_second_pass_armv6 ( FData+2, dst_ptr, dst_pitch, 4, VFilter );*/ //vp8_filter_block2d_second_pass_armv6 ( FData+2, dst_ptr, dst_pitch, 4, VFilter );
vp8_filter_block2d_first_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 4, dst_pitch, HFilter); vp8_filter_block2d_first_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 4, dst_pitch, HFilter);
} }
/* Hfilter is null. Second pass only */ // Hfilter is null. Second pass only
else if (!xoffset && yoffset) else if (!xoffset && yoffset)
{ {
vp8_filter_block2d_second_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 4, dst_pitch, VFilter); vp8_filter_block2d_second_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 4, dst_pitch, VFilter);
} }
else else
{ {
/* Vfilter is a 4 tap filter */ // Vfilter is a 4 tap filter
if (yoffset & 0x1) if (yoffset & 0x1)
{
vp8_filter_block2d_first_pass_armv6(src_ptr - src_pixels_per_line, FData + 1, src_pixels_per_line, 4, 7, HFilter); vp8_filter_block2d_first_pass_armv6(src_ptr - src_pixels_per_line, FData + 1, src_pixels_per_line, 4, 7, HFilter);
vp8_filter4_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 4, VFilter); // Vfilter is 6 tap filter
}
/* Vfilter is 6 tap filter */
else else
{
vp8_filter_block2d_first_pass_armv6(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 4, 9, HFilter); vp8_filter_block2d_first_pass_armv6(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 4, 9, HFilter);
vp8_filter_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 4, VFilter);
} vp8_filter_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 4, VFilter);
} }
} }
/*
void vp8_sixtap_predict8x4_armv6
(
unsigned char *src_ptr,
int src_pixels_per_line,
int xoffset,
int yoffset,
unsigned char *dst_ptr,
int dst_pitch
)
{
const short *HFilter;
const short *VFilter;
DECLARE_ALIGNED_ARRAY(4, short, FData, 16*8); // Temp data bufffer used in filtering
HFilter = sub_pel_filters[xoffset]; // 6 tap
VFilter = sub_pel_filters[yoffset]; // 6 tap
// if (xoffset && !yoffset)
// {
// vp8_filter_block2d_first_pass_only_armv6 ( src_ptr, dst_ptr, src_pixels_per_line, 8, dst_pitch, HFilter );
// }
// Hfilter is null. Second pass only
// else if (!xoffset && yoffset)
// {
// vp8_filter_block2d_second_pass_only_armv6 ( src_ptr, dst_ptr, src_pixels_per_line, 8, dst_pitch, VFilter );
// }
// else
// {
// if (yoffset & 0x1)
// vp8_filter_block2d_first_pass_armv6 ( src_ptr-src_pixels_per_line, FData+1, src_pixels_per_line, 8, 7, HFilter );
// else
vp8_filter_block2d_first_pass_armv6 ( src_ptr-(2*src_pixels_per_line), FData, src_pixels_per_line, 8, 9, HFilter );
vp8_filter_block2d_second_pass_armv6 ( FData+2, dst_ptr, dst_pitch, 4, 8, VFilter );
// }
}
*/
void vp8_sixtap_predict8x8_armv6 void vp8_sixtap_predict8x8_armv6
( (
unsigned char *src_ptr, unsigned char *src_ptr,
@@ -125,16 +169,16 @@ void vp8_sixtap_predict8x8_armv6
{ {
const short *HFilter; const short *HFilter;
const short *VFilter; const short *VFilter;
DECLARE_ALIGNED_ARRAY(4, short, FData, 16*8); /* Temp data buffer used in filtering */ DECLARE_ALIGNED_ARRAY(4, short, FData, 16*8); // Temp data bufffer used in filtering
HFilter = vp8_sub_pel_filters[xoffset]; /* 6 tap */ HFilter = sub_pel_filters[xoffset]; // 6 tap
VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */ VFilter = sub_pel_filters[yoffset]; // 6 tap
if (xoffset && !yoffset) if (xoffset && !yoffset)
{ {
vp8_filter_block2d_first_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 8, dst_pitch, HFilter); vp8_filter_block2d_first_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 8, dst_pitch, HFilter);
} }
/* Hfilter is null. Second pass only */ // Hfilter is null. Second pass only
else if (!xoffset && yoffset) else if (!xoffset && yoffset)
{ {
vp8_filter_block2d_second_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 8, dst_pitch, VFilter); vp8_filter_block2d_second_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 8, dst_pitch, VFilter);
@@ -142,15 +186,11 @@ void vp8_sixtap_predict8x8_armv6
else else
{ {
if (yoffset & 0x1) if (yoffset & 0x1)
{
vp8_filter_block2d_first_pass_armv6(src_ptr - src_pixels_per_line, FData + 1, src_pixels_per_line, 8, 11, HFilter); vp8_filter_block2d_first_pass_armv6(src_ptr - src_pixels_per_line, FData + 1, src_pixels_per_line, 8, 11, HFilter);
vp8_filter4_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 8, VFilter);
}
else else
{
vp8_filter_block2d_first_pass_armv6(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 8, 13, HFilter); vp8_filter_block2d_first_pass_armv6(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 8, 13, HFilter);
vp8_filter_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 8, VFilter);
} vp8_filter_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 8, VFilter);
} }
} }
@@ -167,16 +207,16 @@ void vp8_sixtap_predict16x16_armv6
{ {
const short *HFilter; const short *HFilter;
const short *VFilter; const short *VFilter;
DECLARE_ALIGNED_ARRAY(4, short, FData, 24*16); /* Temp data buffer used in filtering */ DECLARE_ALIGNED_ARRAY(4, short, FData, 24*16); // Temp data bufffer used in filtering
HFilter = vp8_sub_pel_filters[xoffset]; /* 6 tap */ HFilter = sub_pel_filters[xoffset]; // 6 tap
VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */ VFilter = sub_pel_filters[yoffset]; // 6 tap
if (xoffset && !yoffset) if (xoffset && !yoffset)
{ {
vp8_filter_block2d_first_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 16, dst_pitch, HFilter); vp8_filter_block2d_first_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 16, dst_pitch, HFilter);
} }
/* Hfilter is null. Second pass only */ // Hfilter is null. Second pass only
else if (!xoffset && yoffset) else if (!xoffset && yoffset)
{ {
vp8_filter_block2d_second_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 16, dst_pitch, VFilter); vp8_filter_block2d_second_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 16, dst_pitch, VFilter);
@@ -184,15 +224,11 @@ void vp8_sixtap_predict16x16_armv6
else else
{ {
if (yoffset & 0x1) if (yoffset & 0x1)
{
vp8_filter_block2d_first_pass_armv6(src_ptr - src_pixels_per_line, FData + 1, src_pixels_per_line, 16, 19, HFilter); vp8_filter_block2d_first_pass_armv6(src_ptr - src_pixels_per_line, FData + 1, src_pixels_per_line, 16, 19, HFilter);
vp8_filter4_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 16, VFilter);
}
else else
{
vp8_filter_block2d_first_pass_armv6(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 16, 21, HFilter); vp8_filter_block2d_first_pass_armv6(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 16, 21, HFilter);
vp8_filter_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 16, VFilter);
} vp8_filter_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 16, VFilter);
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
@@ -15,44 +15,41 @@
#if HAVE_ARMV6 #if HAVE_ARMV6
extern prototype_idct(vp8_short_idct4x4llm_1_v6); extern prototype_idct(vp8_short_idct4x4llm_1_v6);
extern prototype_idct(vp8_short_idct4x4llm_v6_dual); extern prototype_idct(vp8_short_idct4x4llm_v6_dual);
extern prototype_idct_scalar_add(vp8_dc_only_idct_add_v6); extern prototype_idct_scalar(vp8_dc_only_idct_armv6);
extern prototype_second_order(vp8_short_inv_walsh4x4_1_v6); extern prototype_second_order(vp8_short_inv_walsh4x4_1_armv6);
extern prototype_second_order(vp8_short_inv_walsh4x4_v6); extern prototype_second_order(vp8_short_inv_walsh4x4_armv6);
#if !CONFIG_RUNTIME_CPU_DETECT
#undef vp8_idct_idct1 #undef vp8_idct_idct1
#define vp8_idct_idct1 vp8_short_idct4x4llm_1_v6 #define vp8_idct_idct1 vp8_short_idct4x4llm_1_v6
#undef vp8_idct_idct16 #undef vp8_idct_idct16
#define vp8_idct_idct16 vp8_short_idct4x4llm_v6_dual #define vp8_idct_idct16 vp8_short_idct4x4llm_v6_dual
#undef vp8_idct_idct1_scalar_add #undef vp8_idct_idct1_scalar
#define vp8_idct_idct1_scalar_add vp8_dc_only_idct_add_v6 #define vp8_idct_idct1_scalar vp8_dc_only_idct_armv6
#undef vp8_idct_iwalsh1 #undef vp8_idct_iwalsh1
#define vp8_idct_iwalsh1 vp8_short_inv_walsh4x4_1_v6 #define vp8_idct_iwalsh1 vp8_short_inv_walsh4x4_1_armv6
#undef vp8_idct_iwalsh16 #undef vp8_idct_iwalsh16
#define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_v6 #define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_armv6
#endif
#endif #endif
#if HAVE_ARMV7 #if HAVE_ARMV7
extern prototype_idct(vp8_short_idct4x4llm_1_neon); extern prototype_idct(vp8_short_idct4x4llm_1_neon);
extern prototype_idct(vp8_short_idct4x4llm_neon); extern prototype_idct(vp8_short_idct4x4llm_neon);
extern prototype_idct_scalar_add(vp8_dc_only_idct_add_neon); extern prototype_idct_scalar(vp8_dc_only_idct_neon);
extern prototype_second_order(vp8_short_inv_walsh4x4_1_neon); extern prototype_second_order(vp8_short_inv_walsh4x4_1_neon);
extern prototype_second_order(vp8_short_inv_walsh4x4_neon); extern prototype_second_order(vp8_short_inv_walsh4x4_neon);
#if !CONFIG_RUNTIME_CPU_DETECT
#undef vp8_idct_idct1 #undef vp8_idct_idct1
#define vp8_idct_idct1 vp8_short_idct4x4llm_1_neon #define vp8_idct_idct1 vp8_short_idct4x4llm_1_neon
#undef vp8_idct_idct16 #undef vp8_idct_idct16
#define vp8_idct_idct16 vp8_short_idct4x4llm_neon #define vp8_idct_idct16 vp8_short_idct4x4llm_neon
#undef vp8_idct_idct1_scalar_add #undef vp8_idct_idct1_scalar
#define vp8_idct_idct1_scalar_add vp8_dc_only_idct_add_neon #define vp8_idct_idct1_scalar vp8_dc_only_idct_neon
#undef vp8_idct_iwalsh1 #undef vp8_idct_iwalsh1
#define vp8_idct_iwalsh1 vp8_short_inv_walsh4x4_1_neon #define vp8_idct_iwalsh1 vp8_short_inv_walsh4x4_1_neon
@@ -60,6 +57,5 @@ extern prototype_second_order(vp8_short_inv_walsh4x4_neon);
#undef vp8_idct_iwalsh16 #undef vp8_idct_iwalsh16
#define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_neon #define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_neon
#endif #endif
#endif
#endif #endif

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
@@ -11,8 +11,18 @@
#include "vpx_ports/config.h" #include "vpx_ports/config.h"
#include <math.h> #include <math.h>
#include "vp8/common/loopfilter.h" #include "loopfilter.h"
#include "vp8/common/onyxc_int.h" #include "onyxc_int.h"
typedef void loop_filter_uvfunction
(
unsigned char *u, // source pointer
int p, // pitch
const signed char *flimit,
const signed char *limit,
const signed char *thresh,
unsigned char *v
);
extern prototype_loopfilter(vp8_loop_filter_horizontal_edge_armv6); extern prototype_loopfilter(vp8_loop_filter_horizontal_edge_armv6);
extern prototype_loopfilter(vp8_loop_filter_vertical_edge_armv6); extern prototype_loopfilter(vp8_loop_filter_vertical_edge_armv6);
@@ -35,19 +45,19 @@ extern loop_filter_uvfunction vp8_mbloop_filter_vertical_edge_uv_neon;
#if HAVE_ARMV6 #if HAVE_ARMV6
/*ARMV6 loopfilter functions*/ //ARMV6 loopfilter functions
/* Horizontal MB filtering */ // Horizontal MB filtering
void vp8_loop_filter_mbh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_mbh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
{ {
(void) simpler_lpf; (void) simpler_lpf;
vp8_mbloop_filter_horizontal_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); vp8_mbloop_filter_horizontal_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
if (u_ptr) if (u_ptr)
vp8_mbloop_filter_horizontal_edge_armv6(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1); vp8_mbloop_filter_horizontal_edge_armv6(u_ptr, uv_stride, lfi->uvmbflim, lfi->uvlim, lfi->uvmbthr, 1);
if (v_ptr) if (v_ptr)
vp8_mbloop_filter_horizontal_edge_armv6(v_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1); vp8_mbloop_filter_horizontal_edge_armv6(v_ptr, uv_stride, lfi->uvmbflim, lfi->uvlim, lfi->uvmbthr, 1);
} }
void vp8_loop_filter_mbhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_mbhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
@@ -57,21 +67,21 @@ void vp8_loop_filter_mbhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsi
(void) v_ptr; (void) v_ptr;
(void) uv_stride; (void) uv_stride;
(void) simpler_lpf; (void) simpler_lpf;
vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
} }
/* Vertical MB Filtering */ // Vertical MB Filtering
void vp8_loop_filter_mbv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_mbv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
{ {
(void) simpler_lpf; (void) simpler_lpf;
vp8_mbloop_filter_vertical_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); vp8_mbloop_filter_vertical_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
if (u_ptr) if (u_ptr)
vp8_mbloop_filter_vertical_edge_armv6(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1); vp8_mbloop_filter_vertical_edge_armv6(u_ptr, uv_stride, lfi->uvmbflim, lfi->uvlim, lfi->uvmbthr, 1);
if (v_ptr) if (v_ptr)
vp8_mbloop_filter_vertical_edge_armv6(v_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1); vp8_mbloop_filter_vertical_edge_armv6(v_ptr, uv_stride, lfi->uvmbflim, lfi->uvlim, lfi->uvmbthr, 1);
} }
void vp8_loop_filter_mbvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_mbvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
@@ -81,10 +91,10 @@ void vp8_loop_filter_mbvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsi
(void) v_ptr; (void) v_ptr;
(void) uv_stride; (void) uv_stride;
(void) simpler_lpf; (void) simpler_lpf;
vp8_loop_filter_simple_vertical_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); vp8_loop_filter_simple_vertical_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
} }
/* Horizontal B Filtering */ // Horizontal B Filtering
void vp8_loop_filter_bh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_bh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
{ {
@@ -94,10 +104,10 @@ void vp8_loop_filter_bh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsign
vp8_loop_filter_horizontal_edge_armv6(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); vp8_loop_filter_horizontal_edge_armv6(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
if (u_ptr) if (u_ptr)
vp8_loop_filter_horizontal_edge_armv6(u_ptr + 4 * uv_stride, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1); vp8_loop_filter_horizontal_edge_armv6(u_ptr + 4 * uv_stride, uv_stride, lfi->uvflim, lfi->uvlim, lfi->uvthr, 1);
if (v_ptr) if (v_ptr)
vp8_loop_filter_horizontal_edge_armv6(v_ptr + 4 * uv_stride, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1); vp8_loop_filter_horizontal_edge_armv6(v_ptr + 4 * uv_stride, uv_stride, lfi->uvflim, lfi->uvlim, lfi->uvthr, 1);
} }
void vp8_loop_filter_bhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_bhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
@@ -112,7 +122,7 @@ void vp8_loop_filter_bhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsig
vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
} }
/* Vertical B Filtering */ // Vertical B Filtering
void vp8_loop_filter_bv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_bv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
{ {
@@ -122,10 +132,10 @@ void vp8_loop_filter_bv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsign
vp8_loop_filter_vertical_edge_armv6(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); vp8_loop_filter_vertical_edge_armv6(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
if (u_ptr) if (u_ptr)
vp8_loop_filter_vertical_edge_armv6(u_ptr + 4, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1); vp8_loop_filter_vertical_edge_armv6(u_ptr + 4, uv_stride, lfi->uvflim, lfi->uvlim, lfi->uvthr, 1);
if (v_ptr) if (v_ptr)
vp8_loop_filter_vertical_edge_armv6(v_ptr + 4, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1); vp8_loop_filter_vertical_edge_armv6(v_ptr + 4, uv_stride, lfi->uvflim, lfi->uvlim, lfi->uvthr, 1);
} }
void vp8_loop_filter_bvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_bvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
@@ -142,16 +152,16 @@ void vp8_loop_filter_bvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsig
#endif #endif
#if HAVE_ARMV7 #if HAVE_ARMV7
/* NEON loopfilter functions */ // NEON loopfilter functions
/* Horizontal MB filtering */ // Horizontal MB filtering
void vp8_loop_filter_mbh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_mbh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
{ {
(void) simpler_lpf; (void) simpler_lpf;
vp8_mbloop_filter_horizontal_edge_y_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); vp8_mbloop_filter_horizontal_edge_y_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
if (u_ptr) if (u_ptr)
vp8_mbloop_filter_horizontal_edge_uv_neon(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, v_ptr); vp8_mbloop_filter_horizontal_edge_uv_neon(u_ptr, uv_stride, lfi->uvmbflim, lfi->uvlim, lfi->uvmbthr, v_ptr);
} }
void vp8_loop_filter_mbhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_mbhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
@@ -161,18 +171,18 @@ void vp8_loop_filter_mbhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsig
(void) v_ptr; (void) v_ptr;
(void) uv_stride; (void) uv_stride;
(void) simpler_lpf; (void) simpler_lpf;
vp8_loop_filter_simple_horizontal_edge_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); vp8_loop_filter_simple_horizontal_edge_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
} }
/* Vertical MB Filtering */ // Vertical MB Filtering
void vp8_loop_filter_mbv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_mbv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
{ {
(void) simpler_lpf; (void) simpler_lpf;
vp8_mbloop_filter_vertical_edge_y_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); vp8_mbloop_filter_vertical_edge_y_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
if (u_ptr) if (u_ptr)
vp8_mbloop_filter_vertical_edge_uv_neon(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, v_ptr); vp8_mbloop_filter_vertical_edge_uv_neon(u_ptr, uv_stride, lfi->uvmbflim, lfi->uvlim, lfi->uvmbthr, v_ptr);
} }
void vp8_loop_filter_mbvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_mbvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
@@ -182,10 +192,10 @@ void vp8_loop_filter_mbvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsig
(void) v_ptr; (void) v_ptr;
(void) uv_stride; (void) uv_stride;
(void) simpler_lpf; (void) simpler_lpf;
vp8_loop_filter_simple_vertical_edge_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2); vp8_loop_filter_simple_vertical_edge_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
} }
/* Horizontal B Filtering */ // Horizontal B Filtering
void vp8_loop_filter_bh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_bh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
{ {
@@ -195,7 +205,7 @@ void vp8_loop_filter_bh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigne
vp8_loop_filter_horizontal_edge_y_neon(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); vp8_loop_filter_horizontal_edge_y_neon(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
if (u_ptr) if (u_ptr)
vp8_loop_filter_horizontal_edge_uv_neon(u_ptr + 4 * uv_stride, uv_stride, lfi->flim, lfi->lim, lfi->thr, v_ptr + 4 * uv_stride); vp8_loop_filter_horizontal_edge_uv_neon(u_ptr + 4 * uv_stride, uv_stride, lfi->uvflim, lfi->uvlim, lfi->uvthr, v_ptr + 4 * uv_stride);
} }
void vp8_loop_filter_bhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_bhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
@@ -210,7 +220,7 @@ void vp8_loop_filter_bhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsign
vp8_loop_filter_simple_horizontal_edge_neon(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); vp8_loop_filter_simple_horizontal_edge_neon(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
} }
/* Vertical B Filtering */ // Vertical B Filtering
void vp8_loop_filter_bv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_bv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf) int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
{ {
@@ -220,7 +230,7 @@ void vp8_loop_filter_bv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigne
vp8_loop_filter_vertical_edge_y_neon(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2); vp8_loop_filter_vertical_edge_y_neon(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
if (u_ptr) if (u_ptr)
vp8_loop_filter_vertical_edge_uv_neon(u_ptr + 4, uv_stride, lfi->flim, lfi->lim, lfi->thr, v_ptr + 4); vp8_loop_filter_vertical_edge_uv_neon(u_ptr + 4, uv_stride, lfi->uvflim, lfi->uvlim, lfi->uvthr, v_ptr + 4);
} }
void vp8_loop_filter_bvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, void vp8_loop_filter_bvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
@@ -22,7 +22,6 @@ extern prototype_loopfilter_block(vp8_loop_filter_bvs_armv6);
extern prototype_loopfilter_block(vp8_loop_filter_mbhs_armv6); extern prototype_loopfilter_block(vp8_loop_filter_mbhs_armv6);
extern prototype_loopfilter_block(vp8_loop_filter_bhs_armv6); extern prototype_loopfilter_block(vp8_loop_filter_bhs_armv6);
#if !CONFIG_RUNTIME_CPU_DETECT
#undef vp8_lf_normal_mb_v #undef vp8_lf_normal_mb_v
#define vp8_lf_normal_mb_v vp8_loop_filter_mbv_armv6 #define vp8_lf_normal_mb_v vp8_loop_filter_mbv_armv6
@@ -47,7 +46,6 @@ extern prototype_loopfilter_block(vp8_loop_filter_bhs_armv6);
#undef vp8_lf_simple_b_h #undef vp8_lf_simple_b_h
#define vp8_lf_simple_b_h vp8_loop_filter_bhs_armv6 #define vp8_lf_simple_b_h vp8_loop_filter_bhs_armv6
#endif #endif
#endif
#if HAVE_ARMV7 #if HAVE_ARMV7
extern prototype_loopfilter_block(vp8_loop_filter_mbv_neon); extern prototype_loopfilter_block(vp8_loop_filter_mbv_neon);
@@ -59,7 +57,6 @@ extern prototype_loopfilter_block(vp8_loop_filter_bvs_neon);
extern prototype_loopfilter_block(vp8_loop_filter_mbhs_neon); extern prototype_loopfilter_block(vp8_loop_filter_mbhs_neon);
extern prototype_loopfilter_block(vp8_loop_filter_bhs_neon); extern prototype_loopfilter_block(vp8_loop_filter_bhs_neon);
#if !CONFIG_RUNTIME_CPU_DETECT
#undef vp8_lf_normal_mb_v #undef vp8_lf_normal_mb_v
#define vp8_lf_normal_mb_v vp8_loop_filter_mbv_neon #define vp8_lf_normal_mb_v vp8_loop_filter_mbv_neon
@@ -84,6 +81,5 @@ extern prototype_loopfilter_block(vp8_loop_filter_bhs_neon);
#undef vp8_lf_simple_b_h #undef vp8_lf_simple_b_h
#define vp8_lf_simple_b_h vp8_loop_filter_bhs_neon #define vp8_lf_simple_b_h vp8_loop_filter_bhs_neon
#endif #endif
#endif
#endif #endif

Some files were not shown because too many files have changed in this diff Show More