Compare commits

...

148 Commits
main ... 2.3.1

Author SHA1 Message Date
Vadim Pisarevsky
2154e6251f fixed typo in CMakeLists.txt 2011-08-17 19:54:50 +00:00
Vadim Pisarevsky
aea4486cde made "make package_source" work on Mac too. 2011-08-17 19:05:10 +00:00
Vadim Pisarevsky
bd2185dbe8 regenerated PDFs one more time 2011-08-17 17:32:18 +00:00
Vadim Pisarevsky
98a8c2170d copied the latest tutorials & find_obj.py sample from trunk to 2.3 branch 2011-08-17 17:28:58 +00:00
Vadim Pisarevsky
d040791dd9 copied the latest tutorials & find_obj.py sample from trunk to 2.3 branch 2011-08-17 13:09:53 +00:00
Vadim Pisarevsky
57ce8ee687 fixed multi-scale Hough transform (ticket #1320) 2011-08-17 09:18:08 +00:00
Vadim Pisarevsky
e71745a390 disabled fast-math by default. 2011-08-17 09:01:25 +00:00
Vadim Pisarevsky
8d6d592c0b updated Python samples from trunk 2011-08-16 18:31:43 +00:00
Vadim Pisarevsky
280012472b backported updated ffmpeg from trunk to 2.3 2011-08-16 13:45:55 +00:00
Vadim Pisarevsky
94de7d3f3f fixed crashes in parallel HOG detector; avoid use of new POPCNT instruction in ORB (to make it compatible with older CPUs). 2011-08-16 13:34:56 +00:00
Vadim Pisarevsky
14a35a8d7b fixed Ximea constructor call 2011-08-15 14:16:22 +00:00
Vadim Pisarevsky
f779a85a99 added tests for Vec & Matx multiplication 2011-08-15 13:08:46 +00:00
Vadim Pisarevsky
41a35c3c95 fixed bug #1306 (Vec assignment) 2011-08-15 12:29:39 +00:00
Vadim Pisarevsky
14c05d9bcf updated PDFs (fixed many broken links) 2011-08-15 12:18:41 +00:00
Andrey Kamaev
ed349fc3b5 Fixed Android build 2011-08-15 09:11:29 +00:00
Andrey Kamaev
d3b14b7111 Documenation: merged recent changes from trunk 2011-08-15 08:13:53 +00:00
Vadim Pisarevsky
567949e2c4 fixed tickets #1301, #1303, #1305 2011-08-14 19:43:59 +00:00
Vadim Pisarevsky
574a961cc1 added cv.py micro-module for backward compatibility with existing Python scripts using prev-gen Python API. 2011-08-12 18:00:35 +00:00
Vadim Pisarevsky
b206f9c269 another attempt to fix #1299 2011-08-12 15:16:54 +00:00
Vadim Pisarevsky
4e85c7dbda Branch 2.3 is overridden with the latest copy from trunk. 2011-08-12 12:56:59 +00:00
Anatoly Baksheev
7d82a14d1a ticket 1280 2011-08-08 09:23:44 +00:00
Vadim Pisarevsky
f278dd782d fixed loading floating-point EXR images. 32-bit integer EXR are still to be checked. 2011-07-28 13:34:37 +00:00
Vadim Pisarevsky
baa7a8ca7f fixed INSTALL target build in Visual Studio (ticket #1220) 2011-07-13 09:01:18 +00:00
Vadim Pisarevsky
a2287affb7 a few more fixes from Gabor 2011-07-07 11:36:40 +00:00
Vadim Pisarevsky
38afa582b0 possibly fixed problem reported in #1198 2011-07-06 18:45:11 +00:00
Vadim Pisarevsky
9a1ef7272d fixed 2 possible build problems (in opencv_gpu & docs) (ticket #1191 + fix from Steve Macao). removed obsolete stuff from opencv_extra_api.hpp, since with InputArray/OutputArray the existing C++ API can be successfully wrapped for Python. 2011-07-05 14:28:25 +00:00
Vadim Pisarevsky
5c23d3d96d possibly fixed occasional deletion of mymath.sty in the case of in-source builds (though, in-source builds are still not recommended) - ticket #1163. 2011-07-04 16:33:54 +00:00
Vadim Pisarevsky
24b5be04cc fixed /incremental linker flag & opencv_ffmpeg.dll target dir in the case of static libs 2011-07-04 03:37:13 +00:00
Vadim Pisarevsky
7db6c31400 corrected opencv_ffmpeg.dll copying when the target dir does not exists yet 2011-07-04 00:35:56 +00:00
Vadim Pisarevsky
391603e2e8 fix cap_ffmpeg.cpp build when no ffmpeg is found 2011-07-03 23:45:35 +00:00
Vadim Pisarevsky
a31ad531f0 fix build on Linux/Mac 2011-07-03 23:42:33 +00:00
Vadim Pisarevsky
8bd792d72b turn on build_package by default 2011-07-03 23:21:10 +00:00
Vadim Pisarevsky
4bc4cdb919 added BUILD_WITH_DEBUG_INFO option, which (when is turned off) lets user to get more compact binaries, especially in debug mode. reworked opencv_ffmpeg module. Now we have opencv_ffmpeg.dll and opencv_ffmpeg_64.dll, which have very few dependencies and can be used by any further OpenCV version. 2011-07-03 23:02:53 +00:00
Vadim Pisarevsky
cd24a3ec45 exclude ffmpeg from static crt builds; correct TBB lib path on x64 2011-07-02 22:43:35 +00:00
Vadim Pisarevsky
f296e22580 updated with the latest fixes from Lena 2011-07-01 21:36:37 +00:00
Vadim Pisarevsky
53f67de6a1 fix displaying backprojectpatch picture, parameter description in planar subdivs; one more fix from Gabor 2011-07-01 21:33:41 +00:00
Elena Fedotova
14e70599f2 Purpose: 2nd review cycle - final 2011-07-01 21:25:19 +00:00
Elena Fedotova
7cc52490ec Purpose: 2nd review cycle - final 2011-07-01 21:09:31 +00:00
Elena Fedotova
11a03c89a4 Purpose: 2nd review cycle - final 2011-07-01 21:00:37 +00:00
Elena Fedotova
b487ba4d63 Purpose: 2nd review cycle - final 2011-07-01 20:44:51 +00:00
Vadim Pisarevsky
4adcfc6215 we do not need strmiids.lib anymore 2011-07-01 13:42:18 +00:00
Vadim Pisarevsky
69f55e9a99 some more corrections from Gabor 2011-07-01 12:05:48 +00:00
Andrey Morozov
2b689f34f7 revert suffix in version 2011-07-01 10:45:58 +00:00
Vadim Pisarevsky
1dbd9a5547 updated pdf's for release (hopefully) 2011-07-01 10:35:26 +00:00
Vadim Pisarevsky
48a4493dfa a few corrections from Gabor 2011-07-01 09:31:16 +00:00
Vincent Rabaud
785e77086f - make sure we don't crash for an empty image 2011-07-01 01:26:00 +00:00
Vadim Pisarevsky
403b9b36a4 added missing break in setProperty() method (ticket #1183) 2011-06-30 20:50:05 +00:00
Elena Fedotova
9d2d0404e5 Purpose: 2nd review cycle. 2011-06-30 20:15:42 +00:00
Andrey Kamaev
8771046092 Fixed version suffixes for Windows 2011-06-30 19:42:09 +00:00
Andrey Morozov
b4c468836b corrected library names 2011-06-30 13:27:04 +00:00
Andrey Morozov
341f9f9272 fixed compile error on VS2010 2011-06-30 12:21:39 +00:00
Vadim Pisarevsky
ac0e7f6e85 the DocumentFragmentTests now reside in modules/python/test 2011-06-30 11:47:15 +00:00
Vadim Pisarevsky
6a964b81d4 added some pics, used by python tests, to samples/cpp. fixed python tests. fixed overflow on Core_Mul test 2011-06-30 11:46:29 +00:00
Vadim Pisarevsky
00ca5812d5 fixed many Sphinx warnings 2011-06-30 11:02:21 +00:00
Vadim Pisarevsky
9a2e0b81e9 fixed generation of opencv_ffmpeg in the case of static libs 2011-06-29 23:44:26 +00:00
Vadim Pisarevsky
42da4bd438 updated reference manuals 2011-06-29 21:43:38 +00:00
Vadim Pisarevsky
9b71f222ee removed obsolete files from doc/tutorials 2011-06-29 20:01:24 +00:00
Vadim Pisarevsky
9289b7be7e added missing images for tutorials 2011-06-29 19:54:04 +00:00
Vadim Pisarevsky
43b772846b added latest tutorials from the trunk; fixed a few build problems 2011-06-29 19:30:55 +00:00
Vadim Pisarevsky
a6de4b522b added latest tutorials from the trunk; fixed a few build problems 2011-06-29 19:30:11 +00:00
Vadim Pisarevsky
40853a7917 added latest tutorials from the trunk; fixed a few build problems 2011-06-29 19:28:14 +00:00
Vadim Pisarevsky
6414e3fcc8 added latest tutorials from the trunk; fixed a few build problems 2011-06-29 19:24:52 +00:00
Vadim Pisarevsky
30e393dfa6 added latest tutorials from the trunk; fixed a few build problems 2011-06-29 19:20:02 +00:00
Vadim Pisarevsky
05c98f568f corrected a few bugs in refman 2011-06-29 19:14:55 +00:00
Vadim Pisarevsky
36af349ab4 corrected a few bugs in refman 2011-06-29 19:13:19 +00:00
Vadim Pisarevsky
6d810b13be reference manuals merge is complete! 2011-06-29 17:23:10 +00:00
Vadim Pisarevsky
9638448c81 reference manuals merge is complete! 2011-06-29 17:21:43 +00:00
Vincent Rabaud
7f38aa60a2 fix #1169 2011-06-29 17:02:12 +00:00
Andrey Morozov
e7c62abbd6 fixed bug with building on VS2010 2011-06-29 15:26:18 +00:00
Vadim Pisarevsky
04cbb956bf fixed problem with copying huge matrices (and probably other operations on huge matrices) (#1176) 2011-06-29 15:21:49 +00:00
Vadim Pisarevsky
da1f141422 reverted latest changes since they break user build scripts 2011-06-29 14:03:00 +00:00
Vadim Pisarevsky
37d76471ac added check for multi-channel matrices in cv::compare (ticket #1175) 2011-06-29 13:05:25 +00:00
Ilya Lysenkov
9074e79f7d ML doc fixes 2011-06-29 08:16:16 +00:00
James Bowman
183be05274 Merge trunk bugfix r5723 2011-06-29 00:49:31 +00:00
Ilya Lysenkov
284a9b083e Merged ml docs with 1.1 docs 2011-06-28 15:18:54 +00:00
Ilya Lysenkov
f8597ceb8b Improved docs of Neural Networks 2011-06-28 12:14:26 +00:00
Andrey Morozov
57344608ea revert changes 2011-06-28 09:24:26 +00:00
Ilya Lysenkov
0aaea76621 Improved docs of SVM 2011-06-28 08:11:25 +00:00
Vadim Pisarevsky
c6b7cfc13c continued merging of C, Python and C++ reference manuals 2011-06-27 22:42:45 +00:00
Vadim Pisarevsky
a2880a547a fixed Matx<m, n>::diag(const Matx<m, n>::diag_type& d) constructor. 2011-06-27 19:50:54 +00:00
Andrey Morozov
9ec6d4a467 modified name suffix on windows depending on the parameters of the assembly 2011-06-27 15:18:14 +00:00
Ilya Lysenkov
fea2b6e5dd Documented CvSVMParams 2011-06-27 14:45:36 +00:00
Vadim Pisarevsky
c21cf06c5f integrated most of the new Python stuff into the reference manual 2011-06-27 13:33:19 +00:00
Vadim Pisarevsky
4bf7000c5c add a symbolic link "<install path>/share/OpenCV => <install path>/share/opencv" (ticket #1168) 2011-06-27 11:37:33 +00:00
Ilya Lysenkov
831857994c Updated Normal Bayes Classifier docs 2011-06-27 10:02:04 +00:00
Ilya Lysenkov
2835fe88ac Added ocv:cfunction:: check to check_docs.py 2011-06-27 09:44:29 +00:00
Ilya Lysenkov
f7495e5845 Updated GBT docs 2011-06-27 09:42:18 +00:00
Ilya Lysenkov
0f0573e722 Minor improvements of boosting docs 2011-06-27 09:10:14 +00:00
Vadim Pisarevsky
f9782b3a06 merged the latest changes (grammar & style fix) and pre-latest changes (C & old Python interface and relocated short descriptions). Also, made some additional corrections 2011-06-27 08:13:00 +00:00
Ilya Lysenkov
ef392b0553 Minor doc fix 2011-06-27 08:12:50 +00:00
Ilya Lysenkov
86ab189b01 Improved docs of K-Nearest Neighbors 2011-06-27 08:10:04 +00:00
Vadim Pisarevsky
83f25a345d merged the latest changes (grammar & style fix) and pre-latest changes (C & old Python interface and relocated short descriptions). Also, made some additional corrections 2011-06-27 08:03:42 +00:00
Elena Fedotova
ea520d1307 Purpose: 2nd review cycle. 2011-06-27 05:04:15 +00:00
Elena Fedotova
1c41a747f7 Purpose: 2nd review cycle. 2011-06-27 04:53:01 +00:00
Elena Fedotova
eb0714da28 Purpose: 2nd review cycle. 2011-06-27 04:47:57 +00:00
Vadim Pisarevsky
8003831f93 inserted some C & old Python declarations into the reference manual 2011-06-26 21:37:16 +00:00
Vadim Pisarevsky
c10fea8368 corrected installation path of OpenCVConfig.cmake on Linux/BSD (ticket #1168) 2011-06-25 09:36:16 +00:00
Vadim Pisarevsky
cf7f189fb2 added type check to calcOpticalFlowPyrLK; added data type specifications in this function description. 2011-06-25 09:04:10 +00:00
Vadim Pisarevsky
07b07481ec improved look of the generated PDF and html docs; started merging reference manuals 2011-06-24 23:55:51 +00:00
Vincent Rabaud
e2219b724e - fix a bug if the descriptor is used for images of different size 2011-06-24 23:21:24 +00:00
Vadim Pisarevsky
0e3af357d3 put short descriptions right after the titles 2011-06-24 16:27:57 +00:00
Vadim Pisarevsky
d758cca902 integrated grammar fixes from tech writer (part 4) 2011-06-24 14:20:41 +00:00
Vadim Pisarevsky
ed977a476a integrated grammar fixes from tech writer (part 3) 2011-06-24 14:07:31 +00:00
Vadim Pisarevsky
8b6fe3b21f integrated grammar fixes from tech writer (part 2) 2011-06-24 13:24:28 +00:00
Ilya Lysenkov
0bd3d6d2aa Minor doc fixes 2011-06-24 13:05:45 +00:00
Vadim Pisarevsky
501033db8b integrated grammar fixes from tech writer (part I) 2011-06-24 12:57:25 +00:00
Ilya Lysenkov
84e4f59704 Minor doc fix 2011-06-24 12:14:17 +00:00
Ilya Lysenkov
c7840ab126 Improved decision trees docs 2011-06-24 10:40:48 +00:00
Ilya Lysenkov
187f628f5b Improved random trees docs 2011-06-24 08:06:08 +00:00
Ethan Rublee
f8d23637e5 r5654 correction. 2011-06-24 06:42:21 +00:00
Ethan Rublee
a3da7951dc Minor change, related to previous commit. 2011-06-24 06:16:31 +00:00
Ethan Rublee
3692eb6976 This fixes external project error with cmake/unix and boost.
An example error:
Cannot generate a safe linker search path for target tod_ectomodule because
  files in some directories may conflict with libraries in implicit
  directories
2011-06-23 19:48:15 +00:00
Ilya Lysenkov
04d484c6ce Minor doc fix 2011-06-23 15:40:20 +00:00
Ilya Lysenkov
023f48dcf3 Added some docs of CvDTree 2011-06-23 15:38:55 +00:00
Ilya Lysenkov
62bedd190e Documented CvRTParams and added some docs of CvRTrees 2011-06-23 15:36:07 +00:00
Ilya Lysenkov
270e130d68 Documented CvBoostParams and added some docs of CvBoost 2011-06-23 15:34:12 +00:00
Ilya Lysenkov
3ae78b1b96 Documented CvEMParams and CvEM 2011-06-23 15:31:36 +00:00
Vadim Pisarevsky
f7fec3c1b5 warn user in the case of in-source builds 2011-06-23 12:37:35 +00:00
Vadim Pisarevsky
168a6c3751 start merging the reference manuals 2011-06-23 11:35:49 +00:00
Andrey Kamaev
beed941949 Fixed NumPy search on Windows x64 2011-06-23 09:18:55 +00:00
Andrey Kamaev
a927b0e7c2 Main CMakeLists.txt merged with trunk - always search for python 2011-06-22 11:52:22 +00:00
Ilya Lysenkov
01daea8227 Documented CvDTreeParams 2011-06-22 10:14:32 +00:00
Vadim Pisarevsky
333371dd8c be able to build docs without building python bindings (ticket #1157) 2011-06-22 08:38:26 +00:00
Vadim Pisarevsky
c4bca84bc9 possibly fixed problem with compiling library with MinGW 4.4.1 2011-06-22 08:24:27 +00:00
Ilya Lysenkov
3fa4c8f091 Copied some comments from wiki to the main documentation 2011-06-21 15:24:43 +00:00
Ilya Lysenkov
fc02f7ff4a Fixed parentheses 2011-06-21 13:09:10 +00:00
Vadim Pisarevsky
9f6cbb507e fixed path to the test image in precornerdetect test 2011-06-21 12:07:16 +00:00
Vadim Pisarevsky
784e12cc2d updated PDFs 2011-06-21 12:02:42 +00:00
Vadim Pisarevsky
19b383b141 put TBB into the installation package 2011-06-21 11:48:16 +00:00
Vadim Pisarevsky
79626f0883 compressed acricles_pattern.png 2011-06-21 10:58:49 +00:00
Elena Fedotova
b60a277e4e Purpose: 2nd review cycle. 2011-06-20 22:05:01 +00:00
Vadim Pisarevsky
0d58749f2e removed opencv tests executables from the installation. put msvcr100.dll and msvcp100.dll into the installation package. 2011-06-20 21:58:23 +00:00
Vadim Pisarevsky
85606acad7 removed opencv/tests subdirectory from installation; updated license; removed obsolete doc/README.txt 2011-06-20 21:10:25 +00:00
Vadim Pisarevsky
5d3306da85 removed obsolete Python tests (the new ones have been moved to modules/python/test long ago) 2011-06-20 20:58:05 +00:00
Vadim Pisarevsky
a5b90e3127 removed obsolete Octave samples 2011-06-20 20:56:23 +00:00
Vadim Pisarevsky
e5b1454368 removed obsolete Python samples 2011-06-20 20:55:33 +00:00
Vadim Pisarevsky
65291b6095 fixed path to bayer.png 2011-06-20 20:29:23 +00:00
Vadim Pisarevsky
6aa396936e fixed cvDestroyWindow(), cvDestroyAllWindows() and cvSetTrackbarPos() on mac (ticket #631) 2011-06-20 20:20:43 +00:00
Vadim Pisarevsky
8c2246bdc8 fixed slider rendering in highgui windows on MacOSX (ticket #608; thanks to tingfan for the patch) 2011-06-20 19:25:21 +00:00
Vadim Pisarevsky
f6bc96c4fb temporarily add "rc" to the OpenCV installator 2011-06-20 16:11:27 +00:00
Andrey Kamaev
121b8d2319 Do not use prebuilt Android camera libs for armeabi hardware target 2011-06-20 15:54:50 +00:00
Vadim Pisarevsky
a5d656f31a fixed table on contents in HTML; added modification date; fixed cvtColor descriptions 2011-06-20 15:50:14 +00:00
Andrey Kamaev
9cff09d37e Added generation of OpenCV.mk file for Android development with ndk-build tool 2011-06-20 15:29:29 +00:00
Vadim Pisarevsky
cb9681174d raised version number to 2.3 (that's not a release yet; just to test the packages) 2011-06-20 15:03:32 +00:00
Vadim Pisarevsky
a971e06177 fixed bug #1153; updated tutorials 2011-06-20 14:26:22 +00:00
Ilya Lysenkov
9a7d86d939 Copied my today changes to 2.3 branch 2011-06-20 13:57:38 +00:00
Vadim Pisarevsky
4fa1c641eb added stub docs for the new Python bindings; updated PDF's 2011-06-20 13:55:24 +00:00
Andrey Morozov
e5f7a0c65f added define AVSEEK_FLAG_FRAME 2011-06-20 12:22:50 +00:00
180 changed files with 6237 additions and 2961 deletions

View File

@ -1,3 +1,2 @@
rem gcc -Wall -shared -o opencv_ffmpeg.dll -O3 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat -lavcodec -lavdevice -lswscale -lavutil -lwsock32 -lpthreadGÑE2 set path=c:\dev\msys32\bin;%path% & gcc -Wall -shared -o opencv_ffmpeg.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat -lavcodec -lavdevice -lswscale -lavutil -lwsock32
gcc -Wall -shared -o opencv_ffmpeg.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat -lavcodec -lavdevice -lswscale -lavutil -lwsock32 set path=c:\dev\msys64\bin;%path% & gcc -m64 -Wall -shared -o opencv_ffmpeg_64.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat64 -lavcodec64 -lavdevice64 -lswscale64 -lavutil64 -lavcore64 -lwsock32 -lws2_32
set path=c:\apps\mingw64\bin;%path% & gcc -Wall -shared -o opencv_ffmpeg_64.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat64 -lavcodec64 -lavdevice64 -lswscale64 -lavutil64 -lavcore64 -lwsock32

Binary file not shown.

Binary file not shown.

View File

@ -7,3 +7,38 @@ Otherwise the produced DLL will likely be dependent on libgcc_s_dw2-1.dll or sim
While we want to make the DLLs with minimum dependencies: Win32 libraries + msvcrt.dll. While we want to make the DLLs with minimum dependencies: Win32 libraries + msvcrt.dll.
ffopencv.c is really a C++ source, hence -x c++ is used. ffopencv.c is really a C++ source, hence -x c++ is used.
How to update opencv_ffmpeg.dll and opencv_ffmpeg_64.dll when a new version of FFMPEG is release?
1. Install 32-bit MinGW + MSYS from
http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst/
Let's assume, it's installed in C:\MSYS32.
2. Install 64-bit MinGW. http://mingw-w64.sourceforge.net/
Let's assume, it's installed in C:\MSYS64
3. Copy C:\MSYS32\msys to C:\MSYS64\msys. Edit C:\MSYS64\msys\etc\fstab, change C:\MSYS32 to C:\MSYS64.
4. Now you have working MSYS32 and MSYS64 environments.
Launch, one by one, C:\MSYS32\msys\msys.bat and C:\MSYS64\msys\msys.bat to create your home directories.
4. Download ffmpeg-x.y.z.tar.gz (where x.y.z denotes the actual ffmpeg version).
Copy it to C:\MSYS{32|64}\msys\home\<loginname> directory.
5. To build 32-bit ffmpeg libraries, run C:\MSYS32\msys\msys.bat and type the following commands:
5.1. tar -xzf ffmpeg-x.y.z.tar.gz
5.2. mkdir build
5.3. cd build
5.4. ../ffmpeg-x.y.z/configure --enable-w32threads
5.5. make
5.6. make install
5.7. cd /local/lib
5.8. strip -g *.a
6. Then repeat the same for 64-bit case. The output libs: libavcodec.a etc. need to be renamed to libavcodec64.a etc.
7. Then, copy all those libs to <opencv>\3rdparty\lib\, copy the headers to <opencv>\3rdparty\include\ffmpeg_.
8. Then, go to <opencv>\3rdparty\ffmpeg, edit make.bat
(change paths to the actual paths to your msys32 and msys64 distributions) and then run make.bat

File diff suppressed because it is too large Load Diff

View File

@ -85,7 +85,7 @@ enum DCTTransformType {
}; };
/** /**
* Sets up DCT. * Set up DCT.
* @param nbits size of the input array: * @param nbits size of the input array:
* (1 << nbits) for DCT-II, DCT-III and DST-I * (1 << nbits) for DCT-II, DCT-III and DST-I
* (1 << nbits) + 1 for DCT-I * (1 << nbits) + 1 for DCT-I

View File

@ -23,7 +23,7 @@
#ifndef AVCODEC_DXVA_H #ifndef AVCODEC_DXVA_H
#define AVCODEC_DXVA_H #define AVCODEC_DXVA_H
#include <msc_stdint.h> #include <stdint.h>
#include <dxva2api.h> #include <dxva2api.h>

View File

@ -1,211 +1,34 @@
/* /*
* AVOptions * This file is part of Libav.
* copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
* *
* This file is part of FFmpeg. * Libav is free software; you can redistribute it and/or
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either * License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version. * version 2.1 of the License, or (at your option) any later version.
* *
* FFmpeg is distributed in the hope that it will be useful, * Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details. * Lesser General Public License for more details.
* *
* You should have received a copy of the GNU Lesser General Public * You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software * License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
/**
* @file
* This header is provided for compatibility only and will be removed
* on next major bump
*/
#ifndef AVCODEC_OPT_H #ifndef AVCODEC_OPT_H
#define AVCODEC_OPT_H #define AVCODEC_OPT_H
/** #include "libavcodec/version.h"
* @file
* AVOptions
*/
#include "libavutil/rational.h" #if FF_API_OPT_H
#include "avcodec.h" #include "libavutil/opt.h"
enum AVOptionType{
FF_OPT_TYPE_FLAGS,
FF_OPT_TYPE_INT,
FF_OPT_TYPE_INT64,
FF_OPT_TYPE_DOUBLE,
FF_OPT_TYPE_FLOAT,
FF_OPT_TYPE_STRING,
FF_OPT_TYPE_RATIONAL,
FF_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length
FF_OPT_TYPE_CONST=128,
};
/**
* AVOption
*/
typedef struct AVOption {
const char *name;
/**
* short English help text
* @todo What about other languages?
*/
const char *help;
/**
* The offset relative to the context structure where the option
* value is stored. It should be 0 for named constants.
*/
int offset;
enum AVOptionType type;
/**
* the default value for scalar options
*/
double default_val;
double min; ///< minimum valid value for the option
double max; ///< maximum valid value for the option
int flags;
#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding
#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding
#define AV_OPT_FLAG_METADATA 4 ///< some data extracted or inserted into the file like title, comment, ...
#define AV_OPT_FLAG_AUDIO_PARAM 8
#define AV_OPT_FLAG_VIDEO_PARAM 16
#define AV_OPT_FLAG_SUBTITLE_PARAM 32
//FIXME think about enc-audio, ... style flags
/**
* The logical unit to which the option belongs. Non-constant
* options and corresponding named constants share the same
* unit. May be NULL.
*/
const char *unit;
} AVOption;
/**
* AVOption2.
* THIS IS NOT PART OF THE API/ABI YET!
* This is identical to AVOption except that default_val was replaced by
* an union, it should be compatible with AVOption on normal platforms.
*/
typedef struct AVOption2 {
const char *name;
/**
* short English help text
* @todo What about other languages?
*/
const char *help;
/**
* The offset relative to the context structure where the option
* value is stored. It should be 0 for named constants.
*/
int offset;
enum AVOptionType type;
/**
* the default value for scalar options
*/
union {
double dbl;
const char *str;
} default_val;
double min; ///< minimum valid value for the option
double max; ///< maximum valid value for the option
int flags;
/*
#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding
#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding
#define AV_OPT_FLAG_METADATA 4 ///< some data extracted or inserted into the file like title, comment, ...
#define AV_OPT_FLAG_AUDIO_PARAM 8
#define AV_OPT_FLAG_VIDEO_PARAM 16
#define AV_OPT_FLAG_SUBTITLE_PARAM 32
*/
//FIXME think about enc-audio, ... style flags
/**
* The logical unit to which the option belongs. Non-constant
* options and corresponding named constants share the same
* unit. May be NULL.
*/
const char *unit;
} AVOption2;
/**
* Looks for an option in obj. Looks only for the options which
* have the flags set as specified in mask and flags (that is,
* for which it is the case that opt->flags & mask == flags).
*
* @param[in] obj a pointer to a struct whose first element is a
* pointer to an AVClass
* @param[in] name the name of the option to look for
* @param[in] unit the unit of the option to look for, or any if NULL
* @return a pointer to the option found, or NULL if no option
* has been found
*/
const AVOption *av_find_opt(void *obj, const char *name, const char *unit, int mask, int flags);
#if LIBAVCODEC_VERSION_MAJOR < 53
/**
* @see av_set_string2()
*/
attribute_deprecated const AVOption *av_set_string(void *obj, const char *name, const char *val);
/**
* @return a pointer to the AVOption corresponding to the field set or
* NULL if no matching AVOption exists, or if the value val is not
* valid
* @see av_set_string3()
*/
attribute_deprecated const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc);
#endif #endif
/**
* Sets the field of obj with the given name to value.
*
* @param[in] obj A struct whose first element is a pointer to an
* AVClass.
* @param[in] name the name of the field to set
* @param[in] val The value to set. If the field is not of a string
* type, then the given string is parsed.
* SI postfixes and some named scalars are supported.
* If the field is of a numeric type, it has to be a numeric or named
* scalar. Behavior with more than one scalar and +- infix operators
* is undefined.
* If the field is of a flags type, it has to be a sequence of numeric
* scalars or named flags separated by '+' or '-'. Prefixing a flag
* with '+' causes it to be set without affecting the other flags;
* similarly, '-' unsets a flag.
* @param[out] o_out if non-NULL put here a pointer to the AVOption
* found
* @param alloc when 1 then the old value will be av_freed() and the
* new av_strduped()
* when 0 then no av_free() nor av_strdup() will be used
* @return 0 if the value has been set, or an AVERROR code in case of
* error:
* AVERROR(ENOENT) if no matching option exists
* AVERROR(ERANGE) if the value is out of range
* AVERROR(EINVAL) if the value is not valid
*/
int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out);
const AVOption *av_set_double(void *obj, const char *name, double n);
const AVOption *av_set_q(void *obj, const char *name, AVRational n);
const AVOption *av_set_int(void *obj, const char *name, int64_t n);
double av_get_double(void *obj, const char *name, const AVOption **o_out);
AVRational av_get_q(void *obj, const char *name, const AVOption **o_out);
int64_t av_get_int(void *obj, const char *name, const AVOption **o_out);
const char *av_get_string(void *obj, const char *name, const AVOption **o_out, char *buf, int buf_len);
const AVOption *av_next_option(void *obj, const AVOption *last);
int av_opt_show(void *obj, void *av_log_obj);
void av_opt_set_defaults(void *s);
void av_opt_set_defaults2(void *s, int mask, int flags);
#endif /* AVCODEC_OPT_H */ #endif /* AVCODEC_OPT_H */

View File

@ -24,7 +24,7 @@
#ifndef AVCODEC_VAAPI_H #ifndef AVCODEC_VAAPI_H
#define AVCODEC_VAAPI_H #define AVCODEC_VAAPI_H
#include <msc_stdint.h> #include <stdint.h>
/** /**
* \defgroup VAAPI_Decoding VA API Decoding * \defgroup VAAPI_Decoding VA API Decoding

View File

@ -38,7 +38,6 @@
* and rendering (API calls) are done as part of the VDPAU * and rendering (API calls) are done as part of the VDPAU
* presentation (vo_vdpau.c) module. * presentation (vo_vdpau.c) module.
* *
* @{
* \defgroup VDPAU_Decoding VDPAU Decoding * \defgroup VDPAU_Decoding VDPAU Decoding
* \ingroup Decoder * \ingroup Decoder
* @{ * @{
@ -68,6 +67,13 @@ struct vdpau_render_state {
int state; ///< Holds FF_VDPAU_STATE_* values. int state; ///< Holds FF_VDPAU_STATE_* values.
/** Describe size/location of the compressed video data.
Set to 0 when freeing bitstream_buffers. */
int bitstream_buffers_allocated;
int bitstream_buffers_used;
/** The user is responsible for freeing this buffer using av_freep(). */
VdpBitstreamBuffer *bitstream_buffers;
/** picture parameter information for all supported codecs */ /** picture parameter information for all supported codecs */
union VdpPictureInfo { union VdpPictureInfo {
VdpPictureInfoH264 h264; VdpPictureInfoH264 h264;
@ -75,13 +81,6 @@ struct vdpau_render_state {
VdpPictureInfoVC1 vc1; VdpPictureInfoVC1 vc1;
VdpPictureInfoMPEG4Part2 mpeg4; VdpPictureInfoMPEG4Part2 mpeg4;
} info; } info;
/** Describe size/location of the compressed video data.
Set to 0 when freeing bitstream_buffers. */
int bitstream_buffers_allocated;
int bitstream_buffers_used;
/** The user is responsible for freeing this buffer using av_freep(). */
VdpBitstreamBuffer *bitstream_buffers;
}; };
/* @}*/ /* @}*/

View File

@ -0,0 +1,72 @@
/*
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_VERSION_H
#define AVCODEC_VERSION_H
#define LIBAVCODEC_VERSION_MAJOR 53
#define LIBAVCODEC_VERSION_MINOR 7
#define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \
LIBAVCODEC_VERSION_MICRO)
#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \
LIBAVCODEC_VERSION_MICRO)
#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT
#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
/**
* Those FF_API_* defines are not part of public API.
* They may change, break or disappear at any time.
*/
#ifndef FF_API_PALETTE_CONTROL
#define FF_API_PALETTE_CONTROL (LIBAVCODEC_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_OLD_SAMPLE_FMT
#define FF_API_OLD_SAMPLE_FMT (LIBAVCODEC_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_OLD_AUDIOCONVERT
#define FF_API_OLD_AUDIOCONVERT (LIBAVCODEC_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_ANTIALIAS_ALGO
#define FF_API_ANTIALIAS_ALGO (LIBAVCODEC_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_REQUEST_CHANNELS
#define FF_API_REQUEST_CHANNELS (LIBAVCODEC_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_OPT_H
#define FF_API_OPT_H (LIBAVCODEC_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_THREAD_INIT
#define FF_API_THREAD_INIT (LIBAVCODEC_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_OLD_FF_PICT_TYPES
#define FF_API_OLD_FF_PICT_TYPES (LIBAVCODEC_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_FLAC_GLOBAL_OPTS
#define FF_API_FLAC_GLOBAL_OPTS (LIBAVCODEC_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_GET_PIX_FMT_NAME
#define FF_API_GET_PIX_FMT_NAME (LIBAVCODEC_VERSION_MAJOR < 54)
#endif
#endif /* AVCODEC_VERSION_H */

View File

@ -25,11 +25,6 @@
#include "avcodec.h" #include "avcodec.h"
#if LIBAVCODEC_VERSION_MAJOR < 53
#define AV_XVMC_STATE_DISPLAY_PENDING 1 /** the surface should be shown, the video driver manipulates this */
#define AV_XVMC_STATE_PREDICTION 2 /** the surface is needed for prediction, the codec manipulates this */
#define AV_XVMC_STATE_OSD_SOURCE 4 /** the surface is needed for subpicture rendering */
#endif
#define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct #define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct
the number is 1337 speak for the letters IDCT MCo (motion compensation) */ the number is 1337 speak for the letters IDCT MCo (motion compensation) */
@ -71,7 +66,7 @@ struct xvmc_pix_fmt {
*/ */
int allocated_data_blocks; int allocated_data_blocks;
/** Indicates that the hardware would interpret data_blocks as IDCT /** Indicate that the hardware would interpret data_blocks as IDCT
coefficients and perform IDCT on them. coefficients and perform IDCT on them.
- application - set during initialization - application - set during initialization
- libavcodec - unchanged - libavcodec - unchanged
@ -151,22 +146,6 @@ struct xvmc_pix_fmt {
of coded blocks it contains. of coded blocks it contains.
*/ */
int next_free_data_block_num; int next_free_data_block_num;
/** extensions may be placed here */
#if LIBAVCODEC_VERSION_MAJOR < 53
//@{
/** State flags used to work around limitations in the MPlayer video system.
0 - Surface is not used.
1 - Surface is still held in application to be displayed or is
still visible.
2 - Surface is still held in libavcodec buffer for prediction.
*/
int state;
/** pointer to the surface where the subpicture is rendered */
void* p_osd_target_surface_render;
//}@
#endif
}; };
#endif /* AVCODEC_XVMC_H */ #endif /* AVCODEC_XVMC_H */

View File

@ -20,10 +20,11 @@
#define AVDEVICE_AVDEVICE_H #define AVDEVICE_AVDEVICE_H
#include "libavutil/avutil.h" #include "libavutil/avutil.h"
#include "libavformat/avformat.h"
#define LIBAVDEVICE_VERSION_MAJOR 52 #define LIBAVDEVICE_VERSION_MAJOR 53
#define LIBAVDEVICE_VERSION_MINOR 2 #define LIBAVDEVICE_VERSION_MINOR 1
#define LIBAVDEVICE_VERSION_MICRO 0 #define LIBAVDEVICE_VERSION_MICRO 1
#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \ #define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \
LIBAVDEVICE_VERSION_MINOR, \ LIBAVDEVICE_VERSION_MINOR, \
@ -33,18 +34,22 @@
LIBAVDEVICE_VERSION_MICRO) LIBAVDEVICE_VERSION_MICRO)
#define LIBAVDEVICE_BUILD LIBAVDEVICE_VERSION_INT #define LIBAVDEVICE_BUILD LIBAVDEVICE_VERSION_INT
#ifndef FF_API_V4L
#define FF_API_V4L (LIBAVDEVICE_VERSION_MAJOR < 54)
#endif
/** /**
* Returns the LIBAVDEVICE_VERSION_INT constant. * Return the LIBAVDEVICE_VERSION_INT constant.
*/ */
unsigned avdevice_version(void); unsigned avdevice_version(void);
/** /**
* Returns the libavdevice build-time configuration. * Return the libavdevice build-time configuration.
*/ */
const char *avdevice_configuration(void); const char *avdevice_configuration(void);
/** /**
* Returns the libavdevice license. * Return the libavdevice license.
*/ */
const char *avdevice_license(void); const char *avdevice_license(void);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,81 @@
/*
* Version macros.
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVFORMAT_VERSION_H
#define AVFORMAT_VERSION_H
#include "libavutil/avutil.h"
#define LIBAVFORMAT_VERSION_MAJOR 53
#define LIBAVFORMAT_VERSION_MINOR 4
#define LIBAVFORMAT_VERSION_MICRO 0
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
LIBAVFORMAT_VERSION_MICRO)
#define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
LIBAVFORMAT_VERSION_MICRO)
#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT
#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION)
/**
* Those FF_API_* defines are not part of public API.
* They may change, break or disappear at any time.
*/
#ifndef FF_API_OLD_METADATA2
#define FF_API_OLD_METADATA2 (LIBAVFORMAT_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_READ_SEEK
#define FF_API_READ_SEEK (LIBAVFORMAT_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_OLD_AVIO
#define FF_API_OLD_AVIO (LIBAVFORMAT_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_DUMP_FORMAT
#define FF_API_DUMP_FORMAT (LIBAVFORMAT_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_PARSE_DATE
#define FF_API_PARSE_DATE (LIBAVFORMAT_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_FIND_INFO_TAG
#define FF_API_FIND_INFO_TAG (LIBAVFORMAT_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_PKT_DUMP
#define FF_API_PKT_DUMP (LIBAVFORMAT_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_GUESS_IMG2_CODEC
#define FF_API_GUESS_IMG2_CODEC (LIBAVFORMAT_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_SDP_CREATE
#define FF_API_SDP_CREATE (LIBAVFORMAT_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_ALLOC_OUTPUT_CONTEXT
#define FF_API_ALLOC_OUTPUT_CONTEXT (LIBAVFORMAT_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_FORMAT_PARAMETERS
#define FF_API_FORMAT_PARAMETERS (LIBAVFORMAT_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_FLAG_RTP_HINT
#define FF_API_FLAG_RTP_HINT (LIBAVFORMAT_VERSION_MAJOR < 54)
#endif
#endif /* AVFORMAT_VERSION_H */

View File

@ -21,9 +21,21 @@
#ifndef AVUTIL_ADLER32_H #ifndef AVUTIL_ADLER32_H
#define AVUTIL_ADLER32_H #define AVUTIL_ADLER32_H
#include <msc_stdint.h> #include <stdint.h>
#include "attributes.h" #include "attributes.h"
/**
* Calculate the Adler32 checksum of a buffer.
*
* Passing the return value to a subsequent av_adler32_update() call
* allows the checksum of multiple buffers to be calculated as though
* they were concatenated.
*
* @param adler initial checksum value
* @param buf pointer to input buffer
* @param len size of input buffer
* @return updated checksum
*/
unsigned long av_adler32_update(unsigned long adler, const uint8_t *buf, unsigned long av_adler32_update(unsigned long adler, const uint8_t *buf,
unsigned int len) av_pure; unsigned int len) av_pure;

View File

@ -0,0 +1,47 @@
/*
* copyright (c) 2007 Michael Niedermayer <michaelni@gmx.at>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_AES_H
#define AVUTIL_AES_H
#include <stdint.h>
extern const int av_aes_size;
struct AVAES;
/**
* Initialize an AVAES context.
* @param key_bits 128, 192 or 256
* @param decrypt 0 for encryption, 1 for decryption
*/
int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt);
/**
* Encrypt or decrypt a buffer using a previously initialized context.
* @param count number of 16 byte blocks
* @param dst destination array, can be equal to src
* @param src source array, can be equal to dst
* @param iv initialization vector for CBC mode, if NULL then ECB will be used
* @param decrypt 0 for encryption, 1 for decryption
*/
void av_aes_crypt(struct AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt);
#endif /* AVUTIL_AES_H */

View File

@ -65,7 +65,7 @@
#endif #endif
#ifndef av_cold #ifndef av_cold
#if (!defined(__ICC) || __ICC > 1110) && AV_GCC_VERSION_AT_LEAST(4,3) #if AV_GCC_VERSION_AT_LEAST(4,3)
# define av_cold __attribute__((cold)) # define av_cold __attribute__((cold))
#else #else
# define av_cold # define av_cold
@ -73,7 +73,7 @@
#endif #endif
#ifndef av_flatten #ifndef av_flatten
#if (!defined(__ICC) || __ICC > 1110) && AV_GCC_VERSION_AT_LEAST(4,1) #if AV_GCC_VERSION_AT_LEAST(4,1)
# define av_flatten __attribute__((flatten)) # define av_flatten __attribute__((flatten))
#else #else
# define av_flatten # define av_flatten
@ -96,8 +96,29 @@
#endif #endif
#endif #endif
/**
* Mark a variable as used and prevent the compiler from optimizing it
* away. This is useful for variables accessed only from inline
* assembler without the compiler being aware.
*/
#ifndef av_used
#if AV_GCC_VERSION_AT_LEAST(3,1)
# define av_used __attribute__((used))
#else
# define av_used
#endif
#endif
#ifndef av_alias
#if AV_GCC_VERSION_AT_LEAST(3,3)
# define av_alias __attribute__((may_alias))
#else
# define av_alias
#endif
#endif
#ifndef av_uninit #ifndef av_uninit
#if defined(__GNUC__) && !defined(__ICC) #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
# define av_uninit(x) x=x # define av_uninit(x) x=x
#else #else
# define av_uninit(x) x # define av_uninit(x) x

View File

@ -0,0 +1,95 @@
/*
* Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
* Copyright (c) 2008 Peter Ross
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_AUDIOCONVERT_H
#define AVUTIL_AUDIOCONVERT_H
#include <stdint.h>
/**
* @file
* audio conversion routines
*/
/* Audio channel masks */
#define AV_CH_FRONT_LEFT 0x00000001
#define AV_CH_FRONT_RIGHT 0x00000002
#define AV_CH_FRONT_CENTER 0x00000004
#define AV_CH_LOW_FREQUENCY 0x00000008
#define AV_CH_BACK_LEFT 0x00000010
#define AV_CH_BACK_RIGHT 0x00000020
#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040
#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080
#define AV_CH_BACK_CENTER 0x00000100
#define AV_CH_SIDE_LEFT 0x00000200
#define AV_CH_SIDE_RIGHT 0x00000400
#define AV_CH_TOP_CENTER 0x00000800
#define AV_CH_TOP_FRONT_LEFT 0x00001000
#define AV_CH_TOP_FRONT_CENTER 0x00002000
#define AV_CH_TOP_FRONT_RIGHT 0x00004000
#define AV_CH_TOP_BACK_LEFT 0x00008000
#define AV_CH_TOP_BACK_CENTER 0x00010000
#define AV_CH_TOP_BACK_RIGHT 0x00020000
#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix.
#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT.
/** Channel mask value used for AVCodecContext.request_channel_layout
to indicate that the user requests the channel order of the decoder output
to be the native codec channel order. */
#define AV_CH_LAYOUT_NATIVE 0x8000000000000000LL
/* Audio channel convenience macros */
#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER)
#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)
#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER)
#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER)
#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER)
#define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
#define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
#define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY)
#define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
#define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY)
#define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT)
/**
* Return a channel layout id that matches name, 0 if no match.
*/
int64_t av_get_channel_layout(const char *name);
/**
* Return a description of a channel layout.
* If nb_channels is <= 0, it is guessed from the channel_layout.
*
* @param buf put here the string containing the channel layout
* @param buf_size size in bytes of the buffer
*/
void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, int64_t channel_layout);
/**
* Return the number of channels in the channel layout.
*/
int av_get_channel_layout_nb_channels(int64_t channel_layout);
#endif /* AVUTIL_AUDIOCONVERT_H */

View File

@ -0,0 +1,66 @@
/*
* copyright (c) 2010 Michael Niedermayer <michaelni@gmx.at>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* simple assert() macros that are a bit more flexible than ISO C assert().
* @author Michael Niedermayer <michaelni@gmx.at>
*/
#ifndef AVUTIL_AVASSERT_H
#define AVUTIL_AVASSERT_H
#include <stdlib.h>
#include "avutil.h"
#include "log.h"
/**
* assert() equivalent, that is always enabled.
*/
#define av_assert0(cond) do { \
if (!(cond)) { \
av_log(NULL, AV_LOG_FATAL, "Assertion %s failed at %s:%d\n", \
AV_STRINGIFY(cond), __FILE__, __LINE__); \
abort(); \
} \
} while (0)
/**
* assert() equivalent, that does not lie in speed critical code.
* These asserts() thus can be enabled without fearing speedloss.
*/
#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0
#define av_assert1(cond) av_assert0(cond)
#else
#define av_assert1(cond) ((void)0)
#endif
/**
* assert() equivalent, that does lie in speed critical code.
*/
#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1
#define av_assert2(cond) av_assert0(cond)
#else
#define av_assert2(cond) ((void)0)
#endif
#endif /* AVUTIL_AVASSERT_H */

View File

@ -2,4 +2,5 @@
#ifndef AVUTIL_AVCONFIG_H #ifndef AVUTIL_AVCONFIG_H
#define AVUTIL_AVCONFIG_H #define AVUTIL_AVCONFIG_H
#define AV_HAVE_BIGENDIAN 0 #define AV_HAVE_BIGENDIAN 0
#define AV_HAVE_FAST_UNALIGNED 1
#endif /* AVUTIL_AVCONFIG_H */ #endif /* AVUTIL_AVCONFIG_H */

View File

@ -114,4 +114,20 @@ size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...);
*/ */
char *av_d2str(double d); char *av_d2str(double d);
/**
* Unescape the given string until a non escaped terminating char,
* and return the token corresponding to the unescaped string.
*
* The normal \ and ' escaping is supported. Leading and trailing
* whitespaces are removed, unless they are escaped with '\' or are
* enclosed between ''.
*
* @param buf the buffer to parse, buf will be updated to point to the
* terminating char
* @param term a 0-terminated list of terminating chars
* @return the malloced unescaped string, which must be av_freed by
* the user, NULL in case of allocation failure
*/
char *av_get_token(const char **buf, const char *term);
#endif /* AVUTIL_AVSTRING_H */ #endif /* AVUTIL_AVSTRING_H */

View File

@ -39,8 +39,8 @@
#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c #define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c
#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
#define LIBAVUTIL_VERSION_MAJOR 50 #define LIBAVUTIL_VERSION_MAJOR 51
#define LIBAVUTIL_VERSION_MINOR 15 #define LIBAVUTIL_VERSION_MINOR 9
#define LIBAVUTIL_VERSION_MICRO 1 #define LIBAVUTIL_VERSION_MICRO 1
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
@ -54,17 +54,31 @@
#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) #define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION)
/** /**
* Returns the LIBAVUTIL_VERSION_INT constant. * Those FF_API_* defines are not part of public API.
* They may change, break or disappear at any time.
*/
#ifndef FF_API_OLD_EVAL_NAMES
#define FF_API_OLD_EVAL_NAMES (LIBAVUTIL_VERSION_MAJOR < 52)
#endif
#ifndef FF_API_GET_BITS_PER_SAMPLE_FMT
#define FF_API_GET_BITS_PER_SAMPLE_FMT (LIBAVUTIL_VERSION_MAJOR < 52)
#endif
#ifndef FF_API_FIND_OPT
#define FF_API_FIND_OPT (LIBAVUTIL_VERSION_MAJOR < 52)
#endif
/**
* Return the LIBAVUTIL_VERSION_INT constant.
*/ */
unsigned avutil_version(void); unsigned avutil_version(void);
/** /**
* Returns the libavutil build-time configuration. * Return the libavutil build-time configuration.
*/ */
const char *avutil_configuration(void); const char *avutil_configuration(void);
/** /**
* Returns the libavutil license. * Return the libavutil license.
*/ */
const char *avutil_license(void); const char *avutil_license(void);
@ -78,6 +92,37 @@ enum AVMediaType {
AVMEDIA_TYPE_NB AVMEDIA_TYPE_NB
}; };
#define FF_LAMBDA_SHIFT 7
#define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT)
#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
#define FF_LAMBDA_MAX (256*128-1)
#define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
#define AV_NOPTS_VALUE INT64_C(0x8000000000000000)
#define AV_TIME_BASE 1000000
#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}
enum AVPictureType {
AV_PICTURE_TYPE_NONE = 0, ///< Undefined
AV_PICTURE_TYPE_I, ///< Intra
AV_PICTURE_TYPE_P, ///< Predicted
AV_PICTURE_TYPE_B, ///< Bi-dir predicted
AV_PICTURE_TYPE_S, ///< S(GMC)-VOP MPEG4
AV_PICTURE_TYPE_SI, ///< Switching Intra
AV_PICTURE_TYPE_SP, ///< Switching Predicted
AV_PICTURE_TYPE_BI, ///< BI type
};
/**
* Return a single letter to describe the given picture type
* pict_type.
*
* @param[in] pict_type the picture type @return a single character
* representing the picture type, '?' if pict_type is unknown
*/
char av_get_picture_type_char(enum AVPictureType pict_type);
#include "common.h" #include "common.h"
#include "error.h" #include "error.h"
#include "mathematics.h" #include "mathematics.h"

View File

@ -21,29 +21,34 @@
#ifndef AVUTIL_BASE64_H #ifndef AVUTIL_BASE64_H
#define AVUTIL_BASE64_H #define AVUTIL_BASE64_H
#include <msc_stdint.h> #include <stdint.h>
/** /**
* Decodes the base64-encoded string in in and puts the decoded * Decode a base64-encoded string.
* data in out.
* *
* @param out_size size in bytes of the out buffer, it should be at * @param out buffer for decoded data
* least 3/4 of the length of in * @param in null-terminated input string
* @return the number of bytes written, or a negative value in case of * @param out_size size in bytes of the out buffer, must be at
* error * least 3/4 of the length of in
* @return number of bytes written, or a negative value in case of
* invalid input
*/ */
int av_base64_decode(uint8_t *out, const char *in, int out_size); int av_base64_decode(uint8_t *out, const char *in, int out_size);
/** /**
* Encodes in base64 the data in in and puts the resulting string * Encode data to base64 and null-terminate.
* in out.
* *
* @param out_size size in bytes of the out string, it should be at * @param out buffer for encoded data
* least ((in_size + 2) / 3) * 4 + 1 * @param out_size size in bytes of the output buffer, must be at
* @param in_size size in bytes of the in buffer * least AV_BASE64_SIZE(in_size)
* @return the string containing the encoded data, or NULL in case of * @param in_size size in bytes of the 'in' buffer
* error * @return 'out' or NULL in case of error
*/ */
char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size); char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size);
/**
* Calculate the output size needed to base64-encode x bytes.
*/
#define AV_BASE64_SIZE(x) (((x)+2) / 3 * 4 + 1)
#endif /* AVUTIL_BASE64_H */ #endif /* AVUTIL_BASE64_H */

View File

@ -0,0 +1,124 @@
/*
* copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* byte swapping routines
*/
#ifndef AVUTIL_BSWAP_H
#define AVUTIL_BSWAP_H
#include <stdint.h>
#include "libavutil/avconfig.h"
#include "attributes.h"
#ifdef HAVE_AV_CONFIG_H
#include "config.h"
#if ARCH_ARM
# include "arm/bswap.h"
#elif ARCH_AVR32
# include "avr32/bswap.h"
#elif ARCH_BFIN
# include "bfin/bswap.h"
#elif ARCH_SH4
# include "sh4/bswap.h"
#elif ARCH_X86
# include "x86/bswap.h"
#endif
#endif /* HAVE_AV_CONFIG_H */
#define AV_BSWAP16C(x) (((x) << 8 & 0xff00) | ((x) >> 8 & 0x00ff))
#define AV_BSWAP32C(x) (AV_BSWAP16C(x) << 16 | AV_BSWAP16C((x) >> 16))
#define AV_BSWAP64C(x) (AV_BSWAP32C(x) << 32 | AV_BSWAP32C((x) >> 32))
#define AV_BSWAPC(s, x) AV_BSWAP##s##C(x)
#ifndef av_bswap16
static av_always_inline av_const uint16_t av_bswap16(uint16_t x)
{
x= (x>>8) | (x<<8);
return x;
}
#endif
#ifndef av_bswap32
static av_always_inline av_const uint32_t av_bswap32(uint32_t x)
{
x= ((x<<8)&0xFF00FF00) | ((x>>8)&0x00FF00FF);
x= (x>>16) | (x<<16);
return x;
}
#endif
#ifndef av_bswap64
static inline uint64_t av_const av_bswap64(uint64_t x)
{
#if 0
x= ((x<< 8)&0xFF00FF00FF00FF00ULL) | ((x>> 8)&0x00FF00FF00FF00FFULL);
x= ((x<<16)&0xFFFF0000FFFF0000ULL) | ((x>>16)&0x0000FFFF0000FFFFULL);
return (x>>32) | (x<<32);
#else
union {
uint64_t ll;
uint32_t l[2];
} w, r;
w.ll = x;
r.l[0] = av_bswap32 (w.l[1]);
r.l[1] = av_bswap32 (w.l[0]);
return r.ll;
#endif
}
#endif
// be2ne ... big-endian to native-endian
// le2ne ... little-endian to native-endian
#if AV_HAVE_BIGENDIAN
#define av_be2ne16(x) (x)
#define av_be2ne32(x) (x)
#define av_be2ne64(x) (x)
#define av_le2ne16(x) av_bswap16(x)
#define av_le2ne32(x) av_bswap32(x)
#define av_le2ne64(x) av_bswap64(x)
#define AV_BE2NEC(s, x) (x)
#define AV_LE2NEC(s, x) AV_BSWAPC(s, x)
#else
#define av_be2ne16(x) av_bswap16(x)
#define av_be2ne32(x) av_bswap32(x)
#define av_be2ne64(x) av_bswap64(x)
#define av_le2ne16(x) (x)
#define av_le2ne32(x) (x)
#define av_le2ne64(x) (x)
#define AV_BE2NEC(s, x) AV_BSWAPC(s, x)
#define AV_LE2NEC(s, x) (x)
#endif
#define AV_BE2NE16C(x) AV_BE2NEC(16, x)
#define AV_BE2NE32C(x) AV_BE2NEC(32, x)
#define AV_BE2NE64C(x) AV_BE2NEC(64, x)
#define AV_LE2NE16C(x) AV_LE2NEC(16, x)
#define AV_LE2NE32C(x) AV_LE2NEC(32, x)
#define AV_LE2NE64C(x) AV_LE2NEC(64, x)
#endif /* AVUTIL_BSWAP_H */

View File

@ -28,22 +28,27 @@
#include <ctype.h> #include <ctype.h>
#include <errno.h> #include <errno.h>
#ifdef _MSC_VER
#include <msc_inttypes.h>
#else
#include <inttypes.h> #include <inttypes.h>
#endif
#include <limits.h> #include <limits.h>
#include <math.h> #include <math.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "attributes.h" #include "attributes.h"
#include "libavutil/avconfig.h"
#if AV_HAVE_BIGENDIAN
# define AV_NE(be, le) (be)
#else
# define AV_NE(be, le) (le)
#endif
//rounded division & shift //rounded division & shift
#define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b))
/* assume b>0 */ /* assume b>0 */
#define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) #define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b))
#define FFUDIV(a,b) (((a)>0 ?(a):(a)-(b)+1) / (b))
#define FFUMOD(a,b) ((a)-(b)*FFUDIV(a,b))
#define FFABS(a) ((a) >= 0 ? (a) : (-(a))) #define FFABS(a) ((a) >= 0 ? (a) : (-(a)))
#define FFSIGN(a) ((a) > 0 ? 1 : -1) #define FFSIGN(a) ((a) > 0 ? 1 : -1)
@ -61,7 +66,7 @@ extern const uint8_t ff_log2_tab[256];
extern const uint8_t av_reverse[256]; extern const uint8_t av_reverse[256];
static inline av_const int av_log2_c(unsigned int v) static av_always_inline av_const int av_log2_c(unsigned int v)
{ {
int n = 0; int n = 0;
if (v & 0xffff0000) { if (v & 0xffff0000) {
@ -77,7 +82,7 @@ static inline av_const int av_log2_c(unsigned int v)
return n; return n;
} }
static inline av_const int av_log2_16bit_c(unsigned int v) static av_always_inline av_const int av_log2_16bit_c(unsigned int v)
{ {
int n = 0; int n = 0;
if (v & 0xff00) { if (v & 0xff00) {
@ -94,21 +99,17 @@ static inline av_const int av_log2_16bit_c(unsigned int v)
# include "intmath.h" # include "intmath.h"
#endif #endif
#ifndef av_log2 /* Pull in unguarded fallback defines at the end of this file. */
# define av_log2 av_log2_c #include "common.h"
#endif
#ifndef av_log2_16bit
# define av_log2_16bit av_log2_16bit_c
#endif
/** /**
* Clips a signed integer value into the amin-amax range. * Clip a signed integer value into the amin-amax range.
* @param a value to clip * @param a value to clip
* @param amin minimum value of the clip range * @param amin minimum value of the clip range
* @param amax maximum value of the clip range * @param amax maximum value of the clip range
* @return clipped value * @return clipped value
*/ */
static inline av_const int av_clip(int a, int amin, int amax) static av_always_inline av_const int av_clip_c(int a, int amin, int amax)
{ {
if (a < amin) return amin; if (a < amin) return amin;
else if (a > amax) return amax; else if (a > amax) return amax;
@ -116,87 +117,122 @@ static inline av_const int av_clip(int a, int amin, int amax)
} }
/** /**
* Clips a signed integer value into the 0-255 range. * Clip a signed integer value into the 0-255 range.
* @param a value to clip * @param a value to clip
* @return clipped value * @return clipped value
*/ */
static inline av_const uint8_t av_clip_uint8(int a) static av_always_inline av_const uint8_t av_clip_uint8_c(int a)
{ {
if (a&(~0xFF)) return (-a)>>31; if (a&(~0xFF)) return (-a)>>31;
else return a; else return a;
} }
/** /**
* Clips a signed integer value into the 0-65535 range. * Clip a signed integer value into the -128,127 range.
* @param a value to clip * @param a value to clip
* @return clipped value * @return clipped value
*/ */
static inline av_const uint16_t av_clip_uint16(int a) static av_always_inline av_const int8_t av_clip_int8_c(int a)
{
if ((a+0x80) & ~0xFF) return (a>>31) ^ 0x7F;
else return a;
}
/**
* Clip a signed integer value into the 0-65535 range.
* @param a value to clip
* @return clipped value
*/
static av_always_inline av_const uint16_t av_clip_uint16_c(int a)
{ {
if (a&(~0xFFFF)) return (-a)>>31; if (a&(~0xFFFF)) return (-a)>>31;
else return a; else return a;
} }
/** /**
* Clips a signed integer value into the -32768,32767 range. * Clip a signed integer value into the -32768,32767 range.
* @param a value to clip * @param a value to clip
* @return clipped value * @return clipped value
*/ */
static inline av_const int16_t av_clip_int16(int a) static av_always_inline av_const int16_t av_clip_int16_c(int a)
{ {
if ((a+0x8000) & ~0xFFFF) return (a>>31) ^ 0x7FFF; if ((a+0x8000) & ~0xFFFF) return (a>>31) ^ 0x7FFF;
else return a; else return a;
} }
/** /**
* Clips a signed 64-bit integer value into the -2147483648,2147483647 range. * Clip a signed 64-bit integer value into the -2147483648,2147483647 range.
* @param a value to clip * @param a value to clip
* @return clipped value * @return clipped value
*/ */
static inline av_const int32_t av_clipl_int32(int64_t a) static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a)
{ {
if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (a>>63) ^ 0x7FFFFFFF; if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (a>>63) ^ 0x7FFFFFFF;
else return a; else return a;
} }
/** /**
* Clips a float value into the amin-amax range. * Clip a signed integer to an unsigned power of two range.
* @param a value to clip
* @param p bit position to clip at
* @return clipped value
*/
static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p)
{
if (a & ~((1<<p) - 1)) return -a >> 31 & ((1<<p) - 1);
else return a;
}
/**
* Clip a float value into the amin-amax range.
* @param a value to clip * @param a value to clip
* @param amin minimum value of the clip range * @param amin minimum value of the clip range
* @param amax maximum value of the clip range * @param amax maximum value of the clip range
* @return clipped value * @return clipped value
*/ */
static inline av_const float av_clipf(float a, float amin, float amax) static av_always_inline av_const float av_clipf_c(float a, float amin, float amax)
{ {
if (a < amin) return amin; if (a < amin) return amin;
else if (a > amax) return amax; else if (a > amax) return amax;
else return a; else return a;
} }
/** Computes ceil(log2(x)). /** Compute ceil(log2(x)).
* @param x value used to compute ceil(log2(x)) * @param x value used to compute ceil(log2(x))
* @return computed ceiling of log2(x) * @return computed ceiling of log2(x)
*/ */
static inline av_const int av_ceil_log2(int x) static av_always_inline av_const int av_ceil_log2_c(int x)
{ {
return av_log2((x - 1) << 1); return av_log2((x - 1) << 1);
} }
#define MKTAG(a,b,c,d) (a | (b << 8) | (c << 16) | (d << 24)) /**
#define MKBETAG(a,b,c,d) (d | (c << 8) | (b << 16) | (a << 24)) * Count number of bits set to one in x
* @param x value to count bits of
* @return the number of bits set to one in x
*/
static av_always_inline av_const int av_popcount_c(uint32_t x)
{
x -= (x >> 1) & 0x55555555;
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
x = (x + (x >> 4)) & 0x0F0F0F0F;
x += x >> 8;
return (x + (x >> 16)) & 0x3F;
}
/*! #define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
* \def GET_UTF8(val, GET_BYTE, ERROR) #define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((a) << 24))
* Converts a UTF-8 character (up to 4 bytes long) to its 32-bit UCS-4 encoded form
* \param val is the output and should be of type uint32_t. It holds the converted /**
* UCS-4 character and should be a left value. * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
* \param GET_BYTE gets UTF-8 encoded bytes from any proper source. It can be *
* a function or a statement whose return value or evaluated value is of type * @param val Output value, must be an lvalue of type uint32_t.
* uint8_t. It will be executed up to 4 times for values in the valid UTF-8 range, * @param GET_BYTE Expression reading one byte from the input.
* and up to 7 times in the general case. * Evaluated up to 7 times (4 for the currently
* \param ERROR action that should be taken when an invalid UTF-8 byte is returned * assigned Unicode range). With a memory buffer
* from GET_BYTE. It should be a statement that jumps out of the macro, * input, this could be *ptr++.
* like exit(), goto, return, break, or continue. * @param ERROR Expression to be evaluated on invalid input,
* typically a goto statement.
*/ */
#define GET_UTF8(val, GET_BYTE, ERROR)\ #define GET_UTF8(val, GET_BYTE, ERROR)\
val= GET_BYTE;\ val= GET_BYTE;\
@ -213,17 +249,14 @@ static inline av_const int av_ceil_log2(int x)
}\ }\
} }
/*! /**
* \def GET_UTF16(val, GET_16BIT, ERROR) * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form.
* Converts a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form *
* \param val is the output and should be of type uint32_t. It holds the converted * @param val Output value, must be an lvalue of type uint32_t.
* UCS-4 character and should be a left value. * @param GET_16BIT Expression returning two bytes of UTF-16 data converted
* \param GET_16BIT gets two bytes of UTF-16 encoded data converted to native endianness. * to native byte order. Evaluated one or two times.
* It can be a function or a statement whose return value or evaluated value is of type * @param ERROR Expression to be evaluated on invalid input,
* uint16_t. It will be executed up to 2 times. * typically a goto statement.
* \param ERROR action that should be taken when an invalid UTF-16 surrogate is
* returned from GET_BYTE. It should be a statement that jumps out of the macro,
* like exit(), goto, return, break, or continue.
*/ */
#define GET_UTF16(val, GET_16BIT, ERROR)\ #define GET_UTF16(val, GET_16BIT, ERROR)\
val = GET_16BIT;\ val = GET_16BIT;\
@ -239,7 +272,7 @@ static inline av_const int av_ceil_log2(int x)
/*! /*!
* \def PUT_UTF8(val, tmp, PUT_BYTE) * \def PUT_UTF8(val, tmp, PUT_BYTE)
* Converts a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long). * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long).
* \param val is an input-only argument and should be of type uint32_t. It holds * \param val is an input-only argument and should be of type uint32_t. It holds
* a UCS-4 encoded Unicode character that is to be converted to UTF-8. If * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If
* val is given as a function it is executed only once. * val is given as a function it is executed only once.
@ -275,7 +308,7 @@ static inline av_const int av_ceil_log2(int x)
/*! /*!
* \def PUT_UTF16(val, tmp, PUT_16BIT) * \def PUT_UTF16(val, tmp, PUT_16BIT)
* Converts a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes). * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes).
* \param val is an input-only argument and should be of type uint32_t. It holds * \param val is an input-only argument and should be of type uint32_t. It holds
* a UCS-4 encoded Unicode character that is to be converted to UTF-16. If * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If
* val is given as a function it is executed only once. * val is given as a function it is executed only once.
@ -310,3 +343,45 @@ static inline av_const int av_ceil_log2(int x)
#endif /* HAVE_AV_CONFIG_H */ #endif /* HAVE_AV_CONFIG_H */
#endif /* AVUTIL_COMMON_H */ #endif /* AVUTIL_COMMON_H */
/*
* The following definitions are outside the multiple inclusion guard
* to ensure they are immediately available in intmath.h.
*/
#ifndef av_log2
# define av_log2 av_log2_c
#endif
#ifndef av_log2_16bit
# define av_log2_16bit av_log2_16bit_c
#endif
#ifndef av_ceil_log2
# define av_ceil_log2 av_ceil_log2_c
#endif
#ifndef av_clip
# define av_clip av_clip_c
#endif
#ifndef av_clip_uint8
# define av_clip_uint8 av_clip_uint8_c
#endif
#ifndef av_clip_int8
# define av_clip_int8 av_clip_int8_c
#endif
#ifndef av_clip_uint16
# define av_clip_uint16 av_clip_uint16_c
#endif
#ifndef av_clip_int16
# define av_clip_int16 av_clip_int16_c
#endif
#ifndef av_clipl_int32
# define av_clipl_int32 av_clipl_int32_c
#endif
#ifndef av_clip_uintp2
# define av_clip_uintp2 av_clip_uintp2_c
#endif
#ifndef av_clipf
# define av_clipf av_clipf_c
#endif
#ifndef av_popcount
# define av_popcount av_popcount_c
#endif

View File

@ -0,0 +1,61 @@
/*
* Copyright (c) 2000, 2001, 2002 Fabrice Bellard
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_CPU_H
#define AVUTIL_CPU_H
#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */
/* lower 16 bits - CPU features */
#define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX
#define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext
#define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW
#define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions
#define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions
#define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster
#define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt
#define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions
#define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster
#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions
#define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower
#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions
#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions
#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used
#define AV_CPU_FLAG_IWMMXT 0x0100 ///< XScale IWMMXT
#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard
/**
* Return the flags which specify extensions supported by the CPU.
*/
int av_get_cpu_flags(void);
/**
* Disables cpu detection and forces the specified flags.
*/
void av_force_cpu_flags(int flags);
/* The following CPU-specific functions shall not be called directly. */
int ff_get_cpu_flags_arm(void);
int ff_get_cpu_flags_ppc(void);
int ff_get_cpu_flags_x86(void);
#endif /* AVUTIL_CPU_H */

View File

@ -21,7 +21,7 @@
#ifndef AVUTIL_CRC_H #ifndef AVUTIL_CRC_H
#define AVUTIL_CRC_H #define AVUTIL_CRC_H
#include <msc_stdint.h> #include <stdint.h>
#include <stddef.h> #include <stddef.h>
#include "attributes.h" #include "attributes.h"

View File

@ -0,0 +1,81 @@
/*
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* Public dictionary API.
*/
#ifndef AVUTIL_DICT_H
#define AVUTIL_DICT_H
#define AV_DICT_MATCH_CASE 1
#define AV_DICT_IGNORE_SUFFIX 2
#define AV_DICT_DONT_STRDUP_KEY 4
#define AV_DICT_DONT_STRDUP_VAL 8
#define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries.
#define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no
delimiter is added, the strings are simply concatenated. */
typedef struct {
char *key;
char *value;
} AVDictionaryEntry;
typedef struct AVDictionary AVDictionary;
/**
* Get a dictionary entry with matching key.
*
* @param prev Set to the previous matching element to find the next.
* If set to NULL the first matching element is returned.
* @param flags Allows case as well as suffix-insensitive comparisons.
* @return Found entry or NULL, changing key or value leads to undefined behavior.
*/
AVDictionaryEntry *
av_dict_get(AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags);
/**
* Set the given entry in *pm, overwriting an existing entry.
*
* @param pm pointer to a pointer to a dictionary struct. If *pm is NULL
* a dictionary struct is allocated and put in *pm.
* @param key entry key to add to *pm (will be av_strduped depending on flags)
* @param value entry value to add to *pm (will be av_strduped depending on flags).
* Passing a NULL value will cause an existing tag to be deleted.
* @return >= 0 on success otherwise an error code <0
*/
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags);
/**
* Copy entries from one AVDictionary struct into another.
* @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL,
* this function will allocate a struct for you and put it in *dst
* @param src pointer to source AVDictionary struct
* @param flags flags to use when setting entries in *dst
* @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag
*/
void av_dict_copy(AVDictionary **dst, AVDictionary *src, int flags);
/**
* Free all the memory allocated for an AVDictionary struct.
*/
void av_dict_free(AVDictionary **m);
#endif // AVUTIL_DICT_H

View File

@ -37,32 +37,28 @@
#define AVUNERROR(e) (e) #define AVUNERROR(e) (e)
#endif #endif
#if LIBAVUTIL_VERSION_MAJOR < 51 #define AVERROR_BSF_NOT_FOUND (-MKTAG(0xF8,'B','S','F')) ///< Bitstream filter not found
#define AVERROR_INVALIDDATA AVERROR(EINVAL) ///< Invalid data found when processing input #define AVERROR_DECODER_NOT_FOUND (-MKTAG(0xF8,'D','E','C')) ///< Decoder not found
#define AVERROR_IO AVERROR(EIO) ///< I/O error #define AVERROR_DEMUXER_NOT_FOUND (-MKTAG(0xF8,'D','E','M')) ///< Demuxer not found
#define AVERROR_NOENT AVERROR(ENOENT) ///< No such file or directory #define AVERROR_ENCODER_NOT_FOUND (-MKTAG(0xF8,'E','N','C')) ///< Encoder not found
#define AVERROR_NOFMT AVERROR(EILSEQ) ///< Unknown format #define AVERROR_EOF (-MKTAG( 'E','O','F',' ')) ///< End of file
#define AVERROR_NOMEM AVERROR(ENOMEM) ///< Not enough memory #define AVERROR_EXIT (-MKTAG( 'E','X','I','T')) ///< Immediate exit was requested; the called function should not be restarted
#define AVERROR_NOTSUPP AVERROR(ENOSYS) ///< Operation not supported #define AVERROR_FILTER_NOT_FOUND (-MKTAG(0xF8,'F','I','L')) ///< Filter not found
#define AVERROR_NUMEXPECTED AVERROR(EDOM) ///< Number syntax expected in filename #define AVERROR_INVALIDDATA (-MKTAG( 'I','N','D','A')) ///< Invalid data found when processing input
#define AVERROR_UNKNOWN AVERROR(EINVAL) ///< Unknown error #define AVERROR_MUXER_NOT_FOUND (-MKTAG(0xF8,'M','U','X')) ///< Muxer not found
#endif #define AVERROR_OPTION_NOT_FOUND (-MKTAG(0xF8,'O','P','T')) ///< Option not found
#define AVERROR_PATCHWELCOME (-MKTAG( 'P','A','W','E')) ///< Not yet implemented in FFmpeg, patches welcome
#define AVERROR_EOF AVERROR(EPIPE) ///< End of file #define AVERROR_PROTOCOL_NOT_FOUND (-MKTAG(0xF8,'P','R','O')) ///< Protocol not found
#define AVERROR_STREAM_NOT_FOUND (-MKTAG(0xF8,'S','T','R')) ///< Stream not found
#define AVERROR_PATCHWELCOME (-MKTAG('P','A','W','E')) ///< Not yet implemented in FFmpeg, patches welcome
#if LIBAVUTIL_VERSION_MAJOR > 50
#define AVERROR_INVALIDDATA (-MKTAG('I','N','D','A')) ///< Invalid data found when processing input
#define AVERROR_NUMEXPECTED (-MKTAG('N','U','E','X')) ///< Number syntax expected in filename
#endif
/** /**
* Puts a description of the AVERROR code errnum in errbuf. * Put a description of the AVERROR code errnum in errbuf.
* In case of failure the global variable errno is set to indicate the * In case of failure the global variable errno is set to indicate the
* error. Even in case of failure av_strerror() will print a generic * error. Even in case of failure av_strerror() will print a generic
* error message indicating the errnum provided to errbuf. * error message indicating the errnum provided to errbuf.
* *
* @param errnum error code to describe
* @param errbuf buffer to which description is written
* @param errbuf_size the size in bytes of errbuf * @param errbuf_size the size in bytes of errbuf
* @return 0 on success, a negative value if a description for errnum * @return 0 on success, a negative value if a description for errnum
* cannot be found * cannot be found

View File

@ -0,0 +1,146 @@
/*
* Copyright (c) 2002 Michael Niedermayer <michaelni@gmx.at>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* simple arithmetic expression evaluator
*/
#ifndef AVUTIL_EVAL_H
#define AVUTIL_EVAL_H
#include "avutil.h"
typedef struct AVExpr AVExpr;
/**
* Parse and evaluate an expression.
* Note, this is significantly slower than av_expr_eval().
*
* @param res a pointer to a double where is put the result value of
* the expression, or NAN in case of error
* @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)"
* @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0}
* @param const_values a zero terminated array of values for the identifiers from const_names
* @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers
* @param funcs1 NULL terminated array of function pointers for functions which take 1 argument
* @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers
* @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments
* @param opaque a pointer which will be passed to all functions from funcs1 and funcs2
* @param log_ctx parent logging context
* @return 0 in case of success, a negative value corresponding to an
* AVERROR code otherwise
*/
int av_expr_parse_and_eval(double *res, const char *s,
const char * const *const_names, const double *const_values,
const char * const *func1_names, double (* const *funcs1)(void *, double),
const char * const *func2_names, double (* const *funcs2)(void *, double, double),
void *opaque, int log_offset, void *log_ctx);
/**
* Parse an expression.
*
* @param expr a pointer where is put an AVExpr containing the parsed
* value in case of successfull parsing, or NULL otherwise.
* The pointed to AVExpr must be freed with av_expr_free() by the user
* when it is not needed anymore.
* @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)"
* @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0}
* @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers
* @param funcs1 NULL terminated array of function pointers for functions which take 1 argument
* @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers
* @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments
* @param log_ctx parent logging context
* @return 0 in case of success, a negative value corresponding to an
* AVERROR code otherwise
*/
int av_expr_parse(AVExpr **expr, const char *s,
const char * const *const_names,
const char * const *func1_names, double (* const *funcs1)(void *, double),
const char * const *func2_names, double (* const *funcs2)(void *, double, double),
int log_offset, void *log_ctx);
/**
* Evaluate a previously parsed expression.
*
* @param const_values a zero terminated array of values for the identifiers from av_expr_parse() const_names
* @param opaque a pointer which will be passed to all functions from funcs1 and funcs2
* @return the value of the expression
*/
double av_expr_eval(AVExpr *e, const double *const_values, void *opaque);
/**
* Free a parsed expression previously created with av_expr_parse().
*/
void av_expr_free(AVExpr *e);
#if FF_API_OLD_EVAL_NAMES
/**
* @deprecated Deprecated in favor of av_expr_parse_and_eval().
*/
attribute_deprecated
int av_parse_and_eval_expr(double *res, const char *s,
const char * const *const_names, const double *const_values,
const char * const *func1_names, double (* const *funcs1)(void *, double),
const char * const *func2_names, double (* const *funcs2)(void *, double, double),
void *opaque, int log_offset, void *log_ctx);
/**
* @deprecated Deprecated in favor of av_expr_parse().
*/
attribute_deprecated
int av_parse_expr(AVExpr **expr, const char *s,
const char * const *const_names,
const char * const *func1_names, double (* const *funcs1)(void *, double),
const char * const *func2_names, double (* const *funcs2)(void *, double, double),
int log_offset, void *log_ctx);
/**
* @deprecated Deprecated in favor of av_expr_eval().
*/
attribute_deprecated
double av_eval_expr(AVExpr *e, const double *const_values, void *opaque);
/**
* @deprecated Deprecated in favor of av_expr_free().
*/
attribute_deprecated
void av_free_expr(AVExpr *e);
#endif /* FF_API_OLD_EVAL_NAMES */
/**
* Parse the string in numstr and return its value as a double. If
* the string is empty, contains only whitespaces, or does not contain
* an initial substring that has the expected syntax for a
* floating-point number, no conversion is performed. In this case,
* returns a value of zero and the value returned in tail is the value
* of numstr.
*
* @param numstr a string representing a number, may contain one of
* the International System number postfixes, for example 'K', 'M',
* 'G'. If 'i' is appended after the postfix, powers of 2 are used
* instead of powers of 10. The 'B' postfix multiplies the value for
* 8, and can be appended after another postfix or used alone. This
* allows using for example 'KB', 'MiB', 'G' and 'B' as postfix.
* @param tail if non-NULL puts here the pointer to the char next
* after the last parsed character
*/
double av_strtod(const char *numstr, char **tail);
#endif /* AVUTIL_EVAL_H */

View File

@ -24,7 +24,7 @@
#ifndef AVUTIL_FIFO_H #ifndef AVUTIL_FIFO_H
#define AVUTIL_FIFO_H #define AVUTIL_FIFO_H
#include <msc_stdint.h> #include <stdint.h>
typedef struct AVFifoBuffer { typedef struct AVFifoBuffer {
uint8_t *buffer; uint8_t *buffer;
@ -33,26 +33,26 @@ typedef struct AVFifoBuffer {
} AVFifoBuffer; } AVFifoBuffer;
/** /**
* Initializes an AVFifoBuffer. * Initialize an AVFifoBuffer.
* @param size of FIFO * @param size of FIFO
* @return AVFifoBuffer or NULL in case of memory allocation failure * @return AVFifoBuffer or NULL in case of memory allocation failure
*/ */
AVFifoBuffer *av_fifo_alloc(unsigned int size); AVFifoBuffer *av_fifo_alloc(unsigned int size);
/** /**
* Frees an AVFifoBuffer. * Free an AVFifoBuffer.
* @param *f AVFifoBuffer to free * @param *f AVFifoBuffer to free
*/ */
void av_fifo_free(AVFifoBuffer *f); void av_fifo_free(AVFifoBuffer *f);
/** /**
* Resets the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied. * Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied.
* @param *f AVFifoBuffer to reset * @param *f AVFifoBuffer to reset
*/ */
void av_fifo_reset(AVFifoBuffer *f); void av_fifo_reset(AVFifoBuffer *f);
/** /**
* Returns the amount of data in bytes in the AVFifoBuffer, that is the * Return the amount of data in bytes in the AVFifoBuffer, that is the
* amount of data you can read from it. * amount of data you can read from it.
* @param *f AVFifoBuffer to read from * @param *f AVFifoBuffer to read from
* @return size * @return size
@ -60,7 +60,7 @@ void av_fifo_reset(AVFifoBuffer *f);
int av_fifo_size(AVFifoBuffer *f); int av_fifo_size(AVFifoBuffer *f);
/** /**
* Returns the amount of space in bytes in the AVFifoBuffer, that is the * Return the amount of space in bytes in the AVFifoBuffer, that is the
* amount of data you can write into it. * amount of data you can write into it.
* @param *f AVFifoBuffer to write into * @param *f AVFifoBuffer to write into
* @return size * @return size
@ -68,7 +68,7 @@ int av_fifo_size(AVFifoBuffer *f);
int av_fifo_space(AVFifoBuffer *f); int av_fifo_space(AVFifoBuffer *f);
/** /**
* Feeds data from an AVFifoBuffer to a user-supplied callback. * Feed data from an AVFifoBuffer to a user-supplied callback.
* @param *f AVFifoBuffer to read from * @param *f AVFifoBuffer to read from
* @param buf_size number of bytes to read * @param buf_size number of bytes to read
* @param *func generic read function * @param *func generic read function
@ -77,7 +77,7 @@ int av_fifo_space(AVFifoBuffer *f);
int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int));
/** /**
* Feeds data from a user-supplied callback to an AVFifoBuffer. * Feed data from a user-supplied callback to an AVFifoBuffer.
* @param *f AVFifoBuffer to write to * @param *f AVFifoBuffer to write to
* @param *src data source; non-const since it may be used as a * @param *src data source; non-const since it may be used as a
* modifiable context by the function defined in func * modifiable context by the function defined in func
@ -92,7 +92,7 @@ int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)
int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int)); int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int));
/** /**
* Resizes an AVFifoBuffer. * Resize an AVFifoBuffer.
* @param *f AVFifoBuffer to resize * @param *f AVFifoBuffer to resize
* @param size new AVFifoBuffer size in bytes * @param size new AVFifoBuffer size in bytes
* @return <0 for failure, >=0 otherwise * @return <0 for failure, >=0 otherwise
@ -100,7 +100,7 @@ int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void
int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size);
/** /**
* Reads and discards the specified amount of data from an AVFifoBuffer. * Read and discard the specified amount of data from an AVFifoBuffer.
* @param *f AVFifoBuffer to read from * @param *f AVFifoBuffer to read from
* @param size amount of data to read in bytes * @param size amount of data to read in bytes
*/ */

View File

@ -0,0 +1,52 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_FILE_H
#define AVUTIL_FILE_H
#include "avutil.h"
/**
* @file
* Misc file utilities.
*/
/**
* Read the file with name filename, and put its content in a newly
* allocated buffer or map it with mmap() when available.
* In case of success set *bufptr to the read or mmapped buffer, and
* *size to the size in bytes of the buffer in *bufptr.
* The returned buffer must be released with av_file_unmap().
*
* @param log_offset loglevel offset used for logging
* @param log_ctx context used for logging
* @return a non negative number in case of success, a negative value
* corresponding to an AVERROR error code in case of failure
*/
int av_file_map(const char *filename, uint8_t **bufptr, size_t *size,
int log_offset, void *log_ctx);
/**
* Unmap or free the buffer bufptr created by av_file_map().
*
* @param size size in bytes of bufptr, must be the same as returned
* by av_file_map()
*/
void av_file_unmap(uint8_t *bufptr, size_t size);
#endif /* AVUTIL_FILE_H */

View File

@ -0,0 +1,130 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_IMGUTILS_H
#define AVUTIL_IMGUTILS_H
/**
* @file
* misc image utilities
*/
#include "avutil.h"
#include "pixdesc.h"
/**
* Compute the max pixel step for each plane of an image with a
* format described by pixdesc.
*
* The pixel step is the distance in bytes between the first byte of
* the group of bytes which describe a pixel component and the first
* byte of the successive group in the same plane for the same
* component.
*
* @param max_pixsteps an array which is filled with the max pixel step
* for each plane. Since a plane may contain different pixel
* components, the computed max_pixsteps[plane] is relative to the
* component in the plane with the max pixel step.
* @param max_pixstep_comps an array which is filled with the component
* for each plane which has the max pixel step. May be NULL.
*/
void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4],
const AVPixFmtDescriptor *pixdesc);
/**
* Compute the size of an image line with format pix_fmt and width
* width for the plane plane.
*
* @return the computed size in bytes
*/
int av_image_get_linesize(enum PixelFormat pix_fmt, int width, int plane);
/**
* Fill plane linesizes for an image with pixel format pix_fmt and
* width width.
*
* @param linesizes array to be filled with the linesize for each plane
* @return >= 0 in case of success, a negative error code otherwise
*/
int av_image_fill_linesizes(int linesizes[4], enum PixelFormat pix_fmt, int width);
/**
* Fill plane data pointers for an image with pixel format pix_fmt and
* height height.
*
* @param data pointers array to be filled with the pointer for each image plane
* @param ptr the pointer to a buffer which will contain the image
* @param linesizes the array containing the linesize for each
* plane, should be filled by av_image_fill_linesizes()
* @return the size in bytes required for the image buffer, a negative
* error code in case of failure
*/
int av_image_fill_pointers(uint8_t *data[4], enum PixelFormat pix_fmt, int height,
uint8_t *ptr, const int linesizes[4]);
/**
* Allocate an image with size w and h and pixel format pix_fmt, and
* fill pointers and linesizes accordingly.
* The allocated image buffer has to be freed by using
* av_freep(&pointers[0]).
*
* @param align the value to use for buffer size alignment
* @return the size in bytes required for the image buffer, a negative
* error code in case of failure
*/
int av_image_alloc(uint8_t *pointers[4], int linesizes[4],
int w, int h, enum PixelFormat pix_fmt, int align);
/**
* Copy image plane from src to dst.
* That is, copy "height" number of lines of "bytewidth" bytes each.
* The first byte of each successive line is separated by *_linesize
* bytes.
*
* @param dst_linesize linesize for the image plane in dst
* @param src_linesize linesize for the image plane in src
*/
void av_image_copy_plane(uint8_t *dst, int dst_linesize,
const uint8_t *src, int src_linesize,
int bytewidth, int height);
/**
* Copy image in src_data to dst_data.
*
* @param dst_linesize linesizes for the image in dst_data
* @param src_linesize linesizes for the image in src_data
*/
void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4],
const uint8_t *src_data[4], const int src_linesizes[4],
enum PixelFormat pix_fmt, int width, int height);
/**
* Check if the given dimension of an image is valid, meaning that all
* bytes of the image can be addressed with a signed int.
*
* @param w the width of the picture
* @param h the height of the picture
* @param log_offset the offset to sum to the log level for logging with log_ctx
* @param log_ctx the parent logging context, it may be NULL
* @return >= 0 if valid, a negative error code otherwise
*/
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx);
int ff_set_systematic_pal2(uint32_t pal[256], enum PixelFormat pix_fmt);
#endif /* AVUTIL_IMGUTILS_H */

View File

@ -21,7 +21,7 @@
#ifndef AVUTIL_INTFLOAT_READWRITE_H #ifndef AVUTIL_INTFLOAT_READWRITE_H
#define AVUTIL_INTFLOAT_READWRITE_H #define AVUTIL_INTFLOAT_READWRITE_H
#include <msc_stdint.h> #include <stdint.h>
#include "attributes.h" #include "attributes.h"
/* IEEE 80 bits extended float */ /* IEEE 80 bits extended float */

View File

@ -0,0 +1,522 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_INTREADWRITE_H
#define AVUTIL_INTREADWRITE_H
#include <stdint.h>
#include "libavutil/avconfig.h"
#include "attributes.h"
#include "bswap.h"
typedef union {
uint64_t u64;
uint32_t u32[2];
uint16_t u16[4];
uint8_t u8 [8];
double f64;
float f32[2];
} av_alias av_alias64;
typedef union {
uint32_t u32;
uint16_t u16[2];
uint8_t u8 [4];
float f32;
} av_alias av_alias32;
typedef union {
uint16_t u16;
uint8_t u8 [2];
} av_alias av_alias16;
/*
* Arch-specific headers can provide any combination of
* AV_[RW][BLN](16|24|32|64) and AV_(COPY|SWAP|ZERO)(64|128) macros.
* Preprocessor symbols must be defined, even if these are implemented
* as inline functions.
*/
#ifdef HAVE_AV_CONFIG_H
#include "config.h"
#if ARCH_ARM
# include "arm/intreadwrite.h"
#elif ARCH_AVR32
# include "avr32/intreadwrite.h"
#elif ARCH_MIPS
# include "mips/intreadwrite.h"
#elif ARCH_PPC
# include "ppc/intreadwrite.h"
#elif ARCH_TOMI
# include "tomi/intreadwrite.h"
#elif ARCH_X86
# include "x86/intreadwrite.h"
#endif
#endif /* HAVE_AV_CONFIG_H */
/*
* Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers.
*/
#if AV_HAVE_BIGENDIAN
# if defined(AV_RN16) && !defined(AV_RB16)
# define AV_RB16(p) AV_RN16(p)
# elif !defined(AV_RN16) && defined(AV_RB16)
# define AV_RN16(p) AV_RB16(p)
# endif
# if defined(AV_WN16) && !defined(AV_WB16)
# define AV_WB16(p, v) AV_WN16(p, v)
# elif !defined(AV_WN16) && defined(AV_WB16)
# define AV_WN16(p, v) AV_WB16(p, v)
# endif
# if defined(AV_RN24) && !defined(AV_RB24)
# define AV_RB24(p) AV_RN24(p)
# elif !defined(AV_RN24) && defined(AV_RB24)
# define AV_RN24(p) AV_RB24(p)
# endif
# if defined(AV_WN24) && !defined(AV_WB24)
# define AV_WB24(p, v) AV_WN24(p, v)
# elif !defined(AV_WN24) && defined(AV_WB24)
# define AV_WN24(p, v) AV_WB24(p, v)
# endif
# if defined(AV_RN32) && !defined(AV_RB32)
# define AV_RB32(p) AV_RN32(p)
# elif !defined(AV_RN32) && defined(AV_RB32)
# define AV_RN32(p) AV_RB32(p)
# endif
# if defined(AV_WN32) && !defined(AV_WB32)
# define AV_WB32(p, v) AV_WN32(p, v)
# elif !defined(AV_WN32) && defined(AV_WB32)
# define AV_WN32(p, v) AV_WB32(p, v)
# endif
# if defined(AV_RN64) && !defined(AV_RB64)
# define AV_RB64(p) AV_RN64(p)
# elif !defined(AV_RN64) && defined(AV_RB64)
# define AV_RN64(p) AV_RB64(p)
# endif
# if defined(AV_WN64) && !defined(AV_WB64)
# define AV_WB64(p, v) AV_WN64(p, v)
# elif !defined(AV_WN64) && defined(AV_WB64)
# define AV_WN64(p, v) AV_WB64(p, v)
# endif
#else /* AV_HAVE_BIGENDIAN */
# if defined(AV_RN16) && !defined(AV_RL16)
# define AV_RL16(p) AV_RN16(p)
# elif !defined(AV_RN16) && defined(AV_RL16)
# define AV_RN16(p) AV_RL16(p)
# endif
# if defined(AV_WN16) && !defined(AV_WL16)
# define AV_WL16(p, v) AV_WN16(p, v)
# elif !defined(AV_WN16) && defined(AV_WL16)
# define AV_WN16(p, v) AV_WL16(p, v)
# endif
# if defined(AV_RN24) && !defined(AV_RL24)
# define AV_RL24(p) AV_RN24(p)
# elif !defined(AV_RN24) && defined(AV_RL24)
# define AV_RN24(p) AV_RL24(p)
# endif
# if defined(AV_WN24) && !defined(AV_WL24)
# define AV_WL24(p, v) AV_WN24(p, v)
# elif !defined(AV_WN24) && defined(AV_WL24)
# define AV_WN24(p, v) AV_WL24(p, v)
# endif
# if defined(AV_RN32) && !defined(AV_RL32)
# define AV_RL32(p) AV_RN32(p)
# elif !defined(AV_RN32) && defined(AV_RL32)
# define AV_RN32(p) AV_RL32(p)
# endif
# if defined(AV_WN32) && !defined(AV_WL32)
# define AV_WL32(p, v) AV_WN32(p, v)
# elif !defined(AV_WN32) && defined(AV_WL32)
# define AV_WN32(p, v) AV_WL32(p, v)
# endif
# if defined(AV_RN64) && !defined(AV_RL64)
# define AV_RL64(p) AV_RN64(p)
# elif !defined(AV_RN64) && defined(AV_RL64)
# define AV_RN64(p) AV_RL64(p)
# endif
# if defined(AV_WN64) && !defined(AV_WL64)
# define AV_WL64(p, v) AV_WN64(p, v)
# elif !defined(AV_WN64) && defined(AV_WL64)
# define AV_WN64(p, v) AV_WL64(p, v)
# endif
#endif /* !AV_HAVE_BIGENDIAN */
/*
* Define AV_[RW]N helper macros to simplify definitions not provided
* by per-arch headers.
*/
#if defined(__GNUC__) && !defined(__TI_COMPILER_VERSION__)
union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias;
union unaligned_32 { uint32_t l; } __attribute__((packed)) av_alias;
union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias;
# define AV_RN(s, p) (((const union unaligned_##s *) (p))->l)
# define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v))
#elif defined(__DECC)
# define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p)))
# define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v))
#elif AV_HAVE_FAST_UNALIGNED
# define AV_RN(s, p) (((const av_alias##s*)(p))->u##s)
# define AV_WN(s, p, v) (((av_alias##s*)(p))->u##s = (v))
#else
#ifndef AV_RB16
# define AV_RB16(x) \
((((const uint8_t*)(x))[0] << 8) | \
((const uint8_t*)(x))[1])
#endif
#ifndef AV_WB16
# define AV_WB16(p, d) do { \
((uint8_t*)(p))[1] = (d); \
((uint8_t*)(p))[0] = (d)>>8; \
} while(0)
#endif
#ifndef AV_RL16
# define AV_RL16(x) \
((((const uint8_t*)(x))[1] << 8) | \
((const uint8_t*)(x))[0])
#endif
#ifndef AV_WL16
# define AV_WL16(p, d) do { \
((uint8_t*)(p))[0] = (d); \
((uint8_t*)(p))[1] = (d)>>8; \
} while(0)
#endif
#ifndef AV_RB32
# define AV_RB32(x) \
(((uint32_t)((const uint8_t*)(x))[0] << 24) | \
(((const uint8_t*)(x))[1] << 16) | \
(((const uint8_t*)(x))[2] << 8) | \
((const uint8_t*)(x))[3])
#endif
#ifndef AV_WB32
# define AV_WB32(p, d) do { \
((uint8_t*)(p))[3] = (d); \
((uint8_t*)(p))[2] = (d)>>8; \
((uint8_t*)(p))[1] = (d)>>16; \
((uint8_t*)(p))[0] = (d)>>24; \
} while(0)
#endif
#ifndef AV_RL32
# define AV_RL32(x) \
(((uint32_t)((const uint8_t*)(x))[3] << 24) | \
(((const uint8_t*)(x))[2] << 16) | \
(((const uint8_t*)(x))[1] << 8) | \
((const uint8_t*)(x))[0])
#endif
#ifndef AV_WL32
# define AV_WL32(p, d) do { \
((uint8_t*)(p))[0] = (d); \
((uint8_t*)(p))[1] = (d)>>8; \
((uint8_t*)(p))[2] = (d)>>16; \
((uint8_t*)(p))[3] = (d)>>24; \
} while(0)
#endif
#ifndef AV_RB64
# define AV_RB64(x) \
(((uint64_t)((const uint8_t*)(x))[0] << 56) | \
((uint64_t)((const uint8_t*)(x))[1] << 48) | \
((uint64_t)((const uint8_t*)(x))[2] << 40) | \
((uint64_t)((const uint8_t*)(x))[3] << 32) | \
((uint64_t)((const uint8_t*)(x))[4] << 24) | \
((uint64_t)((const uint8_t*)(x))[5] << 16) | \
((uint64_t)((const uint8_t*)(x))[6] << 8) | \
(uint64_t)((const uint8_t*)(x))[7])
#endif
#ifndef AV_WB64
# define AV_WB64(p, d) do { \
((uint8_t*)(p))[7] = (d); \
((uint8_t*)(p))[6] = (d)>>8; \
((uint8_t*)(p))[5] = (d)>>16; \
((uint8_t*)(p))[4] = (d)>>24; \
((uint8_t*)(p))[3] = (d)>>32; \
((uint8_t*)(p))[2] = (d)>>40; \
((uint8_t*)(p))[1] = (d)>>48; \
((uint8_t*)(p))[0] = (d)>>56; \
} while(0)
#endif
#ifndef AV_RL64
# define AV_RL64(x) \
(((uint64_t)((const uint8_t*)(x))[7] << 56) | \
((uint64_t)((const uint8_t*)(x))[6] << 48) | \
((uint64_t)((const uint8_t*)(x))[5] << 40) | \
((uint64_t)((const uint8_t*)(x))[4] << 32) | \
((uint64_t)((const uint8_t*)(x))[3] << 24) | \
((uint64_t)((const uint8_t*)(x))[2] << 16) | \
((uint64_t)((const uint8_t*)(x))[1] << 8) | \
(uint64_t)((const uint8_t*)(x))[0])
#endif
#ifndef AV_WL64
# define AV_WL64(p, d) do { \
((uint8_t*)(p))[0] = (d); \
((uint8_t*)(p))[1] = (d)>>8; \
((uint8_t*)(p))[2] = (d)>>16; \
((uint8_t*)(p))[3] = (d)>>24; \
((uint8_t*)(p))[4] = (d)>>32; \
((uint8_t*)(p))[5] = (d)>>40; \
((uint8_t*)(p))[6] = (d)>>48; \
((uint8_t*)(p))[7] = (d)>>56; \
} while(0)
#endif
#if AV_HAVE_BIGENDIAN
# define AV_RN(s, p) AV_RB##s(p)
# define AV_WN(s, p, v) AV_WB##s(p, v)
#else
# define AV_RN(s, p) AV_RL##s(p)
# define AV_WN(s, p, v) AV_WL##s(p, v)
#endif
#endif /* HAVE_FAST_UNALIGNED */
#ifndef AV_RN16
# define AV_RN16(p) AV_RN(16, p)
#endif
#ifndef AV_RN32
# define AV_RN32(p) AV_RN(32, p)
#endif
#ifndef AV_RN64
# define AV_RN64(p) AV_RN(64, p)
#endif
#ifndef AV_WN16
# define AV_WN16(p, v) AV_WN(16, p, v)
#endif
#ifndef AV_WN32
# define AV_WN32(p, v) AV_WN(32, p, v)
#endif
#ifndef AV_WN64
# define AV_WN64(p, v) AV_WN(64, p, v)
#endif
#if AV_HAVE_BIGENDIAN
# define AV_RB(s, p) AV_RN##s(p)
# define AV_WB(s, p, v) AV_WN##s(p, v)
# define AV_RL(s, p) av_bswap##s(AV_RN##s(p))
# define AV_WL(s, p, v) AV_WN##s(p, av_bswap##s(v))
#else
# define AV_RB(s, p) av_bswap##s(AV_RN##s(p))
# define AV_WB(s, p, v) AV_WN##s(p, av_bswap##s(v))
# define AV_RL(s, p) AV_RN##s(p)
# define AV_WL(s, p, v) AV_WN##s(p, v)
#endif
#define AV_RB8(x) (((const uint8_t*)(x))[0])
#define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0)
#define AV_RL8(x) AV_RB8(x)
#define AV_WL8(p, d) AV_WB8(p, d)
#ifndef AV_RB16
# define AV_RB16(p) AV_RB(16, p)
#endif
#ifndef AV_WB16
# define AV_WB16(p, v) AV_WB(16, p, v)
#endif
#ifndef AV_RL16
# define AV_RL16(p) AV_RL(16, p)
#endif
#ifndef AV_WL16
# define AV_WL16(p, v) AV_WL(16, p, v)
#endif
#ifndef AV_RB32
# define AV_RB32(p) AV_RB(32, p)
#endif
#ifndef AV_WB32
# define AV_WB32(p, v) AV_WB(32, p, v)
#endif
#ifndef AV_RL32
# define AV_RL32(p) AV_RL(32, p)
#endif
#ifndef AV_WL32
# define AV_WL32(p, v) AV_WL(32, p, v)
#endif
#ifndef AV_RB64
# define AV_RB64(p) AV_RB(64, p)
#endif
#ifndef AV_WB64
# define AV_WB64(p, v) AV_WB(64, p, v)
#endif
#ifndef AV_RL64
# define AV_RL64(p) AV_RL(64, p)
#endif
#ifndef AV_WL64
# define AV_WL64(p, v) AV_WL(64, p, v)
#endif
#ifndef AV_RB24
# define AV_RB24(x) \
((((const uint8_t*)(x))[0] << 16) | \
(((const uint8_t*)(x))[1] << 8) | \
((const uint8_t*)(x))[2])
#endif
#ifndef AV_WB24
# define AV_WB24(p, d) do { \
((uint8_t*)(p))[2] = (d); \
((uint8_t*)(p))[1] = (d)>>8; \
((uint8_t*)(p))[0] = (d)>>16; \
} while(0)
#endif
#ifndef AV_RL24
# define AV_RL24(x) \
((((const uint8_t*)(x))[2] << 16) | \
(((const uint8_t*)(x))[1] << 8) | \
((const uint8_t*)(x))[0])
#endif
#ifndef AV_WL24
# define AV_WL24(p, d) do { \
((uint8_t*)(p))[0] = (d); \
((uint8_t*)(p))[1] = (d)>>8; \
((uint8_t*)(p))[2] = (d)>>16; \
} while(0)
#endif
/*
* The AV_[RW]NA macros access naturally aligned data
* in a type-safe way.
*/
#define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s)
#define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v))
#ifndef AV_RN16A
# define AV_RN16A(p) AV_RNA(16, p)
#endif
#ifndef AV_RN32A
# define AV_RN32A(p) AV_RNA(32, p)
#endif
#ifndef AV_RN64A
# define AV_RN64A(p) AV_RNA(64, p)
#endif
#ifndef AV_WN16A
# define AV_WN16A(p, v) AV_WNA(16, p, v)
#endif
#ifndef AV_WN32A
# define AV_WN32A(p, v) AV_WNA(32, p, v)
#endif
#ifndef AV_WN64A
# define AV_WN64A(p, v) AV_WNA(64, p, v)
#endif
/* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be
* naturally aligned. They may be implemented using MMX,
* so emms_c() must be called before using any float code
* afterwards.
*/
#define AV_COPY(n, d, s) \
(((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n)
#ifndef AV_COPY16
# define AV_COPY16(d, s) AV_COPY(16, d, s)
#endif
#ifndef AV_COPY32
# define AV_COPY32(d, s) AV_COPY(32, d, s)
#endif
#ifndef AV_COPY64
# define AV_COPY64(d, s) AV_COPY(64, d, s)
#endif
#ifndef AV_COPY128
# define AV_COPY128(d, s) \
do { \
AV_COPY64(d, s); \
AV_COPY64((char*)(d)+8, (char*)(s)+8); \
} while(0)
#endif
#define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*)(b))
#ifndef AV_SWAP64
# define AV_SWAP64(a, b) AV_SWAP(64, a, b)
#endif
#define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0)
#ifndef AV_ZERO16
# define AV_ZERO16(d) AV_ZERO(16, d)
#endif
#ifndef AV_ZERO32
# define AV_ZERO32(d) AV_ZERO(32, d)
#endif
#ifndef AV_ZERO64
# define AV_ZERO64(d) AV_ZERO(64, d)
#endif
#ifndef AV_ZERO128
# define AV_ZERO128(d) \
do { \
AV_ZERO64(d); \
AV_ZERO64((char*)(d)+8); \
} while(0)
#endif
#endif /* AVUTIL_INTREADWRITE_H */

View File

@ -0,0 +1,62 @@
/*
* Lagged Fibonacci PRNG
* Copyright (c) 2008 Michael Niedermayer
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_LFG_H
#define AVUTIL_LFG_H
typedef struct {
unsigned int state[64];
int index;
} AVLFG;
void av_lfg_init(AVLFG *c, unsigned int seed);
/**
* Get the next random unsigned 32-bit number using an ALFG.
*
* Please also consider a simple LCG like state= state*1664525+1013904223,
* it may be good enough and faster for your specific use case.
*/
static inline unsigned int av_lfg_get(AVLFG *c){
c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
return c->state[c->index++ & 63];
}
/**
* Get the next random unsigned 32-bit number using a MLFG.
*
* Please also consider av_lfg_get() above, it is faster.
*/
static inline unsigned int av_mlfg_get(AVLFG *c){
unsigned int a= c->state[(c->index-55) & 63];
unsigned int b= c->state[(c->index-24) & 63];
return c->state[c->index++ & 63] = 2*a*b+a+b;
}
/**
* Get the next two numbers generated by a Box-Muller Gaussian
* generator using the random numbers issued by lfg.
*
* @param out array where the two generated numbers are placed
*/
void av_bmg_get(AVLFG *lfg, double out[2]);
#endif /* AVUTIL_LFG_H */

View File

@ -25,7 +25,7 @@
#include "avutil.h" #include "avutil.h"
/** /**
* Describes the class of an AVClass context structure. That is an * Describe the class of an AVClass context structure. That is an
* arbitrary struct of which the first field is a pointer to an * arbitrary struct of which the first field is a pointer to an
* AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.).
*/ */
@ -56,6 +56,27 @@ typedef struct {
*/ */
int version; int version;
/**
* Offset in the structure where log_level_offset is stored.
* 0 means there is no such variable
*/
int log_level_offset_offset;
/**
* Offset in the structure where a pointer to the parent context for loging is stored.
* for example a decoder that uses eval.c could pass its AVCodecContext to eval as such
* parent context. And a av_log() implementation could then display the parent context
* can be NULL of course
*/
int parent_log_context_offset;
/**
* A function for extended searching, e.g. in possible
* children objects.
*/
const struct AVOption* (*opt_find)(void *obj, const char *name, const char *unit,
int opt_flags, int search_flags);
} AVClass; } AVClass;
/* av_log API */ /* av_log API */
@ -95,7 +116,7 @@ typedef struct {
#define AV_LOG_DEBUG 48 #define AV_LOG_DEBUG 48
/** /**
* Sends the specified message to the log if the level is less than or equal * Send the specified message to the log if the level is less than or equal
* to the current av_log_level. By default, all logging messages are sent to * to the current av_log_level. By default, all logging messages are sent to
* stderr. This behavior can be altered by setting a different av_vlog callback * stderr. This behavior can be altered by setting a different av_vlog callback
* function. * function.
@ -109,15 +130,38 @@ typedef struct {
* @see av_vlog * @see av_vlog
*/ */
#ifdef __GNUC__ #ifdef __GNUC__
void av_log(void*, int level, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4))); void av_log(void *avcl, int level, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
#else #else
void av_log(void*, int level, const char *fmt, ...); void av_log(void *avcl, int level, const char *fmt, ...);
#endif #endif
void av_vlog(void*, int level, const char *fmt, va_list); void av_vlog(void *avcl, int level, const char *fmt, va_list);
int av_log_get_level(void); int av_log_get_level(void);
void av_log_set_level(int); void av_log_set_level(int);
void av_log_set_callback(void (*)(void*, int, const char*, va_list)); void av_log_set_callback(void (*)(void*, int, const char*, va_list));
void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl); void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl);
const char* av_default_item_name(void* ctx);
/**
* av_dlog macros
* Useful to print debug messages that shouldn't get compiled in normally.
*/
#ifdef DEBUG
# define av_dlog(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__)
#else
# define av_dlog(pctx, ...) do { if (0) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__); } while (0)
#endif
/**
* Skip repeated messages, this requires the user app to use av_log() instead of
* (f)printf as the 2 would otherwise interfere and lead to
* "Last message repeated x times" messages below (f)printf messages with some
* bad luck.
* Also to receive the last, "last repeated" line if any, the user app must
* call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end
*/
#define AV_LOG_SKIP_REPEATED 1
void av_log_set_flags(int arg);
#endif /* AVUTIL_LOG_H */ #endif /* AVUTIL_LOG_H */

View File

@ -22,9 +22,9 @@
#ifndef AVUTIL_LZO_H #ifndef AVUTIL_LZO_H
#define AVUTIL_LZO_H #define AVUTIL_LZO_H
#include <msc_stdint.h> #include <stdint.h>
/** \defgroup errflags Error flags returned by av_lzo1x_decode /** @name Error flags returned by av_lzo1x_decode
* \{ */ * \{ */
//! end of the input buffer reached before decoding finished //! end of the input buffer reached before decoding finished
#define AV_LZO_INPUT_DEPLETED 1 #define AV_LZO_INPUT_DEPLETED 1

View File

@ -21,7 +21,7 @@
#ifndef AVUTIL_MATHEMATICS_H #ifndef AVUTIL_MATHEMATICS_H
#define AVUTIL_MATHEMATICS_H #define AVUTIL_MATHEMATICS_H
#include <msc_stdint.h> #include <stdint.h>
#include <math.h> #include <math.h>
#include "attributes.h" #include "attributes.h"
#include "rational.h" #include "rational.h"
@ -38,6 +38,9 @@
#ifndef M_LOG2_10 #ifndef M_LOG2_10
#define M_LOG2_10 3.32192809488736234787 /* log_2 10 */ #define M_LOG2_10 3.32192809488736234787 /* log_2 10 */
#endif #endif
#ifndef M_PHI
#define M_PHI 1.61803398874989484820 /* phi / golden ratio */
#endif
#ifndef M_PI #ifndef M_PI
#define M_PI 3.14159265358979323846 /* pi */ #define M_PI 3.14159265358979323846 /* pi */
#endif #endif
@ -63,36 +66,47 @@ enum AVRounding {
}; };
/** /**
* Returns the greatest common divisor of a and b. * Return the greatest common divisor of a and b.
* If both a and b are 0 or either or both are <0 then behavior is * If both a and b are 0 or either or both are <0 then behavior is
* undefined. * undefined.
*/ */
int64_t av_const av_gcd(int64_t a, int64_t b); int64_t av_const av_gcd(int64_t a, int64_t b);
/** /**
* Rescales a 64-bit integer with rounding to nearest. * Rescale a 64-bit integer with rounding to nearest.
* A simple a*b/c isn't possible as it can overflow. * A simple a*b/c isn't possible as it can overflow.
*/ */
int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const; int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const;
/** /**
* Rescales a 64-bit integer with specified rounding. * Rescale a 64-bit integer with specified rounding.
* A simple a*b/c isn't possible as it can overflow. * A simple a*b/c isn't possible as it can overflow.
*/ */
int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding) av_const; int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding) av_const;
/** /**
* Rescales a 64-bit integer by 2 rational numbers. * Rescale a 64-bit integer by 2 rational numbers.
*/ */
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const;
/** /**
* Compares 2 timestamps each in its own timebases. * Compare 2 timestamps each in its own timebases.
* The result of the function is undefined if one of the timestamps * The result of the function is undefined if one of the timestamps
* is outside the int64_t range when represented in the others timebase. * is outside the int64_t range when represented in the others timebase.
* @return -1 if ts_a is before ts_b, 1 if ts_a is after ts_b or 0 if they represent the same position * @return -1 if ts_a is before ts_b, 1 if ts_a is after ts_b or 0 if they represent the same position
*/ */
int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b); int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b);
/**
* Compare 2 integers modulo mod.
* That is we compare integers a and b for which only the least
* significant log2(mod) bits are known.
*
* @param mod must be a power of 2
* @return a negative value if a is smaller than b
* a positive value if a is greater than b
* 0 if a equals b
*/
int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod);
#endif /* AVUTIL_MATHEMATICS_H */ #endif /* AVUTIL_MATHEMATICS_H */

View File

@ -21,7 +21,7 @@
#ifndef AVUTIL_MD5_H #ifndef AVUTIL_MD5_H
#define AVUTIL_MD5_H #define AVUTIL_MD5_H
#include <msc_stdint.h> #include <stdint.h>
extern const int av_md5_size; extern const int av_md5_size;

View File

@ -27,8 +27,9 @@
#define AVUTIL_MEM_H #define AVUTIL_MEM_H
#include "attributes.h" #include "attributes.h"
#include "avutil.h"
#if defined(__ICC) || defined(__SUNPRO_C) #if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C)
#define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v
#define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v
#elif defined(__TI_COMPILER_VERSION__) #elif defined(__TI_COMPILER_VERSION__)
@ -40,7 +41,7 @@
static const t __attribute__((aligned(n))) v static const t __attribute__((aligned(n))) v
#elif defined(__GNUC__) #elif defined(__GNUC__)
#define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v
#define DECLARE_ASM_CONST(n,t,v) static const t attribute_used __attribute__ ((aligned (n))) v #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v
#elif defined(_MSC_VER) #elif defined(_MSC_VER)
#define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v
#define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v
@ -55,26 +56,26 @@
#define av_malloc_attrib #define av_malloc_attrib
#endif #endif
#if (!defined(__ICC) || __ICC > 1110) && AV_GCC_VERSION_AT_LEAST(4,3) #if AV_GCC_VERSION_AT_LEAST(4,3)
#define av_alloc_size(n) __attribute__((alloc_size(n))) #define av_alloc_size(n) __attribute__((alloc_size(n)))
#else #else
#define av_alloc_size(n) #define av_alloc_size(n)
#endif #endif
/** /**
* Allocates a block of size bytes with alignment suitable for all * Allocate a block of size bytes with alignment suitable for all
* memory accesses (including vectors if available on the CPU). * memory accesses (including vectors if available on the CPU).
* @param size Size in bytes for the memory block to be allocated. * @param size Size in bytes for the memory block to be allocated.
* @return Pointer to the allocated block, NULL if the block cannot * @return Pointer to the allocated block, NULL if the block cannot
* be allocated. * be allocated.
* @see av_mallocz() * @see av_mallocz()
*/ */
void *av_malloc(unsigned int size) av_malloc_attrib av_alloc_size(1); void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1);
/** /**
* Allocates or reallocates a block of memory. * Allocate or reallocate a block of memory.
* If ptr is NULL and size > 0, allocates a new block. If * If ptr is NULL and size > 0, allocate a new block. If
* size is zero, frees the memory block pointed to by ptr. * size is zero, free the memory block pointed to by ptr.
* @param size Size in bytes for the memory block to be allocated or * @param size Size in bytes for the memory block to be allocated or
* reallocated. * reallocated.
* @param ptr Pointer to a memory block already allocated with * @param ptr Pointer to a memory block already allocated with
@ -83,10 +84,10 @@ void *av_malloc(unsigned int size) av_malloc_attrib av_alloc_size(1);
* cannot be reallocated or the function is used to free the memory block. * cannot be reallocated or the function is used to free the memory block.
* @see av_fast_realloc() * @see av_fast_realloc()
*/ */
void *av_realloc(void *ptr, unsigned int size) av_alloc_size(2); void *av_realloc(void *ptr, size_t size) av_alloc_size(2);
/** /**
* Frees a memory block which has been allocated with av_malloc(z)() or * Free a memory block which has been allocated with av_malloc(z)() or
* av_realloc(). * av_realloc().
* @param ptr Pointer to the memory block which should be freed. * @param ptr Pointer to the memory block which should be freed.
* @note ptr = NULL is explicitly allowed. * @note ptr = NULL is explicitly allowed.
@ -96,17 +97,17 @@ void *av_realloc(void *ptr, unsigned int size) av_alloc_size(2);
void av_free(void *ptr); void av_free(void *ptr);
/** /**
* Allocates a block of size bytes with alignment suitable for all * Allocate a block of size bytes with alignment suitable for all
* memory accesses (including vectors if available on the CPU) and * memory accesses (including vectors if available on the CPU) and
* zeroes all the bytes of the block. * zero all the bytes of the block.
* @param size Size in bytes for the memory block to be allocated. * @param size Size in bytes for the memory block to be allocated.
* @return Pointer to the allocated block, NULL if it cannot be allocated. * @return Pointer to the allocated block, NULL if it cannot be allocated.
* @see av_malloc() * @see av_malloc()
*/ */
void *av_mallocz(unsigned int size) av_malloc_attrib av_alloc_size(1); void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1);
/** /**
* Duplicates the string s. * Duplicate the string s.
* @param s string to be duplicated * @param s string to be duplicated
* @return Pointer to a newly allocated string containing a * @return Pointer to a newly allocated string containing a
* copy of s or NULL if the string cannot be allocated. * copy of s or NULL if the string cannot be allocated.
@ -114,7 +115,7 @@ void *av_mallocz(unsigned int size) av_malloc_attrib av_alloc_size(1);
char *av_strdup(const char *s) av_malloc_attrib; char *av_strdup(const char *s) av_malloc_attrib;
/** /**
* Frees a memory block which has been allocated with av_malloc(z)() or * Free a memory block which has been allocated with av_malloc(z)() or
* av_realloc() and set the pointer pointing to it to NULL. * av_realloc() and set the pointer pointing to it to NULL.
* @param ptr Pointer to the pointer to the memory block which should * @param ptr Pointer to the pointer to the memory block which should
* be freed. * be freed.
@ -122,4 +123,13 @@ char *av_strdup(const char *s) av_malloc_attrib;
*/ */
void av_freep(void *ptr); void av_freep(void *ptr);
/**
* Add an element to a dynamic array.
*
* @param tab_ptr Pointer to the array.
* @param nb_ptr Pointer to the number of elements in the array.
* @param elem Element to be added.
*/
void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem);
#endif /* AVUTIL_MEM_H */ #endif /* AVUTIL_MEM_H */

243
3rdparty/include/ffmpeg_/libavutil/opt.h vendored Normal file
View File

@ -0,0 +1,243 @@
/*
* AVOptions
* copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_OPT_H
#define AVUTIL_OPT_H
/**
* @file
* AVOptions
*/
#include "rational.h"
#include "avutil.h"
#include "dict.h"
enum AVOptionType{
FF_OPT_TYPE_FLAGS,
FF_OPT_TYPE_INT,
FF_OPT_TYPE_INT64,
FF_OPT_TYPE_DOUBLE,
FF_OPT_TYPE_FLOAT,
FF_OPT_TYPE_STRING,
FF_OPT_TYPE_RATIONAL,
FF_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length
FF_OPT_TYPE_CONST=128,
};
/**
* AVOption
*/
typedef struct AVOption {
const char *name;
/**
* short English help text
* @todo What about other languages?
*/
const char *help;
/**
* The offset relative to the context structure where the option
* value is stored. It should be 0 for named constants.
*/
int offset;
enum AVOptionType type;
/**
* the default value for scalar options
*/
union {
double dbl;
const char *str;
/* TODO those are unused now */
int64_t i64;
AVRational q;
} default_val;
double min; ///< minimum valid value for the option
double max; ///< maximum valid value for the option
int flags;
#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding
#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding
#define AV_OPT_FLAG_METADATA 4 ///< some data extracted or inserted into the file like title, comment, ...
#define AV_OPT_FLAG_AUDIO_PARAM 8
#define AV_OPT_FLAG_VIDEO_PARAM 16
#define AV_OPT_FLAG_SUBTITLE_PARAM 32
//FIXME think about enc-audio, ... style flags
/**
* The logical unit to which the option belongs. Non-constant
* options and corresponding named constants share the same
* unit. May be NULL.
*/
const char *unit;
} AVOption;
#if FF_API_FIND_OPT
/**
* Look for an option in obj. Look only for the options which
* have the flags set as specified in mask and flags (that is,
* for which it is the case that opt->flags & mask == flags).
*
* @param[in] obj a pointer to a struct whose first element is a
* pointer to an AVClass
* @param[in] name the name of the option to look for
* @param[in] unit the unit of the option to look for, or any if NULL
* @return a pointer to the option found, or NULL if no option
* has been found
*
* @deprecated use av_opt_find.
*/
attribute_deprecated
const AVOption *av_find_opt(void *obj, const char *name, const char *unit, int mask, int flags);
#endif
/**
* Set the field of obj with the given name to value.
*
* @param[in] obj A struct whose first element is a pointer to an
* AVClass.
* @param[in] name the name of the field to set
* @param[in] val The value to set. If the field is not of a string
* type, then the given string is parsed.
* SI postfixes and some named scalars are supported.
* If the field is of a numeric type, it has to be a numeric or named
* scalar. Behavior with more than one scalar and +- infix operators
* is undefined.
* If the field is of a flags type, it has to be a sequence of numeric
* scalars or named flags separated by '+' or '-'. Prefixing a flag
* with '+' causes it to be set without affecting the other flags;
* similarly, '-' unsets a flag.
* @param[out] o_out if non-NULL put here a pointer to the AVOption
* found
* @param alloc when 1 then the old value will be av_freed() and the
* new av_strduped()
* when 0 then no av_free() nor av_strdup() will be used
* @return 0 if the value has been set, or an AVERROR code in case of
* error:
* AVERROR(ENOENT) if no matching option exists
* AVERROR(ERANGE) if the value is out of range
* AVERROR(EINVAL) if the value is not valid
*/
int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out);
const AVOption *av_set_double(void *obj, const char *name, double n);
const AVOption *av_set_q(void *obj, const char *name, AVRational n);
const AVOption *av_set_int(void *obj, const char *name, int64_t n);
double av_get_double(void *obj, const char *name, const AVOption **o_out);
AVRational av_get_q(void *obj, const char *name, const AVOption **o_out);
int64_t av_get_int(void *obj, const char *name, const AVOption **o_out);
const char *av_get_string(void *obj, const char *name, const AVOption **o_out, char *buf, int buf_len);
const AVOption *av_next_option(void *obj, const AVOption *last);
/**
* Show the obj options.
*
* @param req_flags requested flags for the options to show. Show only the
* options for which it is opt->flags & req_flags.
* @param rej_flags rejected flags for the options to show. Show only the
* options for which it is !(opt->flags & req_flags).
* @param av_log_obj log context to use for showing the options
*/
int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags);
void av_opt_set_defaults(void *s);
void av_opt_set_defaults2(void *s, int mask, int flags);
/**
* Parse the key/value pairs list in opts. For each key/value pair
* found, stores the value in the field in ctx that is named like the
* key. ctx must be an AVClass context, storing is done using
* AVOptions.
*
* @param opts options string to parse, may be NULL
* @param key_val_sep a 0-terminated list of characters used to
* separate key from value
* @param pairs_sep a 0-terminated list of characters used to separate
* two pairs from each other
* @return the number of successfully set key/value pairs, or a negative
* value corresponding to an AVERROR code in case of error:
* AVERROR(EINVAL) if opts cannot be parsed,
* the error code issued by av_set_string3() if a key/value pair
* cannot be set
*/
int av_set_options_string(void *ctx, const char *opts,
const char *key_val_sep, const char *pairs_sep);
/**
* Free all string and binary options in obj.
*/
void av_opt_free(void *obj);
/**
* Check whether a particular flag is set in a flags field.
*
* @param field_name the name of the flag field option
* @param flag_name the name of the flag to check
* @return non-zero if the flag is set, zero if the flag isn't set,
* isn't of the right type, or the flags field doesn't exist.
*/
int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name);
/*
* Set all the options from a given dictionary on an object.
*
* @param obj a struct whose first element is a pointer to AVClass
* @param options options to process. This dictionary will be freed and replaced
* by a new one containing all options not found in obj.
* Of course this new dictionary needs to be freed by caller
* with av_dict_free().
*
* @return 0 on success, a negative AVERROR if some option was found in obj,
* but could not be set.
*
* @see av_dict_copy()
*/
int av_opt_set_dict(void *obj, struct AVDictionary **options);
#define AV_OPT_SEARCH_CHILDREN 0x0001 /**< Search in possible children of the
given object first. */
/**
* Look for an option in an object. Consider only options which
* have all the specified flags set.
*
* @param[in] obj A pointer to a struct whose first element is a
* pointer to an AVClass.
* @param[in] name The name of the option to look for.
* @param[in] unit When searching for named constants, name of the unit
* it belongs to.
* @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG).
* @param search_flags A combination of AV_OPT_SEARCH_*.
*
* @return A pointer to the option found, or NULL if no option
* was found.
*
* @note Options found with AV_OPT_SEARCH_CHILDREN flag may not be settable
* directly with av_set_string3(). Use special calls which take an options
* AVDictionary (e.g. avformat_open_input()) to set options found with this
* flag.
*/
const AVOption *av_opt_find(void *obj, const char *name, const char *unit,
int opt_flags, int search_flags);
#endif /* AVUTIL_OPT_H */

View File

@ -0,0 +1,117 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_PARSEUTILS_H
#define AVUTIL_PARSEUTILS_H
#include "rational.h"
/**
* @file
* misc parsing utilities
*/
/**
* Parse str and put in width_ptr and height_ptr the detected values.
*
* @param[in,out] width_ptr pointer to the variable which will contain the detected
* width value
* @param[in,out] height_ptr pointer to the variable which will contain the detected
* height value
* @param[in] str the string to parse: it has to be a string in the format
* width x height or a valid video size abbreviation.
* @return >= 0 on success, a negative error code otherwise
*/
int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str);
/**
* Parse str and store the detected values in *rate.
*
* @param[in,out] rate pointer to the AVRational which will contain the detected
* frame rate
* @param[in] str the string to parse: it has to be a string in the format
* rate_num / rate_den, a float number or a valid video rate abbreviation
* @return >= 0 on success, a negative error code otherwise
*/
int av_parse_video_rate(AVRational *rate, const char *str);
/**
* Put the RGBA values that correspond to color_string in rgba_color.
*
* @param color_string a string specifying a color. It can be the name of
* a color (case insensitive match) or a [0x|#]RRGGBB[AA] sequence,
* possibly followed by "@" and a string representing the alpha
* component.
* The alpha component may be a string composed by "0x" followed by an
* hexadecimal number or a decimal number between 0.0 and 1.0, which
* represents the opacity value (0x00/0.0 means completely transparent,
* 0xff/1.0 completely opaque).
* If the alpha component is not specified then 0xff is assumed.
* The string "random" will result in a random color.
* @param slen length of the initial part of color_string containing the
* color. It can be set to -1 if color_string is a null terminated string
* containing nothing else than the color.
* @return >= 0 in case of success, a negative value in case of
* failure (for example if color_string cannot be parsed).
*/
int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen,
void *log_ctx);
/**
* Parses timestr and returns in *time a corresponding number of
* microseconds.
*
* @param timeval puts here the number of microseconds corresponding
* to the string in timestr. If the string represents a duration, it
* is the number of microseconds contained in the time interval. If
* the string is a date, is the number of microseconds since 1st of
* January, 1970 up to the time of the parsed date. If timestr cannot
* be successfully parsed, set *time to INT64_MIN.
* @param datestr a string representing a date or a duration.
* - If a date the syntax is:
* @code
* [{YYYY-MM-DD|YYYYMMDD}[T|t| ]]{{HH[:MM[:SS[.m...]]]}|{HH[MM[SS[.m...]]]}}[Z]
* now
* @endcode
* If the value is "now" it takes the current time.
* Time is local time unless Z is appended, in which case it is
* interpreted as UTC.
* If the year-month-day part is not specified it takes the current
* year-month-day.
* - If a duration the syntax is:
* @code
* [-]HH[:MM[:SS[.m...]]]
* [-]S+[.m...]
* @endcode
* @param duration flag which tells how to interpret timestr, if not
* zero timestr is interpreted as a duration, otherwise as a date
* @return 0 in case of success, a negative value corresponding to an
* AVERROR code otherwise
*/
int av_parse_time(int64_t *timeval, const char *timestr, int duration);
/**
* Attempt to find a specific tag in a URL.
*
* syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done.
* Return 1 if found.
*/
int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info);
#endif /* AVUTIL_PARSEUTILS_H */

View File

@ -23,6 +23,7 @@
#define AVUTIL_PIXDESC_H #define AVUTIL_PIXDESC_H
#include <inttypes.h> #include <inttypes.h>
#include "pixfmt.h"
typedef struct AVComponentDescriptor{ typedef struct AVComponentDescriptor{
uint16_t plane :2; ///< which of the 4 planes contains the component uint16_t plane :2; ///< which of the 4 planes contains the component
@ -93,11 +94,11 @@ typedef struct AVPixFmtDescriptor{
extern const AVPixFmtDescriptor av_pix_fmt_descriptors[]; extern const AVPixFmtDescriptor av_pix_fmt_descriptors[];
/** /**
* Reads a line from an image, and writes the values of the * Read a line from an image, and write the values of the
* pixel format component c to dst. * pixel format component c to dst.
* *
* @param data the array containing the pointers to the planes of the image * @param data the array containing the pointers to the planes of the image
* @param linesizes the array containing the linesizes of the image * @param linesize the array containing the linesizes of the image
* @param desc the pixel format descriptor for the image * @param desc the pixel format descriptor for the image
* @param x the horizontal coordinate of the first pixel to read * @param x the horizontal coordinate of the first pixel to read
* @param y the vertical coordinate of the first pixel to read * @param y the vertical coordinate of the first pixel to read
@ -108,28 +109,28 @@ extern const AVPixFmtDescriptor av_pix_fmt_descriptors[];
* component c in data[1] to dst, rather than the palette indexes in * component c in data[1] to dst, rather than the palette indexes in
* data[0]. The behavior is undefined if the format is not paletted. * data[0]. The behavior is undefined if the format is not paletted.
*/ */
void read_line(uint16_t *dst, const uint8_t *data[4], const int linesize[4], void av_read_image_line(uint16_t *dst, const uint8_t *data[4], const int linesize[4],
const AVPixFmtDescriptor *desc, int x, int y, int c, int w, int read_pal_component); const AVPixFmtDescriptor *desc, int x, int y, int c, int w, int read_pal_component);
/** /**
* Writes the values from src to the pixel format component c of an * Write the values from src to the pixel format component c of an
* image line. * image line.
* *
* @param src array containing the values to write * @param src array containing the values to write
* @param data the array containing the pointers to the planes of the * @param data the array containing the pointers to the planes of the
* image to write into. It is supposed to be zeroed. * image to write into. It is supposed to be zeroed.
* @param linesizes the array containing the linesizes of the image * @param linesize the array containing the linesizes of the image
* @param desc the pixel format descriptor for the image * @param desc the pixel format descriptor for the image
* @param x the horizontal coordinate of the first pixel to write * @param x the horizontal coordinate of the first pixel to write
* @param y the vertical coordinate of the first pixel to write * @param y the vertical coordinate of the first pixel to write
* @param w the width of the line to write, that is the number of * @param w the width of the line to write, that is the number of
* values to write to the image line * values to write to the image line
*/ */
void write_line(const uint16_t *src, uint8_t *data[4], const int linesize[4], void av_write_image_line(const uint16_t *src, uint8_t *data[4], const int linesize[4],
const AVPixFmtDescriptor *desc, int x, int y, int c, int w); const AVPixFmtDescriptor *desc, int x, int y, int c, int w);
/** /**
* Returns the pixel format corresponding to name. * Return the pixel format corresponding to name.
* *
* If there is no pixel format with name name, then looks for a * If there is no pixel format with name name, then looks for a
* pixel format with the name corresponding to the native endian * pixel format with the name corresponding to the native endian
@ -142,7 +143,27 @@ void write_line(const uint16_t *src, uint8_t *data[4], const int linesize[4],
enum PixelFormat av_get_pix_fmt(const char *name); enum PixelFormat av_get_pix_fmt(const char *name);
/** /**
* Returns the number of bits per pixel used by the pixel format * Return the short name for a pixel format, NULL in case pix_fmt is
* unknown.
*
* @see av_get_pix_fmt(), av_get_pix_fmt_string()
*/
const char *av_get_pix_fmt_name(enum PixelFormat pix_fmt);
/**
* Print in buf the string corresponding to the pixel format with
* number pix_fmt, or an header if pix_fmt is negative.
*
* @param buf the buffer where to write the string
* @param buf_size the size of buf
* @param pix_fmt the number of the pixel format to print the
* corresponding info string, or a negative value to print the
* corresponding header.
*/
char *av_get_pix_fmt_string (char *buf, int buf_size, enum PixelFormat pix_fmt);
/**
* Return the number of bits per pixel used by the pixel format
* described by pixdesc. * described by pixdesc.
* *
* The returned number of bits refers to the number of bits actually * The returned number of bits refers to the number of bits actually

View File

@ -71,9 +71,9 @@ enum PixelFormat {
PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb
PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb
PIX_FMT_PAL8, ///< 8 bit with PIX_FMT_RGB32 palette PIX_FMT_PAL8, ///< 8 bit with PIX_FMT_RGB32 palette
PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG) PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_range
PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG) PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV422P and setting color_range
PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG) PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV444P and setting color_range
PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing
PIX_FMT_XVMC_MPEG2_IDCT, PIX_FMT_XVMC_MPEG2_IDCT,
PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
@ -95,7 +95,7 @@ enum PixelFormat {
PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian
PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian
PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG) PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of PIX_FMT_YUV440P and setting color_range
PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
PIX_FMT_VDPAU_H264,///< H.264 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers PIX_FMT_VDPAU_H264,///< H.264 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
PIX_FMT_VDPAU_MPEG1,///< MPEG-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers PIX_FMT_VDPAU_MPEG1,///< MPEG-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
@ -128,14 +128,33 @@ enum PixelFormat {
PIX_FMT_VDPAU_MPEG4, ///< MPEG4 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers PIX_FMT_VDPAU_MPEG4, ///< MPEG4 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer
PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0
PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0 PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0
PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian, most significant bits to 1 PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0
PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian, most significant bits to 1 PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian, most significant bits to 1
PIX_FMT_Y400A, ///< 8bit gray, 8bit alpha PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian, most significant bits to 1
PIX_FMT_GRAY8A, ///< 8bit gray, 8bit alpha
PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian
PIX_FMT_BGR48LE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian
//the following 10 formats have the disadvantage of needing 1 format for each bit depth, thus
//If you want to support multiple bit depths, then using PIX_FMT_YUV420P16* with the bpp stored seperately
//is better
PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
}; };
#define PIX_FMT_Y400A PIX_FMT_GRAY8A
#if AV_HAVE_BIGENDIAN #if AV_HAVE_BIGENDIAN
# define PIX_FMT_NE(be, le) PIX_FMT_##be # define PIX_FMT_NE(be, le) PIX_FMT_##be
#else #else
@ -152,10 +171,16 @@ enum PixelFormat {
#define PIX_FMT_RGB565 PIX_FMT_NE(RGB565BE, RGB565LE) #define PIX_FMT_RGB565 PIX_FMT_NE(RGB565BE, RGB565LE)
#define PIX_FMT_RGB555 PIX_FMT_NE(RGB555BE, RGB555LE) #define PIX_FMT_RGB555 PIX_FMT_NE(RGB555BE, RGB555LE)
#define PIX_FMT_RGB444 PIX_FMT_NE(RGB444BE, RGB444LE) #define PIX_FMT_RGB444 PIX_FMT_NE(RGB444BE, RGB444LE)
#define PIX_FMT_BGR48 PIX_FMT_NE(BGR48BE, BGR48LE)
#define PIX_FMT_BGR565 PIX_FMT_NE(BGR565BE, BGR565LE) #define PIX_FMT_BGR565 PIX_FMT_NE(BGR565BE, BGR565LE)
#define PIX_FMT_BGR555 PIX_FMT_NE(BGR555BE, BGR555LE) #define PIX_FMT_BGR555 PIX_FMT_NE(BGR555BE, BGR555LE)
#define PIX_FMT_BGR444 PIX_FMT_NE(BGR444BE, BGR444LE) #define PIX_FMT_BGR444 PIX_FMT_NE(BGR444BE, BGR444LE)
#define PIX_FMT_YUV420P9 PIX_FMT_NE(YUV420P9BE , YUV420P9LE)
#define PIX_FMT_YUV444P9 PIX_FMT_NE(YUV444P9BE , YUV444P9LE)
#define PIX_FMT_YUV420P10 PIX_FMT_NE(YUV420P10BE, YUV420P10LE)
#define PIX_FMT_YUV422P10 PIX_FMT_NE(YUV422P10BE, YUV422P10LE)
#define PIX_FMT_YUV444P10 PIX_FMT_NE(YUV444P10BE, YUV444P10LE)
#define PIX_FMT_YUV420P16 PIX_FMT_NE(YUV420P16BE, YUV420P16LE) #define PIX_FMT_YUV420P16 PIX_FMT_NE(YUV420P16BE, YUV420P16LE)
#define PIX_FMT_YUV422P16 PIX_FMT_NE(YUV422P16BE, YUV422P16LE) #define PIX_FMT_YUV422P16 PIX_FMT_NE(YUV422P16BE, YUV422P16LE)
#define PIX_FMT_YUV444P16 PIX_FMT_NE(YUV444P16BE, YUV444P16LE) #define PIX_FMT_YUV444P16 PIX_FMT_NE(YUV444P16BE, YUV444P16LE)

View File

@ -0,0 +1,31 @@
/*
* Copyright (c) 2009 Baptiste Coudurier <baptiste.coudurier@gmail.com>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_RANDOM_SEED_H
#define AVUTIL_RANDOM_SEED_H
#include <stdint.h>
/**
* Get a seed to use in conjunction with random functions.
*/
uint32_t av_get_random_seed(void);
#endif /* AVUTIL_RANDOM_SEED_H */

View File

@ -28,7 +28,8 @@
#ifndef AVUTIL_RATIONAL_H #ifndef AVUTIL_RATIONAL_H
#define AVUTIL_RATIONAL_H #define AVUTIL_RATIONAL_H
#include <msc_stdint.h> #include <stdint.h>
#include <limits.h>
#include "attributes.h" #include "attributes.h"
/** /**
@ -40,20 +41,23 @@ typedef struct AVRational{
} AVRational; } AVRational;
/** /**
* Compares two rationals. * Compare two rationals.
* @param a first rational * @param a first rational
* @param b second rational * @param b second rational
* @return 0 if a==b, 1 if a>b and -1 if a<b * @return 0 if a==b, 1 if a>b, -1 if a<b, and INT_MIN if one of the
* values is of the form 0/0
*/ */
static inline int av_cmp_q(AVRational a, AVRational b){ static inline int av_cmp_q(AVRational a, AVRational b){
const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den; const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den;
if(tmp) return (tmp>>63)|1; if(tmp) return ((tmp ^ a.den ^ b.den)>>63)|1;
else return 0; else if(b.den && a.den) return 0;
else if(a.num && b.num) return (a.num>>31) - (b.num>>31);
else return INT_MIN;
} }
/** /**
* Converts rational to double. * Convert rational to double.
* @param a rational to convert * @param a rational to convert
* @return (double) a * @return (double) a
*/ */
@ -62,7 +66,7 @@ static inline double av_q2d(AVRational a){
} }
/** /**
* Reduces a fraction. * Reduce a fraction.
* This is useful for framerate calculations. * This is useful for framerate calculations.
* @param dst_num destination numerator * @param dst_num destination numerator
* @param dst_den destination denominator * @param dst_den destination denominator
@ -74,7 +78,7 @@ static inline double av_q2d(AVRational a){
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max); int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max);
/** /**
* Multiplies two rationals. * Multiply two rationals.
* @param b first rational * @param b first rational
* @param c second rational * @param c second rational
* @return b*c * @return b*c
@ -82,7 +86,7 @@ int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
AVRational av_mul_q(AVRational b, AVRational c) av_const; AVRational av_mul_q(AVRational b, AVRational c) av_const;
/** /**
* Divides one rational by another. * Divide one rational by another.
* @param b first rational * @param b first rational
* @param c second rational * @param c second rational
* @return b/c * @return b/c
@ -90,7 +94,7 @@ AVRational av_mul_q(AVRational b, AVRational c) av_const;
AVRational av_div_q(AVRational b, AVRational c) av_const; AVRational av_div_q(AVRational b, AVRational c) av_const;
/** /**
* Adds two rationals. * Add two rationals.
* @param b first rational * @param b first rational
* @param c second rational * @param c second rational
* @return b+c * @return b+c
@ -98,7 +102,7 @@ AVRational av_div_q(AVRational b, AVRational c) av_const;
AVRational av_add_q(AVRational b, AVRational c) av_const; AVRational av_add_q(AVRational b, AVRational c) av_const;
/** /**
* Subtracts one rational from another. * Subtract one rational from another.
* @param b first rational * @param b first rational
* @param c second rational * @param c second rational
* @return b-c * @return b-c
@ -106,7 +110,9 @@ AVRational av_add_q(AVRational b, AVRational c) av_const;
AVRational av_sub_q(AVRational b, AVRational c) av_const; AVRational av_sub_q(AVRational b, AVRational c) av_const;
/** /**
* Converts a double precision floating point number to a rational. * Convert a double precision floating point number to a rational.
* inf is expressed as {1,0} or {-1,0} depending on the sign.
*
* @param d double to convert * @param d double to convert
* @param max the maximum allowed numerator and denominator * @param max the maximum allowed numerator and denominator
* @return (AVRational) d * @return (AVRational) d
@ -120,7 +126,7 @@ AVRational av_d2q(double d, int max) av_const;
int av_nearer_q(AVRational q, AVRational q1, AVRational q2); int av_nearer_q(AVRational q, AVRational q1, AVRational q2);
/** /**
* Finds the nearest value in q_list to q. * Find the nearest value in q_list to q.
* @param q_list an array of rationals terminated by {0, 0} * @param q_list an array of rationals terminated by {0, 0}
* @return the index of the nearest value found in the array * @return the index of the nearest value found in the array
*/ */

View File

@ -0,0 +1,125 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_SAMPLEFMT_H
#define AVUTIL_SAMPLEFMT_H
#include "avutil.h"
/**
* all in native-endian format
*/
enum AVSampleFormat {
AV_SAMPLE_FMT_NONE = -1,
AV_SAMPLE_FMT_U8, ///< unsigned 8 bits
AV_SAMPLE_FMT_S16, ///< signed 16 bits
AV_SAMPLE_FMT_S32, ///< signed 32 bits
AV_SAMPLE_FMT_FLT, ///< float
AV_SAMPLE_FMT_DBL, ///< double
AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking dynamically
};
/**
* Return the name of sample_fmt, or NULL if sample_fmt is not
* recognized.
*/
const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt);
/**
* Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE
* on error.
*/
enum AVSampleFormat av_get_sample_fmt(const char *name);
/**
* Generate a string corresponding to the sample format with
* sample_fmt, or a header if sample_fmt is negative.
*
* @param buf the buffer where to write the string
* @param buf_size the size of buf
* @param sample_fmt the number of the sample format to print the
* corresponding info string, or a negative value to print the
* corresponding header.
* @return the pointer to the filled buffer or NULL if sample_fmt is
* unknown or in case of other errors
*/
char *av_get_sample_fmt_string(char *buf, int buf_size, enum AVSampleFormat sample_fmt);
#if FF_API_GET_BITS_PER_SAMPLE_FMT
/**
* @deprecated Use av_get_bytes_per_sample() instead.
*/
attribute_deprecated
int av_get_bits_per_sample_fmt(enum AVSampleFormat sample_fmt);
#endif
/**
* Return number of bytes per sample.
*
* @param sample_fmt the sample format
* @return number of bytes per sample or zero if unknown for the given
* sample format
*/
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt);
/**
* Fill channel data pointers and linesizes for samples with sample
* format sample_fmt.
*
* The pointers array is filled with the pointers to the samples data:
* for planar, set the start point of each plane's data within the buffer,
* for packed, set the start point of the entire buffer only.
*
* The linesize array is filled with the aligned size of each samples
* plane, that is linesize[i] will contain the linesize of the plane i,
* and will be zero for all the unused planes. All linesize values are
* equal.
*
* @param pointers array to be filled with the pointer for each plane, may be NULL
* @param linesizes array to be filled with the linesize, may be NULL
* @param buf the pointer to a buffer containing the samples
* @param nb_samples the number of samples in a single channel
* @param planar 1 if the samples layout is planar, 0 if it is packed
* @param nb_channels the number of channels
* @return the total size of the buffer, a negative
* error code in case of failure
*/
int av_samples_fill_arrays(uint8_t *pointers[8], int linesizes[8],
uint8_t *buf, int nb_channels, int nb_samples,
enum AVSampleFormat sample_fmt, int planar, int align);
/**
* Allocate a samples buffer for nb_samples samples, and
* fill pointers and linesizes accordingly.
* The allocated samples buffer has to be freed by using
* av_freep(&pointers[0]).
*
* @param nb_channels number of audio channels
* @param nb_samples number of samples per channel
* @param planar 1 if the samples layout is planar, 0 if packed,
* @param align the value to use for buffer size alignment
* @return the size in bytes required for the samples buffer, a negative
* error code in case of failure
* @see av_samples_fill_arrays()
*/
int av_samples_alloc(uint8_t *pointers[8], int linesizes[8],
int nb_channels, int nb_samples,
enum AVSampleFormat sample_fmt, int planar,
int align);
#endif /* AVCORE_SAMPLEFMT_H */

View File

@ -0,0 +1,56 @@
/*
* Copyright (C) 2007 Michael Niedermayer <michaelni@gmx.at>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_SHA_H
#define AVUTIL_SHA_H
#include <stdint.h>
extern const int av_sha_size;
struct AVSHA;
/**
* Initialize SHA-1 or SHA-2 hashing.
*
* @param context pointer to the function context (of size av_sha_size)
* @param bits number of bits in digest (SHA-1 - 160 bits, SHA-2 224 or 256 bits)
* @return zero if initialization succeeded, -1 otherwise
*/
int av_sha_init(struct AVSHA* context, int bits);
/**
* Update hash value.
*
* @param context hash function context
* @param data input data to update hash with
* @param len input data length
*/
void av_sha_update(struct AVSHA* context, const uint8_t* data, unsigned int len);
/**
* Finish hashing and output digest value.
*
* @param context hash function context
* @param digest buffer where output digest value is stored
*/
void av_sha_final(struct AVSHA* context, uint8_t *digest);
#endif /* AVUTIL_SHA_H */

View File

@ -29,8 +29,8 @@
#include "libavutil/avutil.h" #include "libavutil/avutil.h"
#define LIBSWSCALE_VERSION_MAJOR 0 #define LIBSWSCALE_VERSION_MAJOR 2
#define LIBSWSCALE_VERSION_MINOR 11 #define LIBSWSCALE_VERSION_MINOR 0
#define LIBSWSCALE_VERSION_MICRO 0 #define LIBSWSCALE_VERSION_MICRO 0
#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ #define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \
@ -43,6 +43,20 @@
#define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION) #define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION)
/**
* Those FF_API_* defines are not part of public API.
* They may change, break or disappear at any time.
*/
#ifndef FF_API_SWS_GETCONTEXT
#define FF_API_SWS_GETCONTEXT (LIBSWSCALE_VERSION_MAJOR < 3)
#endif
#ifndef FF_API_SWS_CPU_CAPS
#define FF_API_SWS_CPU_CAPS (LIBSWSCALE_VERSION_MAJOR < 3)
#endif
#ifndef FF_API_SWS_FORMAT_NAME
#define FF_API_SWS_FORMAT_NAME (LIBSWSCALE_VERSION_MAJOR < 3)
#endif
/** /**
* Returns the LIBSWSCALE_VERSION_INT constant. * Returns the LIBSWSCALE_VERSION_INT constant.
*/ */
@ -87,11 +101,18 @@ const char *swscale_license(void);
#define SWS_ACCURATE_RND 0x40000 #define SWS_ACCURATE_RND 0x40000
#define SWS_BITEXACT 0x80000 #define SWS_BITEXACT 0x80000
#if FF_API_SWS_CPU_CAPS
/**
* CPU caps are autodetected now, those flags
* are only provided for API compatibility.
*/
#define SWS_CPU_CAPS_MMX 0x80000000 #define SWS_CPU_CAPS_MMX 0x80000000
#define SWS_CPU_CAPS_MMX2 0x20000000 #define SWS_CPU_CAPS_MMX2 0x20000000
#define SWS_CPU_CAPS_3DNOW 0x40000000 #define SWS_CPU_CAPS_3DNOW 0x40000000
#define SWS_CPU_CAPS_ALTIVEC 0x10000000 #define SWS_CPU_CAPS_ALTIVEC 0x10000000
#define SWS_CPU_CAPS_BFIN 0x01000000 #define SWS_CPU_CAPS_BFIN 0x01000000
#define SWS_CPU_CAPS_SSE2 0x02000000
#endif
#define SWS_MAX_REDUCE_CUTOFF 0.002 #define SWS_MAX_REDUCE_CUTOFF 0.002
@ -142,12 +163,28 @@ int sws_isSupportedInput(enum PixelFormat pix_fmt);
*/ */
int sws_isSupportedOutput(enum PixelFormat pix_fmt); int sws_isSupportedOutput(enum PixelFormat pix_fmt);
/**
* Allocates an empty SwsContext. This must be filled and passed to
* sws_init_context(). For filling see AVOptions, options.c and
* sws_setColorspaceDetails().
*/
struct SwsContext *sws_alloc_context(void);
/**
* Initializes the swscaler context sws_context.
*
* @return zero or positive value on success, a negative value on
* error
*/
int sws_init_context(struct SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter);
/** /**
* Frees the swscaler context swsContext. * Frees the swscaler context swsContext.
* If swsContext is NULL, then does nothing. * If swsContext is NULL, then does nothing.
*/ */
void sws_freeContext(struct SwsContext *swsContext); void sws_freeContext(struct SwsContext *swsContext);
#if FF_API_SWS_GETCONTEXT
/** /**
* Allocates and returns a SwsContext. You need it to perform * Allocates and returns a SwsContext. You need it to perform
* scaling/conversion operations using sws_scale(). * scaling/conversion operations using sws_scale().
@ -160,11 +197,15 @@ void sws_freeContext(struct SwsContext *swsContext);
* @param dstFormat the destination image format * @param dstFormat the destination image format
* @param flags specify which algorithm and options to use for rescaling * @param flags specify which algorithm and options to use for rescaling
* @return a pointer to an allocated context, or NULL in case of error * @return a pointer to an allocated context, or NULL in case of error
* @note this function is to be removed after a saner alternative is
* written
* @deprecated Use sws_getCachedContext() instead.
*/ */
struct SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat, struct SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat,
int dstW, int dstH, enum PixelFormat dstFormat, int dstW, int dstH, enum PixelFormat dstFormat,
int flags, SwsFilter *srcFilter, int flags, SwsFilter *srcFilter,
SwsFilter *dstFilter, const double *param); SwsFilter *dstFilter, const double *param);
#endif
/** /**
* Scales the image slice in srcSlice and puts the resulting scaled * Scales the image slice in srcSlice and puts the resulting scaled
@ -194,6 +235,7 @@ struct SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat
*/ */
int sws_scale(struct SwsContext *context, const uint8_t* const srcSlice[], const int srcStride[], int sws_scale(struct SwsContext *context, const uint8_t* const srcSlice[], const int srcStride[],
int srcSliceY, int srcSliceH, uint8_t* const dst[], const int dstStride[]); int srcSliceY, int srcSliceH, uint8_t* const dst[], const int dstStride[]);
#if LIBSWSCALE_VERSION_MAJOR < 1 #if LIBSWSCALE_VERSION_MAJOR < 1
/** /**
* @deprecated Use sws_scale() instead. * @deprecated Use sws_scale() instead.
@ -205,7 +247,6 @@ int sws_scale_ordered(struct SwsContext *context, const uint8_t* const src[],
/** /**
* @param inv_table the yuv2rgb coefficients, normally ff_yuv2rgb_coeffs[x] * @param inv_table the yuv2rgb coefficients, normally ff_yuv2rgb_coeffs[x]
* @param fullRange if 1 then the luma range is 0..255 if 0 it is 16..235
* @return -1 if not supported * @return -1 if not supported
*/ */
int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4],
@ -312,7 +353,7 @@ struct SwsContext *sws_getCachedContext(struct SwsContext *context,
* @param num_pixels number of pixels to convert * @param num_pixels number of pixels to convert
* @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src
*/ */
void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette);
/** /**
* Converts an 8bit paletted frame into a frame with a color depth of 24 bits. * Converts an 8bit paletted frame into a frame with a color depth of 24 bits.
@ -324,7 +365,7 @@ void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, long num_pi
* @param num_pixels number of pixels to convert * @param num_pixels number of pixels to convert
* @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src
*/ */
void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette);
#endif /* SWSCALE_SWSCALE_H */ #endif /* SWSCALE_SWSCALE_H */

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -371,11 +371,11 @@ if(CMAKE_COMPILER_IS_GNUCXX)
if(X86 OR X86_64) if(X86 OR X86_64)
# enable everything, since the available set of instructions is checked at runtime # enable everything, since the available set of instructions is checked at runtime
IF ("${CMAKE_GCC_REGEX_VERSION}" VERSION_GREATER 4.5) #IF ("${CMAKE_GCC_REGEX_VERSION}" VERSION_GREATER 4.5)
SET(_USE_FAST_MATH OFF) SET(_USE_FAST_MATH OFF)
ELSE() #ELSE()
SET(_USE_FAST_MATH ON) # SET(_USE_FAST_MATH ON)
ENDIF() #ENDIF()
set(USE_FAST_MATH ${_USE_FAST_MATH} CACHE BOOL "Enable -ffast-math (not recommended for GCC 4.6.x)") set(USE_FAST_MATH ${_USE_FAST_MATH} CACHE BOOL "Enable -ffast-math (not recommended for GCC 4.6.x)")
set(ENABLE_SSE ON CACHE BOOL "Enable SSE instructions") set(ENABLE_SSE ON CACHE BOOL "Enable SSE instructions")
set(ENABLE_SSE2 ON CACHE BOOL "Enable SSE2 instructions") set(ENABLE_SSE2 ON CACHE BOOL "Enable SSE2 instructions")
@ -1223,7 +1223,7 @@ if(CMAKE_COMPILER_IS_GNUCXX)
endif() endif()
if(X86 OR X86_64) if(X86 OR X86_64)
if(NOT APPLE AND ${CMAKE_SIZEOF_VOID_P} EQUAL 4) if(NOT APPLE AND CMAKE_SIZEOF_VOID_P EQUAL 4)
set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mfpmath=387") set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mfpmath=387")
endif() endif()
endif() endif()
@ -1499,9 +1499,15 @@ set(BUILD_PACKAGE ON CACHE BOOL "Enables 'make package_source' command")
if(BUILD_PACKAGE) if(BUILD_PACKAGE)
set(TARBALL_NAME "${CMAKE_PROJECT_NAME}-${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}.${OPENCV_VERSION_PATCH}") set(TARBALL_NAME "${CMAKE_PROJECT_NAME}-${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}.${OPENCV_VERSION_PATCH}")
if (NOT WIN32) if (NOT WIN32)
if(APPLE)
set(TAR_CMD gnutar)
else()
set(TAR_CMD tar)
endif()
set(TAR_TRANSFORM "\"s,^,${TARBALL_NAME}/,\"")
add_custom_target(package_source add_custom_target(package_source
#TODO: maybe we should not remove dll's #TODO: maybe we should not remove dll's
COMMAND tar --transform 's,^,${TARBALL_NAME}/,S' -cjpf ${CMAKE_CURRENT_BINARY_DIR}/${TARBALL_NAME}.tar.bz2 --exclude-vcs --exclude="*.pyc" --exclude="*.vcproj" --exclude="*/lib/*" --exclude="*.dll" ./ COMMAND ${TAR_CMD} --transform ${TAR_TRANSFORM} -cjpf ${CMAKE_CURRENT_BINARY_DIR}/${TARBALL_NAME}.tar.bz2 --exclude=".svn" --exclude="*.pyc" --exclude="*.vcproj" --exclude="*/lib/*" --exclude="*.dll" ./
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
else() else()
add_custom_target(package_source add_custom_target(package_source

View File

@ -355,10 +355,47 @@ extlinks = {'cvt_color': ('http://opencv.willowgarage.com/documentation/cpp/imgp
'utilitysystemfunctions':('http://opencv.itseez.com/modules/core/doc/utility_and_system_functions_and_macros.html#%s', None), 'utilitysystemfunctions':('http://opencv.itseez.com/modules/core/doc/utility_and_system_functions_and_macros.html#%s', None),
'imgprocfilter':('http://opencv.itseez.com/modules/imgproc/doc/filtering.html#%s', None), 'imgprocfilter':('http://opencv.itseez.com/modules/imgproc/doc/filtering.html#%s', None),
'svms':('http://opencv.itseez.com/modules/ml/doc/support_vector_machines.html#%s', None), 'svms':('http://opencv.itseez.com/modules/ml/doc/support_vector_machines.html#%s', None),
'drawingfunc':('http://opencv.itseez.com/modules/core/doc/drawing_functions.html#%s', None),
'xmlymlpers':('http://opencv.itseez.com/modules/core/doc/xml_yaml_persistence.html#%s', None), 'xmlymlpers':('http://opencv.itseez.com/modules/core/doc/xml_yaml_persistence.html#%s', None),
'huivideo' : ('http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html#%s', None), 'huivideo' : ('http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html#%s', None),
'gpuinit' : ('http://opencv.itseez.com/modules/gpu/doc/initalization_and_information.html#%s', None),
'gpudatastructure' : ('http://opencv.itseez.com/modules/gpu/doc/data_structures.html#%s', None),
'gpuopmatrices' : ('http://opencv.itseez.com/modules/gpu/doc/operations_on_matrices.html#%s', None),
'gpuperelement' : ('http://opencv.itseez.com/modules/gpu/doc/per_element_operations.html#%s', None),
'gpuimgproc' : ('http://opencv.itseez.com/modules/gpu/doc/image_processing.html#%s', None),
'gpumatrixreduct' : ('http://opencv.itseez.com/modules/gpu/doc/matrix_reductions.html#%s', None),'filtering':('http://opencv.itseez.com/modules/imgproc/doc/filtering.html#%s', None),
'point_polygon_test' : ('http://opencv.willowgarage.com/documentation/cpp/imgproc_structural_analysis_and_shape_descriptors.html#cv-pointpolygontest%s', None),
'feature_detector' : ( 'http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_feature_detectors.html#featuredetector%s', None),
'feature_detector_detect' : ('http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_feature_detectors.html#cv-featuredetector-detect%s', None ),
'surf_feature_detector' : ('http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_feature_detectors.html#surffeaturedetector%s', None ),
'draw_keypoints' : ('http://opencv.willowgarage.com/documentation/cpp/features2d_drawing_function_of_keypoints_and_matches.html#cv-drawkeypoints%s', None ),
'descriptor_extractor': ( 'http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_descriptor_extractors.html#descriptorextractor%s', None ),
'descriptor_extractor_compute' : ( 'http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_descriptor_extractors.html#cv-descriptorextractor-compute%s', None ),
'surf_descriptor_extractor' : ( 'http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_descriptor_extractors.html#surfdescriptorextractor%s', None ),
'draw_matches' : ( 'http://opencv.willowgarage.com/documentation/cpp/features2d_drawing_function_of_keypoints_and_matches.html#cv-drawmatches%s', None ),
'find_homography' : ('http://opencv.willowgarage.com/documentation/cpp/calib3d_camera_calibration_and_3d_reconstruction.html?#findHomography%s', None),
'perspective_transform' : ('http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html?#perspectiveTransform%s', None ),
'flann_based_matcher' : ('http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_descriptor_matchers.html?#FlannBasedMatcher%s', None),
'brute_force_matcher' : ('http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_descriptor_matchers.html?#BruteForceMatcher%s', None ),
'flann' : ('http://opencv.willowgarage.com/documentation/cpp/flann_fast_approximate_nearest_neighbor_search.html?%s', None ),
'cascade_classifier' : ('http://opencv.willowgarage.com/documentation/cpp/objdetect_cascade_classification.html#cascadeclassifier%s', None ),
'cascade_classifier_load' : ('http://opencv.willowgarage.com/documentation/cpp/objdetect_cascade_classification.html#cv-cascadeclassifier-load%s', None ),
'cascade_classifier_detect_multiscale' : ('http://opencv.willowgarage.com/documentation/cpp/objdetect_cascade_classification.html#cv-cascadeclassifier-detectmultiscale%s', None ),
'filtering':('http://opencv.itseez.com/modules/imgproc/doc/filtering.html#%s', None), 'filtering':('http://opencv.itseez.com/modules/imgproc/doc/filtering.html#%s', None),
'point_polygon_test' : ('http://opencv.willowgarage.com/documentation/cpp/imgproc_structural_analysis_and_shape_descriptors.html#cv-pointpolygontest%s', None) 'point_polygon_test' : ('http://opencv.willowgarage.com/documentation/cpp/imgproc_structural_analysis_and_shape_descriptors.html#cv-pointpolygontest%s', None),
'feature_detector' : ( 'http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_feature_detectors.html#featuredetector%s', None),
'feature_detector_detect' : ('http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_feature_detectors.html#cv-featuredetector-detect%s', None ),
'surf_feature_detector' : ('http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_feature_detectors.html#surffeaturedetector%s', None ),
'draw_keypoints' : ('http://opencv.willowgarage.com/documentation/cpp/features2d_drawing_function_of_keypoints_and_matches.html#cv-drawkeypoints%s', None ),
'descriptor_extractor': ( 'http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_descriptor_extractors.html#descriptorextractor%s', None ),
'descriptor_extractor_compute' : ( 'http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_descriptor_extractors.html#cv-descriptorextractor-compute%s', None ),
'surf_descriptor_extractor' : ( 'http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_descriptor_extractors.html#surfdescriptorextractor%s', None ),
'draw_matches' : ( 'http://opencv.willowgarage.com/documentation/cpp/features2d_drawing_function_of_keypoints_and_matches.html#cv-drawmatches%s', None ),
'find_homography' : ('http://opencv.willowgarage.com/documentation/cpp/calib3d_camera_calibration_and_3d_reconstruction.html?#findHomography%s', None),
'perspective_transform' : ('http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html?#perspectiveTransform%s', None ),
'flann_based_matcher' : ('http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_descriptor_matchers.html?#FlannBasedMatcher%s', None),
'brute_force_matcher' : ('http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_descriptor_matchers.html?#BruteForceMatcher%s', None ),
'flann' : ('http://opencv.willowgarage.com/documentation/cpp/flann_fast_approximate_nearest_neighbor_search.html?%s', None )
} }

View File

@ -302,9 +302,10 @@ _visibility_re = re.compile(r'\b(public|private|protected)\b')
_operator_re = re.compile(r'''(?x) _operator_re = re.compile(r'''(?x)
\[\s*\] \[\s*\]
| \(\s*\) | \(\s*\)
| (<<|>>)=?
| [!<>=/*%+|&^-]=? | [!<>=/*%+|&^-]=?
| \+\+ | -- | \+\+ | --
| (<<|>>)=? | ~ | && | \| | \|\| | ~ | && | \| | \|\|
| ->\*? | \, | ->\*? | \,
''') ''')
@ -560,6 +561,18 @@ class ConstDefExpr(WrappingDefExpr):
def __unicode__(self): def __unicode__(self):
return (self.prefix and u'const %s' or u'%s const') % self.typename return (self.prefix and u'const %s' or u'%s const') % self.typename
class ConstTemplateDefExpr(WrappingDefExpr):
def __init__(self, typename, prefix=False):
WrappingDefExpr.__init__(self, typename)
self.prefix = prefix
def get_id(self):
return self.typename.get_id() + u'C'
def __unicode__(self):
return (self.prefix and u'const %s' or u'%s const') % self.typename
class CastOpDefExpr(PrimaryDefExpr): class CastOpDefExpr(PrimaryDefExpr):
@ -933,9 +946,11 @@ class DefinitionParser(object):
else: else:
rv = PathDefExpr(result) rv = PathDefExpr(result)
is_const = self._peek_const(modifiers) is_const = self._peek_const(modifiers)
if is_const:
rv = ConstDefExpr(rv, prefix=True)
if modifiers: if modifiers:
rv = ModifierDefExpr(rv, modifiers) rv = ModifierDefExpr(rv, modifiers)
return self._attach_crefptr(rv, is_const) return self._attach_crefptr(rv, False)
def _parse_default_expr(self): def _parse_default_expr(self):
self.skip_ws() self.skip_ws()
@ -1136,7 +1151,7 @@ class OCVObject(ObjectDescription):
theid = sig#obj.get_id() theid = sig#obj.get_id()
theid = re.sub(r" +", " ", theid) theid = re.sub(r" +", " ", theid)
theid = re.sub(r"=[^,()]+\([^)]*?\)[^,)]*(,|\))", "\\1", theid) theid = re.sub(r"=[^,()]+\([^)]*?\)[^,)]*(,|\))", "\\1", theid)
theid = re.sub(r"=[^,)]+(,|\))", "\\1", theid) theid = re.sub(r"=\w*[^,)(]+(,|\))", "\\1", theid)
theid = theid.replace("( ", "(").replace(" )", ")") theid = theid.replace("( ", "(").replace(" )", ")")
name = unicode(sigobj.name) name = unicode(sigobj.name)
if theid not in self.state.document.ids: if theid not in self.state.document.ids:
@ -1149,6 +1164,8 @@ class OCVObject(ObjectDescription):
#(self.env.docname, self.objtype, theid)) #(self.env.docname, self.objtype, theid))
self.env.domaindata['ocv']['objects'].setdefault(theid, self.env.domaindata['ocv']['objects'].setdefault(theid,
(self.env.docname, self.objtype, theid)) (self.env.docname, self.objtype, theid))
self.env.domaindata['ocv']['objects2'].setdefault(name,
(self.env.docname, self.objtype, theid))
indextext = self.get_index_text(name) indextext = self.get_index_text(name)
if indextext: if indextext:
@ -1192,33 +1209,32 @@ class OCVObject(ObjectDescription):
class OCVClassObject(OCVObject): class OCVClassObject(OCVObject):
object_annotation = "class "
object_long_name = "class"
def attach_modifiers(self, node, obj):
if obj.visibility != 'public':
node += addnodes.desc_annotation(obj.visibility,
obj.visibility)
node += nodes.Text(' ')
if obj.static:
node += addnodes.desc_annotation('static', 'static')
node += nodes.Text(' ')
def get_index_text(self, name): def get_index_text(self, name):
return _('%s (C++ class)') % name return _('%s (C++ %s)') % (name, self.__class__.object_long_name)
def parse_definition(self, parser): def parse_definition(self, parser):
return parser.parse_class() return parser.parse_class()
def describe_signature(self, signode, cls): def describe_signature(self, signode, cls):
#self.attach_modifiers(signode, cls) self.attach_modifiers(signode, cls)
#signode += addnodes.desc_annotation('class ', 'class ') signode += addnodes.desc_annotation(self.__class__.object_annotation, self.__class__.object_annotation)
#self.attach_name(signode, cls.name) self.attach_name(signode, cls.name)
pass
class OCVStructObject(OCVObject):
def get_index_text(self, name):
return _('%s (C structure)') % name
def parse_definition(self, parser):
return parser.parse_class()
def describe_signature(self, signode, cls):
#self.attach_modifiers(signode, cls)
#signode += addnodes.desc_annotation('class ', 'class ')
#self.attach_name(signode, cls.name)
pass
class OCVStructObject(OCVClassObject):
object_annotation = "struct "
object_long_name = "structure"
class OCVTypeObject(OCVObject): class OCVTypeObject(OCVObject):
@ -1238,9 +1254,7 @@ class OCVTypeObject(OCVObject):
signode += nodes.Text(' ') signode += nodes.Text(' ')
self.attach_name(signode, obj.name) self.attach_name(signode, obj.name)
class OCVMemberObject(OCVObject): class OCVMemberObject(OCVObject):
ismember = True ismember = True
def get_index_text(self, name): def get_index_text(self, name):
@ -1259,7 +1273,6 @@ class OCVMemberObject(OCVObject):
if obj.value is not None: if obj.value is not None:
signode += nodes.Text(u' = ' + obj.value) signode += nodes.Text(u' = ' + obj.value)
class OCVFunctionObject(OCVObject): class OCVFunctionObject(OCVObject):
def attach_function(self, node, func): def attach_function(self, node, func):
@ -1406,9 +1419,9 @@ class OCVDomain(Domain):
'func' : OCVXRefRole(fix_parens=True), 'func' : OCVXRefRole(fix_parens=True),
'funcx' : OCVXRefRole(), 'funcx' : OCVXRefRole(),
'cfunc' : OCVXRefRole(fix_parens=True), 'cfunc' : OCVXRefRole(fix_parens=True),
'cfunc' : OCVXRefRole(), 'cfuncx' : OCVXRefRole(),
'jfunc' : OCVXRefRole(fix_parens=True), 'jfunc' : OCVXRefRole(fix_parens=True),
'jfunc' : OCVXRefRole(), 'jfuncx' : OCVXRefRole(),
'pyfunc' : OCVPyXRefRole(), 'pyfunc' : OCVPyXRefRole(),
'pyoldfunc' : OCVPyXRefRole(), 'pyoldfunc' : OCVPyXRefRole(),
'member': OCVXRefRole(), 'member': OCVXRefRole(),
@ -1417,6 +1430,10 @@ class OCVDomain(Domain):
initial_data = { initial_data = {
'objects': {}, # fullname -> docname, objtype 'objects': {}, # fullname -> docname, objtype
} }
def __init__(self, env):
Domain.__init__(self, env)
self.data['objects2'] = {}
def clear_doc(self, docname): def clear_doc(self, docname):
for fullname, (fn, _, _) in self.data['objects'].items(): for fullname, (fn, _, _) in self.data['objects'].items():
@ -1427,13 +1444,28 @@ class OCVDomain(Domain):
typ, target, node, contnode): typ, target, node, contnode):
def _create_refnode(expr): def _create_refnode(expr):
name = unicode(expr) name = unicode(expr)
if name not in self.data['objects']: if "type" in self.objtypes_for_role(typ):
return None return None
obj = self.data['objects'][name] if "cfunction" in self.objtypes_for_role(typ):
if not name.startswith(u'cv'):
name = u'cv' + name
dict = self.data['objects']
if name not in dict:
dict = self.data['objects2']
if name not in dict:
refdoc = node.get('refdoc', fromdocname)
env.warn(refdoc, 'unresolved reference: %r - %r' % (target, typ), node.line)
return None
obj = dict[name]
if obj[1] not in self.objtypes_for_role(typ): if obj[1] not in self.objtypes_for_role(typ):
return None return None
title = obj[2]
if "class" in self.objtypes_for_role(typ):
title = u"class " + title
elif "struct" in self.objtypes_for_role(typ):
title = u"struct " + title
return make_refnode(builder, fromdocname, obj[0], obj[2], return make_refnode(builder, fromdocname, obj[0], obj[2],
contnode, name) contnode, title)
parser = DefinitionParser(target) parser = DefinitionParser(target)
try: try:
@ -1443,7 +1475,7 @@ class OCVDomain(Domain):
raise DefinitionError('') raise DefinitionError('')
except DefinitionError: except DefinitionError:
refdoc = node.get('refdoc', fromdocname) refdoc = node.get('refdoc', fromdocname)
env.warn(refdoc, 'unparseable1 C++ definition: %r' % target, env.warn(refdoc, 'unparseable C++ definition: %r' % target,
node.line) node.line)
return None return None

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -8,11 +8,13 @@ Goal
In this tutorial you will learn how to: In this tutorial you will learn how to:
* What is *linear blending* and why it is useful. .. container:: enumeratevisibleitemswithsquare
* Add two images using :add_weighted:`addWeighted <>`
Cool Theory * What is *linear blending* and why it is useful.
================= * Add two images using :add_weighted:`addWeighted <>`
Theory
=======
.. note:: .. note::
@ -24,12 +26,12 @@ From our previous tutorial, we know already a bit of *Pixel operators*. An inter
g(x) = (1 - \alpha)f_{0}(x) + \alpha f_{1}(x) g(x) = (1 - \alpha)f_{0}(x) + \alpha f_{1}(x)
By varying :math:`\alpha` from :math:`0 \rightarrow 1` this operator can be used to perform a temporal *cross-disolve* between two images or videos, as seen in slide shows and film production (cool, eh?) By varying :math:`\alpha` from :math:`0 \rightarrow 1` this operator can be used to perform a temporal *cross-disolve* between two images or videos, as seen in slide shows and film productions (cool, eh?)
Code Code
===== =====
As usual, after the not-so-lengthy explanation, let's go to the code. Here it is: As usual, after the not-so-lengthy explanation, let's go to the code:
.. code-block:: cpp .. code-block:: cpp
@ -116,4 +118,4 @@ Result
.. image:: images/Adding_Images_Tutorial_Result_0.jpg .. image:: images/Adding_Images_Tutorial_Result_0.jpg
:alt: Blending Images Tutorial - Final Result :alt: Blending Images Tutorial - Final Result
:align: center :align: center

View File

@ -7,13 +7,15 @@ Goals
====== ======
In this tutorial you will learn how to: In this tutorial you will learn how to:
* Use :point:`Point <>` to define 2D points in an image. .. container:: enumeratevisibleitemswithsquare
* Use :scalar:`Scalar <>` and why it is useful
* Draw a **line** by using the OpenCV function :line:`line <>` * Use :point:`Point <>` to define 2D points in an image.
* Draw an **ellipse** by using the OpenCV function :ellipse:`ellipse <>` * Use :scalar:`Scalar <>` and why it is useful
* Draw a **rectangle** by using the OpenCV function :rectangle:`rectangle <>` * Draw a **line** by using the OpenCV function :line:`line <>`
* Draw a **circle** by using the OpenCV function :circle:`circle <>` * Draw an **ellipse** by using the OpenCV function :ellipse:`ellipse <>`
* Draw a **filled polygon** by using the OpenCV function :fill_poly:`fillPoly <>` * Draw a **rectangle** by using the OpenCV function :rectangle:`rectangle <>`
* Draw a **circle** by using the OpenCV function :circle:`circle <>`
* Draw a **filled polygon** by using the OpenCV function :fill_poly:`fillPoly <>`
OpenCV Theory OpenCV Theory
=============== ===============
@ -22,7 +24,10 @@ For this tutorial, we will heavily use two structures: :point:`Point <>` and :sc
Point Point
------- -------
It represents a 2D point, specified by its image coordinates :math:`x` and :math:`y`. We can define it as:
.. container:: enumeratevisibleitemswithsquare
It represents a 2D point, specified by its image coordinates :math:`x` and :math:`y`. We can define it as:
.. code-block:: cpp .. code-block:: cpp
@ -51,7 +56,7 @@ Scalar
Code Code
===== =====
* This code is in your OpenCV sample folder. Otherwise you can grab it from `here <https://code.ros.org/svn/opencv/trunk/opencv/samples/cpp/tutorial_code/Basic/Drawing_1.cpp>`_ * This code is in your OpenCV sample folder. Otherwise you can grab it from `here <https://code.ros.org/svn/opencv/trunk/opencv/samples/cpp/tutorial_code/core/Matrix/Drawing_1.cpp>`_
Explanation Explanation
============= =============
@ -126,11 +131,13 @@ Explanation
As we can see, *MyLine* just call the function :line:`line <>`, which does the following: As we can see, *MyLine* just call the function :line:`line <>`, which does the following:
* Draw a line from Point **start** to Point **end** .. container:: enumeratevisibleitemswithsquare
* The line is displayed in the image **img**
* The line color is defined by **Scalar( 0, 0, 0)** which is the RGB value correspondent to **Black** * Draw a line from Point **start** to Point **end**
* The line thickness is set to **thickness** (in this case 2) * The line is displayed in the image **img**
* The line is a 8-connected one (**lineType** = 8) * The line color is defined by **Scalar( 0, 0, 0)** which is the RGB value correspondent to **Black**
* The line thickness is set to **thickness** (in this case 2)
* The line is a 8-connected one (**lineType** = 8)
* *MyEllipse* * *MyEllipse*
@ -153,13 +160,15 @@ Explanation
} }
From the code above, we can observe that the function :ellipse:`ellipse <>` draws an ellipse such that: From the code above, we can observe that the function :ellipse:`ellipse <>` draws an ellipse such that:
* The ellipse is displayed in the image **img** .. container:: enumeratevisibleitemswithsquare
* The ellipse center is located in the point **(w/2.0, w/2.0)** and is enclosed in a box of size **(w/4.0, w/16.0)**
* The ellipse is rotated **angle** degrees * The ellipse is displayed in the image **img**
* The ellipse extends an arc between **0** and **360** degrees * The ellipse center is located in the point **(w/2.0, w/2.0)** and is enclosed in a box of size **(w/4.0, w/16.0)**
* The color of the figure will be **Scalar( 255, 255, 0)** which means blue in RGB value. * The ellipse is rotated **angle** degrees
* The ellipse's **thickness** is 2. * The ellipse extends an arc between **0** and **360** degrees
* The color of the figure will be **Scalar( 255, 255, 0)** which means blue in RGB value.
* The ellipse's **thickness** is 2.
* *MyFilledCircle* * *MyFilledCircle*
@ -181,11 +190,13 @@ Explanation
Similar to the ellipse function, we can observe that *circle* receives as arguments: Similar to the ellipse function, we can observe that *circle* receives as arguments:
* The image where the circle will be displayed (**img**) .. container:: enumeratevisibleitemswithsquare
* The center of the circle denoted as the Point **center**
* The radius of the circle: **w/32.0** * The image where the circle will be displayed (**img**)
* The color of the circle: **Scalar(0, 0, 255)** which means *Red* in RGB * The center of the circle denoted as the Point **center**
* Since **thickness** = -1, the circle will be drawn filled. * The radius of the circle: **w/32.0**
* The color of the circle: **Scalar(0, 0, 255)** which means *Red* in BGR
* Since **thickness** = -1, the circle will be drawn filled.
* *MyPolygon* * *MyPolygon*
@ -230,12 +241,14 @@ Explanation
} }
To draw a filled polygon we use the function :fill_poly:`fillPoly <>`. We note that: To draw a filled polygon we use the function :fill_poly:`fillPoly <>`. We note that:
* The polygon will be drawn on **img** .. container:: enumeratevisibleitemswithsquare
* The vertices of the polygon are the set of points in **ppt**
* The total number of vertices to be drawn are **npt** * The polygon will be drawn on **img**
* The number of polygons to be drawn is only **1** * The vertices of the polygon are the set of points in **ppt**
* The color of the polygon is defined by **Scalar( 255, 255, 255)**, which is the RGB value for *white* * The total number of vertices to be drawn are **npt**
* The number of polygons to be drawn is only **1**
* The color of the polygon is defined by **Scalar( 255, 255, 255)**, which is the BGR value for *white*
* *rectangle* * *rectangle*
@ -250,10 +263,12 @@ Explanation
Finally we have the :rectangle:`rectangle <>` function (we did not create a special function for this guy). We note that: Finally we have the :rectangle:`rectangle <>` function (we did not create a special function for this guy). We note that:
* The rectangle will be drawn on **rook_image** .. container:: enumeratevisibleitemswithsquare
* Two opposite vertices of the rectangle are defined by ** Point( 0, 7*w/8.0 )** and **Point( w, w)**
* The color of the rectangle is given by **Scalar(0, 255, 255)** which is the RGB value for *yellow* * The rectangle will be drawn on **rook_image**
* Since the thickness value is given by **-1**, the rectangle will be filled. * Two opposite vertices of the rectangle are defined by ** Point( 0, 7*w/8.0 )** and **Point( w, w)**
* The color of the rectangle is given by **Scalar(0, 255, 255)** which is the BGR value for *yellow*
* Since the thickness value is given by **-1**, the rectangle will be filled.
Result Result
======= =======

View File

@ -18,8 +18,8 @@ In this tutorial you will learn how to:
+ Get some cool info about pixel transformations + Get some cool info about pixel transformations
Cool Theory Theory
================= =======
.. note:: .. note::
The explanation below belongs to the book `Computer Vision: Algorithms and Applications <http://szeliski.org/Book/>`_ by Richard Szeliski The explanation below belongs to the book `Computer Vision: Algorithms and Applications <http://szeliski.org/Book/>`_ by Richard Szeliski
@ -27,44 +27,52 @@ Cool Theory
Image Processing Image Processing
-------------------- --------------------
* A general image processing operator is a function that takes one or more input images and produces an output image. .. container:: enumeratevisibleitemswithsquare
* Image transforms can be seen as: * A general image processing operator is a function that takes one or more input images and produces an output image.
* Point operators (pixel transforms) * Image transforms can be seen as:
* Neighborhood (area-based) operators
+ Point operators (pixel transforms)
+ Neighborhood (area-based) operators
Pixel Transforms Pixel Transforms
^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
* In this kind of image processing transform, each output pixel's value depends on only the corresponding input pixel value (plus, potentially, some globally collected information or parameters). .. container:: enumeratevisibleitemswithsquare
* Examples of such operators include *brightness and contrast adjustments* as well as color correction and transformations. * In this kind of image processing transform, each output pixel's value depends on only the corresponding input pixel value (plus, potentially, some globally collected information or parameters).
* Examples of such operators include *brightness and contrast adjustments* as well as color correction and transformations.
Brightness and contrast adjustments Brightness and contrast adjustments
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Two commonly used point processes are *multiplication* and *addition* with a constant:
.. math:: .. container:: enumeratevisibleitemswithsquare
g(x) = \alpha f(x) + \beta * Two commonly used point processes are *multiplication* and *addition* with a constant:
* The parameters :math:`\alpha > 0` and :math:`\beta` are often called the *gain* and *bias* parameters; sometimes these parameters are said to control *contrast* and *brightness* respectively. .. math::
* You can think of :math:`f(x)` as the source image pixels and :math:`g(x)` as the output image pixels. Then, more conveniently we can write the expression as: g(x) = \alpha f(x) + \beta
.. math::
g(i,j) = \alpha \cdot f(i,j) + \beta
where :math:`i` and :math:`j` indicates that the pixel is located in the *i-th* row and *j-th* column. * The parameters :math:`\alpha > 0` and :math:`\beta` are often called the *gain* and *bias* parameters; sometimes these parameters are said to control *contrast* and *brightness* respectively.
* You can think of :math:`f(x)` as the source image pixels and :math:`g(x)` as the output image pixels. Then, more conveniently we can write the expression as:
.. math::
g(i,j) = \alpha \cdot f(i,j) + \beta
where :math:`i` and :math:`j` indicates that the pixel is located in the *i-th* row and *j-th* column.
Code Code
===== =====
* The following code performs the operation :math:`g(i,j) = \alpha \cdot f(i,j) + \beta` .. container:: enumeratevisibleitemswithsquare
* Here it is:
* The following code performs the operation :math:`g(i,j) = \alpha \cdot f(i,j) + \beta` :
.. code-block:: cpp .. code-block:: cpp
@ -132,8 +140,10 @@ Explanation
#. Now, since we will make some transformations to this image, we need a new Mat object to store it. Also, we want this to have the following features: #. Now, since we will make some transformations to this image, we need a new Mat object to store it. Also, we want this to have the following features:
* Initial pixel values equal to zero .. container:: enumeratevisibleitemswithsquare
* Same size and type as the original image
* Initial pixel values equal to zero
* Same size and type as the original image
.. code-block:: cpp .. code-block:: cpp
@ -155,9 +165,11 @@ Explanation
Notice the following: Notice the following:
* To access each pixel in the images we are using this syntax: *image.at<Vec3b>(y,x)[c]* where *y* is the row, *x* is the column and *c* is R, G or B (0, 1 or 2). .. container:: enumeratevisibleitemswithsquare
* Since the operation :math:`\alpha \cdot p(i,j) + \beta` can give values out of range or not integers (if :math:`\alpha` is float), we use :saturate_cast:`saturate_cast <>` to make sure the values are valid. * To access each pixel in the images we are using this syntax: *image.at<Vec3b>(y,x)[c]* where *y* is the row, *x* is the column and *c* is R, G or B (0, 1 or 2).
* Since the operation :math:`\alpha \cdot p(i,j) + \beta` can give values out of range or not integers (if :math:`\alpha` is float), we use :saturate_cast:`saturate_cast <>` to make sure the values are valid.
#. Finally, we create windows and show the images, the usual way. #. Finally, we create windows and show the images, the usual way.
@ -199,4 +211,4 @@ Result
.. image:: images/Basic_Linear_Transform_Tutorial_Result_0.jpg .. image:: images/Basic_Linear_Transform_Tutorial_Result_0.jpg
:alt: Basic Linear Transform - Final Result :alt: Basic Linear Transform - Final Result
:align: center :align: center

View File

@ -8,16 +8,21 @@ Goals
In this tutorial you will learn how to: In this tutorial you will learn how to:
* Use the *Random Number generator class* (:rng:`RNG <>`) and how to get a random number from a uniform distribution. .. container:: enumeratevisibleitemswithsquare
* Display text on an OpenCV window by using the function :put_text:`putText <>`
* Use the *Random Number generator class* (:rng:`RNG <>`) and how to get a random number from a uniform distribution.
* Display text on an OpenCV window by using the function :put_text:`putText <>`
Code Code
===== =====
* In the previous tutorial (:ref:`Drawing_1`) we drew diverse geometric figures, giving as input parameters such as coordinates (in the form of :point:`Points <>`), color, thickness, etc. You might have noticed that we gave specific values for these arguments.
* In this tutorial, we intend to use *random* values for the drawing parameters. Also, we intend to populate our image with a big number of geometric figures. Since we will be initializing them in a random fashion, this process will be automatic and made by using *loops* .
* This code is in your OpenCV sample folder. Otherwise you can grab it from `here <https://code.ros.org/svn/opencv/trunk/opencv/samples/cpp/tutorial_code/Basic/Drawing_2.cpp>`_ . .. container:: enumeratevisibleitemswithsquare
* In the previous tutorial (:ref:`Drawing_1`) we drew diverse geometric figures, giving as input parameters such as coordinates (in the form of :point:`Points <>`), color, thickness, etc. You might have noticed that we gave specific values for these arguments.
* In this tutorial, we intend to use *random* values for the drawing parameters. Also, we intend to populate our image with a big number of geometric figures. Since we will be initializing them in a random fashion, this process will be automatic and made by using *loops* .
* This code is in your OpenCV sample folder. Otherwise you can grab it from `here <https://code.ros.org/svn/opencv/trunk/opencv/samples/cpp/tutorial_code/core/Matrix/Drawing_2.cpp>`_ .
Explanation Explanation
============ ============
@ -172,12 +177,14 @@ Explanation
So, what does the function :put_text:`putText <>` do? In our example: So, what does the function :put_text:`putText <>` do? In our example:
* Draws the text **"Testing text rendering"** in **image** .. container:: enumeratevisibleitemswithsquare
* The bottom-left corner of the text will be located in the Point **org**
* The font type is a random integer value in the range: :math:`[0, 8>`. * Draws the text **"Testing text rendering"** in **image**
* The scale of the font is denoted by the expression **rng.uniform(0, 100)x0.05 + 0.1** (meaning its range is: :math:`[0.1, 5.1>`) * The bottom-left corner of the text will be located in the Point **org**
* The text color is random (denoted by **randomColor(rng)**) * The font type is a random integer value in the range: :math:`[0, 8>`.
* The text thickness ranges between 1 and 10, as specified by **rng.uniform(1,10)** * The scale of the font is denoted by the expression **rng.uniform(0, 100)x0.05 + 0.1** (meaning its range is: :math:`[0.1, 5.1>`)
* The text color is random (denoted by **randomColor(rng)**)
* The text thickness ranges between 1 and 10, as specified by **rng.uniform(1,10)**
As a result, we will get (analagously to the other drawing functions) **NUMBER** texts over our image, in random locations. As a result, we will get (analagously to the other drawing functions) **NUMBER** texts over our image, in random locations.
@ -257,4 +264,4 @@ As you just saw in the Code section, the program will sequentially execute diver
.. image:: images/Drawing_2_Tutorial_Result_7.jpg .. image:: images/Drawing_2_Tutorial_Result_7.jpg
:alt: Drawing Tutorial 2 - Final Result 7 :alt: Drawing Tutorial 2 - Final Result 7
:align: center :align: center

View File

@ -0,0 +1,104 @@
.. _feature_description:
Feature Description
*******************
Goal
=====
In this tutorial you will learn how to:
.. container:: enumeratevisibleitemswithsquare
* Use the :descriptor_extractor:`DescriptorExtractor<>` interface in order to find the feature vector correspondent to the keypoints. Specifically:
* Use :surf_descriptor_extractor:`SurfDescriptorExtractor<>` and its function :descriptor_extractor:`compute<>` to perform the required calculations.
* Use a :brute_force_matcher:`BruteForceMatcher<>` to match the features vector
* Use the function :draw_matches:`drawMatches<>` to draw the detected matches.
Theory
======
Code
====
This tutorial code's is shown lines below. You can also download it from `here <https://code.ros.org/svn/opencv/trunk/opencv/samples/cpp/tutorial_code/features2D/SURF_descriptor.cpp>`_
.. code-block:: cpp
#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
void readme();
/** @function main */
int main( int argc, char** argv )
{
if( argc != 3 )
{ return -1; }
Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
Mat img_2 = imread( argv[2], CV_LOAD_IMAGE_GRAYSCALE );
if( !img_1.data || !img_2.data )
{ return -1; }
//-- Step 1: Detect the keypoints using SURF Detector
int minHessian = 400;
SurfFeatureDetector detector( minHessian );
std::vector<KeyPoint> keypoints_1, keypoints_2;
detector.detect( img_1, keypoints_1 );
detector.detect( img_2, keypoints_2 );
//-- Step 2: Calculate descriptors (feature vectors)
SurfDescriptorExtractor extractor;
Mat descriptors_1, descriptors_2;
extractor.compute( img_1, keypoints_1, descriptors_1 );
extractor.compute( img_2, keypoints_2, descriptors_2 );
//-- Step 3: Matching descriptor vectors with a brute force matcher
BruteForceMatcher< L2<float> > matcher;
std::vector< DMatch > matches;
matcher.match( descriptors_1, descriptors_2, matches );
//-- Draw matches
Mat img_matches;
drawMatches( img_1, keypoints_1, img_2, keypoints_2, matches, img_matches );
//-- Show detected matches
imshow("Matches", img_matches );
waitKey(0);
return 0;
}
/** @function readme */
void readme()
{ std::cout << " Usage: ./SURF_descriptor <img1> <img2>" << std::endl; }
Explanation
============
Result
======
#. Here is the result after applying the BruteForce matcher between the two original images:
.. image:: images/Feature_Description_BruteForce_Result.jpg
:align: center
:height: 200pt

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

View File

@ -0,0 +1,97 @@
.. _feature_detection:
Feature Detection
******************
Goal
=====
In this tutorial you will learn how to:
.. container:: enumeratevisibleitemswithsquare
* Use the :feature_detector:`FeatureDetector<>` interface in order to find interest points. Specifically:
* Use the :surf_feature_detector:`SurfFeatureDetector<>` and its function :feature_detector_detect:`detect<>` to perform the detection process
* Use the function :draw_keypoints:`drawKeypoints<>` to draw the detected keypoints
Theory
======
Code
====
This tutorial code's is shown lines below. You can also download it from `here <https://code.ros.org/svn/opencv/trunk/opencv/samples/cpp/tutorial_code/features2D/SURF_detector.cpp>`_
.. code-block:: cpp
#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
void readme();
/** @function main */
int main( int argc, char** argv )
{
if( argc != 3 )
{ readme(); return -1; }
Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
Mat img_2 = imread( argv[2], CV_LOAD_IMAGE_GRAYSCALE );
if( !img_1.data || !img_2.data )
{ std::cout<< " --(!) Error reading images " << std::endl; return -1; }
//-- Step 1: Detect the keypoints using SURF Detector
int minHessian = 400;
SurfFeatureDetector detector( minHessian );
std::vector<KeyPoint> keypoints_1, keypoints_2;
detector.detect( img_1, keypoints_1 );
detector.detect( img_2, keypoints_2 );
//-- Draw keypoints
Mat img_keypoints_1; Mat img_keypoints_2;
drawKeypoints( img_1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT );
drawKeypoints( img_2, keypoints_2, img_keypoints_2, Scalar::all(-1), DrawMatchesFlags::DEFAULT );
//-- Show detected (drawn) keypoints
imshow("Keypoints 1", img_keypoints_1 );
imshow("Keypoints 2", img_keypoints_2 );
waitKey(0);
return 0;
}
/** @function readme */
void readme()
{ std::cout << " Usage: ./SURF_detector <img1> <img2>" << std::endl; }
Explanation
============
Result
======
#. Here is the result of the feature detection applied to the first image:
.. image:: images/Feature_Detection_Result_a.jpg
:align: center
:height: 125pt
#. And here is the result for the second image:
.. image:: images/Feature_Detection_Result_b.jpg
:align: center
:height: 200pt

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

View File

@ -0,0 +1,132 @@
.. _feature_flann_matcher:
Feature Matching with FLANN
****************************
Goal
=====
In this tutorial you will learn how to:
.. container:: enumeratevisibleitemswithsquare
* Use the :flann_based_matcher:`FlannBasedMatcher<>` interface in order to perform a quick and efficient matching by using the :flann:`FLANN<>` ( *Fast Approximate Nearest Neighbor Search Library* )
Theory
======
Code
====
This tutorial code's is shown lines below. You can also download it from `here <https://code.ros.org/svn/opencv/trunk/opencv/samples/cpp/tutorial_code/features2D/SURF_FlannMatcher.cpp>`_
.. code-block:: cpp
#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
void readme();
/** @function main */
int main( int argc, char** argv )
{
if( argc != 3 )
{ readme(); return -1; }
Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
Mat img_2 = imread( argv[2], CV_LOAD_IMAGE_GRAYSCALE );
if( !img_1.data || !img_2.data )
{ std::cout<< " --(!) Error reading images " << std::endl; return -1; }
//-- Step 1: Detect the keypoints using SURF Detector
int minHessian = 400;
SurfFeatureDetector detector( minHessian );
std::vector<KeyPoint> keypoints_1, keypoints_2;
detector.detect( img_1, keypoints_1 );
detector.detect( img_2, keypoints_2 );
//-- Step 2: Calculate descriptors (feature vectors)
SurfDescriptorExtractor extractor;
Mat descriptors_1, descriptors_2;
extractor.compute( img_1, keypoints_1, descriptors_1 );
extractor.compute( img_2, keypoints_2, descriptors_2 );
//-- Step 3: Matching descriptor vectors using FLANN matcher
FlannBasedMatcher matcher;
std::vector< DMatch > matches;
matcher.match( descriptors_1, descriptors_2, matches );
double max_dist = 0; double min_dist = 100;
//-- Quick calculation of max and min distances between keypoints
for( int i = 0; i < descriptors_1.rows; i++ )
{ double dist = matches[i].distance;
if( dist < min_dist ) min_dist = dist;
if( dist > max_dist ) max_dist = dist;
}
printf("-- Max dist : %f \n", max_dist );
printf("-- Min dist : %f \n", min_dist );
//-- Draw only "good" matches (i.e. whose distance is less than 2*min_dist )
//-- PS.- radiusMatch can also be used here.
std::vector< DMatch > good_matches;
for( int i = 0; i < descriptors_1.rows; i++ )
{ if( matches[i].distance < 2*min_dist )
{ good_matches.push_back( matches[i]); }
}
//-- Draw only "good" matches
Mat img_matches;
drawMatches( img_1, keypoints_1, img_2, keypoints_2,
good_matches, img_matches, Scalar::all(-1), Scalar::all(-1),
vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );
//-- Show detected matches
imshow( "Good Matches", img_matches );
for( int i = 0; i < good_matches.size(); i++ )
{ printf( "-- Good Match [%d] Keypoint 1: %d -- Keypoint 2: %d \n", i, good_matches[i].queryIdx, good_matches[i].trainIdx ); }
waitKey(0);
return 0;
}
/** @function readme */
void readme()
{ std::cout << " Usage: ./SURF_FlannMatcher <img1> <img2>" << std::endl; }
Explanation
============
Result
======
#. Here is the result of the feature detection applied to the first image:
.. image:: images/Featur_FlannMatcher_Result.jpg
:align: center
:height: 250pt
#. Additionally, we get as console output the keypoints filtered:
.. image:: images/Feature_FlannMatcher_Keypoints_Result.jpg
:align: center
:height: 250pt

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

View File

@ -0,0 +1,148 @@
.. _feature_homography:
Features2D + Homography to find a known object
**********************************************
Goal
=====
In this tutorial you will learn how to:
.. container:: enumeratevisibleitemswithsquare
* Use the function :find_homography:`findHomography<>` to find the transform between matched keypoints.
* Use the function :perspective_transform:`perspectiveTransform<>` to map the points.
Theory
======
Code
====
This tutorial code's is shown lines below. You can also download it from `here <https://code.ros.org/svn/opencv/trunk/opencv/samples/cpp/tutorial_code/features2D/SURF_Homography.cpp>`_
.. code-block:: cpp
#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"
using namespace cv;
void readme();
/** @function main */
int main( int argc, char** argv )
{
if( argc != 3 )
{ readme(); return -1; }
Mat img_object = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
Mat img_scene = imread( argv[2], CV_LOAD_IMAGE_GRAYSCALE );
if( !img_object.data || !img_scene.data )
{ std::cout<< " --(!) Error reading images " << std::endl; return -1; }
//-- Step 1: Detect the keypoints using SURF Detector
int minHessian = 400;
SurfFeatureDetector detector( minHessian );
std::vector<KeyPoint> keypoints_object, keypoints_scene;
detector.detect( img_object, keypoints_object );
detector.detect( img_scene, keypoints_scene );
//-- Step 2: Calculate descriptors (feature vectors)
SurfDescriptorExtractor extractor;
Mat descriptors_object, descriptors_scene;
extractor.compute( img_object, keypoints_object, descriptors_object );
extractor.compute( img_scene, keypoints_scene, descriptors_scene );
//-- Step 3: Matching descriptor vectors using FLANN matcher
FlannBasedMatcher matcher;
std::vector< DMatch > matches;
matcher.match( descriptors_object, descriptors_scene, matches );
double max_dist = 0; double min_dist = 100;
//-- Quick calculation of max and min distances between keypoints
for( int i = 0; i < descriptors_object.rows; i++ )
{ double dist = matches[i].distance;
if( dist < min_dist ) min_dist = dist;
if( dist > max_dist ) max_dist = dist;
}
printf("-- Max dist : %f \n", max_dist );
printf("-- Min dist : %f \n", min_dist );
//-- Draw only "good" matches (i.e. whose distance is less than 3*min_dist )
std::vector< DMatch > good_matches;
for( int i = 0; i < descriptors_object.rows; i++ )
{ if( matches[i].distance < 3*min_dist )
{ good_matches.push_back( matches[i]); }
}
Mat img_matches;
drawMatches( img_object, keypoints_object, img_scene, keypoints_scene,
good_matches, img_matches, Scalar::all(-1), Scalar::all(-1),
vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );
//-- Localize the object
std::vector<Point2f> obj;
std::vector<Point2f> scene;
for( int i = 0; i < good_matches.size(); i++ )
{
//-- Get the keypoints from the good matches
obj.push_back( keypoints_object[ good_matches[i].queryIdx ].pt );
scene.push_back( keypoints_scene[ good_matches[i].trainIdx ].pt );
}
Mat H = findHomography( obj, scene, CV_RANSAC );
//-- Get the corners from the image_1 ( the object to be "detected" )
std::vector<Point2f> obj_corners(4);
obj_corners[0] = cvPoint(0,0); obj_corners[1] = cvPoint( img_object.cols, 0 );
obj_corners[2] = cvPoint( img_object.cols, img_object.rows ); obj_corners[3] = cvPoint( 0, img_object.rows );
std::vector<Point2f> scene_corners(4);
perspectiveTransform( obj_corners, scene_corners, H);
//-- Draw lines between the corners (the mapped object in the scene - image_2 )
line( img_matches, scene_corners[0] + Point2f( img_object.cols, 0), scene_corners[1] + Point2f( img_object.cols, 0), Scalar(0, 255, 0), 4 );
line( img_matches, scene_corners[1] + Point2f( img_object.cols, 0), scene_corners[2] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );
line( img_matches, scene_corners[2] + Point2f( img_object.cols, 0), scene_corners[3] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );
line( img_matches, scene_corners[3] + Point2f( img_object.cols, 0), scene_corners[0] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );
//-- Show detected matches
imshow( "Good Matches & Object detection", img_matches );
waitKey(0);
return 0;
}
/** @function readme */
void readme()
{ std::cout << " Usage: ./SURF_descriptor <img1> <img2>" << std::endl; }
Explanation
============
Result
======
#. And here is the result for the detected object (highlighted in green)
.. image:: images/Feature_Homography_Result.jpg
:align: center
:height: 200pt

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

View File

@ -72,7 +72,7 @@ Learn about how to use the feature points detectors, descriptors and matching f
.. cssclass:: toctableopencv .. cssclass:: toctableopencv
===================== ============================================== ===================== ==============================================
|Subpixel| **Title:** :ref:`corner_subpixeles` |Subpixel| **Title:** :ref:`corner_subpixeles`
*Compatibility:* > OpenCV 2.0 *Compatibility:* > OpenCV 2.0
@ -86,6 +86,84 @@ Learn about how to use the feature points detectors, descriptors and matching f
:height: 90pt :height: 90pt
:width: 90pt :width: 90pt
+
.. tabularcolumns:: m{100pt} m{300pt}
.. cssclass:: toctableopencv
===================== ==============================================
|FeatureDetect| **Title:** :ref:`feature_detection`
*Compatibility:* > OpenCV 2.0
*Author:* |Author_AnaH|
In this tutorial, you will use *features2d* to detect interest points.
===================== ==============================================
.. |FeatureDetect| image:: images/Feature_Detection_Tutorial_Cover.jpg
:height: 90pt
:width: 90pt
+
.. tabularcolumns:: m{100pt} m{300pt}
.. cssclass:: toctableopencv
===================== ==============================================
|FeatureDescript| **Title:** :ref:`feature_description`
*Compatibility:* > OpenCV 2.0
*Author:* |Author_AnaH|
In this tutorial, you will use *features2d* to calculate feature vectors.
===================== ==============================================
.. |FeatureDescript| image:: images/Feature_Description_Tutorial_Cover.jpg
:height: 90pt
:width: 90pt
+
.. tabularcolumns:: m{100pt} m{300pt}
.. cssclass:: toctableopencv
===================== ==============================================
|FeatureFlann| **Title:** :ref:`feature_flann_matcher`
*Compatibility:* > OpenCV 2.0
*Author:* |Author_AnaH|
In this tutorial, you will use the FLANN library to make a fast matching.
===================== ==============================================
.. |FeatureFlann| image:: images/Feature_Flann_Matcher_Tutorial_Cover.jpg
:height: 90pt
:width: 90pt
+
.. tabularcolumns:: m{100pt} m{300pt}
.. cssclass:: toctableopencv
===================== ==============================================
|FeatureHomo| **Title:** :ref:`feature_homography`
*Compatibility:* > OpenCV 2.0
*Author:* |Author_AnaH|
In this tutorial, you will use *features2d* and *calib3d* to detect an object in a scene.
===================== ==============================================
.. |FeatureHomo| image:: images/Feature_Homography_Tutorial_Cover.jpg
:height: 90pt
:width: 90pt
+ +
.. tabularcolumns:: m{100pt} m{300pt} .. tabularcolumns:: m{100pt} m{300pt}
.. cssclass:: toctableopencv .. cssclass:: toctableopencv
@ -112,8 +190,17 @@ Learn about how to use the feature points detectors, descriptors and matching f
.. toctree:: .. toctree::
:hidden: :hidden:
../feature_description/feature_description
../feature_detection/feature_detection
../trackingmotion/harris_detector/harris_detector ../trackingmotion/harris_detector/harris_detector
../feature_flann_matcher/feature_flann_matcher
../feature_homography/feature_homography
../trackingmotion/good_features_to_track/good_features_to_track.rst ../trackingmotion/good_features_to_track/good_features_to_track.rst
../trackingmotion/generic_corner_detector/generic_corner_detector ../trackingmotion/generic_corner_detector/generic_corner_detector
../trackingmotion/corner_subpixeles/corner_subpixeles ../trackingmotion/corner_subpixeles/corner_subpixeles
../detection_of_planar_objects/detection_of_planar_objects ../feature_detection/feature_detection
../feature_detection/feature_description
../feature_flann_matcher/feature_flann_matcher
../feature_homography/feature_homography
../detection_of_planar_objects/detection_of_planar_objects

View File

@ -88,14 +88,14 @@ This tutorial code's is shown lines below. You can also download it from `here <
/// Apply corner detection /// Apply corner detection
goodFeaturesToTrack( src_gray, goodFeaturesToTrack( src_gray,
corners, corners,
maxCorners, maxCorners,
qualityLevel, qualityLevel,
minDistance, minDistance,
Mat(), Mat(),
blockSize, blockSize,
useHarrisDetector, useHarrisDetector,
k ); k );
/// Draw corners detected /// Draw corners detected
@ -116,7 +116,7 @@ Explanation
Result Result
====== ======
.. image:: images/Shi_Tomasi_Detector_Result.jpg .. image:: images/Feature_Detection_Result_a.jpg
:align: center :align: center

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

View File

@ -6,15 +6,46 @@ Harris corner detector
Goal Goal
===== =====
In this tutorial you will learn how to: In this tutorial you will learn:
.. container:: enumeratevisibleitemswithsquare .. container:: enumeratevisibleitemswithsquare
* What features are and why they are important
* Use the function :corner_harris:`cornerHarris <>` to detect corners using the Harris-Stephens method. * Use the function :corner_harris:`cornerHarris <>` to detect corners using the Harris-Stephens method.
Theory Theory
====== ======
What is a feature?
-------------------
.. container:: enumeratevisibleitemswithsquare
* In computer vision, usually we need to find matching points between different frames of an environment. Why? If we know how two images relate to each other, we can use *both* images to extract information of them.
* When we say **matching points** we are referring, in a general sense, to *characteristics* in the scene that we can recognize easily. We call these characteristics **features**.
* **So, what characteristics should a feature have?**
* It must be *uniquely recognizable*
Types of Image Features
------------------------
To mention a few:
.. container:: enumeratevisibleitemswithsquare
* Edges
* Corner (also known as interest points)
* Blobs (also known as regions of interest )
In this tutorial we will study the *corner* features, specifically.
Why is a corner so special?
----------------------------
Code Code
==== ====

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -1,12 +1,36 @@
.. _Table-Of-Content-GPU: .. _Table-Of-Content-GPU:
*gpu* module. GPU-Accelerated Computer Vision *gpu* module. GPU-Accelerated Computer Vision
----------------------------------------------------------- ---------------------------------------------
Squeeze out every little computation power from your system by using the power of your video card to run the OpenCV algorithms. Squeeze out every little computation power from your system by using the power of your video card to run the OpenCV algorithms.
.. include:: ../../definitions/noContent.rst .. include:: ../../definitions/tocDefinitions.rst
+
.. tabularcolumns:: m{100pt} m{300pt}
.. cssclass:: toctableopencv
=============== ======================================================
|hVideoWrite| *Title:* :ref:`gpuBasicsSimilarity`
*Compatibility:* > OpenCV 2.0
*Author:* |Author_BernatG|
This will give a good grasp on how to approach coding on the GPU module, once you already know how to handle the other modules. As a test case it will port the similarity methods from the tutorial :ref:`videoInputPSNRMSSIM` to the GPU.
=============== ======================================================
.. |hVideoWrite| image:: images/gpu-basics-similarity.png
:height: 90pt
:width: 90pt
.. raw:: latex .. raw:: latex
\pagebreak \pagebreak
.. toctree::
:hidden:
../gpu-basics-similarity/gpu-basics-similarity

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@ -1,7 +1,7 @@
.. _Table-Of-Content-HighGui: .. _Table-Of-Content-HighGui:
*highgui* module. High Level GUI and Media *highgui* module. High Level GUI and Media
----------------------------------------------------------- ------------------------------------------
This section contains valuable tutorials about how to read/save your image/video files and how to use the built-in graphical user interface of the library. This section contains valuable tutorials about how to read/save your image/video files and how to use the built-in graphical user interface of the library.
@ -45,6 +45,26 @@ This section contains valuable tutorials about how to read/save your image/video
:height: 90pt :height: 90pt
:width: 90pt :width: 90pt
+
.. tabularcolumns:: m{100pt} m{300pt}
.. cssclass:: toctableopencv
=============== ======================================================
|hVideoWrite| *Title:* :ref:`videoWriteHighGui`
*Compatibility:* > OpenCV 2.0
*Author:* |Author_BernatG|
Whenever you work with video feeds you may eventually want to save your image processing result in a form of a new video file. Here's how to do it.
=============== ======================================================
.. |hVideoWrite| image:: images/video-write.png
:height: 90pt
:width: 90pt
.. raw:: latex .. raw:: latex
\pagebreak \pagebreak
@ -54,3 +74,4 @@ This section contains valuable tutorials about how to read/save your image/video
../trackbar/trackbar ../trackbar/trackbar
../video-input-psnr-ssim/video-input-psnr-ssim ../video-input-psnr-ssim/video-input-psnr-ssim
../video-write/video-write

View File

@ -18,7 +18,7 @@ The source code
As a test case where to show off these using OpenCV I've created a small program that reads in two video files and performs a similarity check between them. This is something you could use to check just how well a new video compressing algorithms works. Let there be a reference (original) video like :download:`this small Megamind clip <../../../../samples/cpp/tutorial_code/highgui/video-input-psnr-ssim/video/Megamind.avi>` and :download:`a compressed version of it <../../../../samples/cpp/tutorial_code/highgui/video-input-psnr-ssim/video/Megamind_bugy.avi>`. You may also find the source code and these video file in the :file:`samples/cpp/tutorial_code/highgui/video-input-psnr-ssim/` folder of the OpenCV source library. As a test case where to show off these using OpenCV I've created a small program that reads in two video files and performs a similarity check between them. This is something you could use to check just how well a new video compressing algorithms works. Let there be a reference (original) video like :download:`this small Megamind clip <../../../../samples/cpp/tutorial_code/highgui/video-input-psnr-ssim/video/Megamind.avi>` and :download:`a compressed version of it <../../../../samples/cpp/tutorial_code/highgui/video-input-psnr-ssim/video/Megamind_bugy.avi>`. You may also find the source code and these video file in the :file:`samples/cpp/tutorial_code/highgui/video-input-psnr-ssim/` folder of the OpenCV source library.
.. literalinclude:: ../../../../samples/cpp/tutorial_code/HighGUI\video-input-psnr-ssim\video-input-psnr-ssim.cpp .. literalinclude:: ../../../../samples/cpp/tutorial_code/HighGUI/video-input-psnr-ssim/video-input-psnr-ssim.cpp
:language: cpp :language: cpp
:linenos: :linenos:
:tab-width: 4 :tab-width: 4

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

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