Author SHA1 Message Date
jfmcarreira 9e8dfc2e3d Merge remote-tracking branch 'origin/feature/CalypFrameTestingCatch2' into feature/CalypFrameTestingCatch2 2021-05-08 23:15:16 +01:00
jfmcarreira 0280200a82 Add cmake with catch tests 2021-05-08 23:03:10 +01:00
João Carreira d29f8ea215 Add src files for catch2 tests 2021-05-03 01:43:19 +01:00
João Carreira 2d8476e875 Start adding cmake code to use catch2 2021-05-03 01:43:15 +01:00
jfmcarreira 864c3253f1 Fix cmake warnings for devs 2021-05-03 01:31:21 +01:00
João Carreira 32f803ada9 Add first tests using catch2 2021-05-03 00:24:02 +01:00
João Carreira 63eb742f64 Add src files for catch2 tests 2021-05-03 00:00:54 +01:00
João Carreira 72ef7deda6 Start adding cmake code to use catch2 2021-05-02 23:55:07 +01:00
João Carreira a2d452fd64 Ignore any build dir starting with build-* 2021-05-02 23:23:42 +01:00
jfmcarreira 3732810f9e Fix deprecated Qt functions
Change the way to get the screen size
Remove Qt::WindowFlags
Change function to process events from mouse wheel
2021-05-01 01:35:28 +01:00
jfmcarreira 56fc2e45bb Remove deprecated av_register_all() 2021-05-01 01:34:38 +01:00
jfmcarreira fa23256955 Add GitHub action to build code using cmake 2021-04-17 18:33:13 +01:00
jfmcarreira ffe0c38427 Bump version 2021-04-17 18:29:08 +01:00
jfmcarreira 12bd1a4c2c Add details to about dialog and change theme for windows 2021-04-17 18:27:47 +01:00
jfmcarreira b830b700ca Define style on windows 2021-04-17 12:59:55 +01:00
jfmcarreira 3109250471 Update last commit 2021-04-17 02:19:07 +01:00
jfmcarreira c6b43ac7fa Remove ffmpeg exe before building against it 2021-04-17 02:09:27 +01:00
jfmcarreira beed955e3f Change ffmpeg installation on windows 2021-04-17 01:57:27 +01:00
jfmcarreira 1f003ec2ac Add libswresample to FindFFmpeg 2021-04-17 01:22:34 +01:00
jfmcarreira c718d01700 Complete ffmpeg def in appveyor
Add missing variable definitions for avdevice and postproc library
Define variable FFMPEG_DIR
2021-04-17 00:44:34 +01:00
jfmcarreira 847f4f06b9 Remove testing from travis ci 2021-04-16 22:47:07 +01:00
jfmcarreira 344188234b Add missing dependency to gtest in travis env 2021-04-16 22:25:40 +01:00
jfmcarreira 5439fd1af5 Revert changes to travis CI 2021-04-07 15:56:57 +01:00
jfmcarreira 2f434d269b Run tests in travisCI 2021-04-06 22:58:20 +01:00
jfmcarreira a72208f0e6 Remove unused file and update .gitignore 2021-04-06 22:57:31 +01:00
jfmcarreira c3c4e229d8 Tests: Add general tests for modules
The idea of these tests is to check whether the modules will work
with different kinds of inputs. The modules should be able to initialize
or return an error indication. But in all cases they should be able to handle
default arguments all different inputs
2021-04-06 22:57:12 +01:00
jfmcarreira fedcb2e03a Add pre-commit checks and reformat code 2021-02-14 01:39:41 +00:00
jfmcarreira e755608b02 Merge branch 'master' into devel 2021-02-14 01:35:55 +00:00
jfmcarreira 2debe78ed8 Refactoring lib CMakeLists.txt 2021-02-14 00:51:21 +00:00
jfmcarreira 4d1730f928 Explicitly use static library for modules 2021-02-13 23:49:36 +00:00
jfmcarreira 521e56202c Remove clang-tidy 2021-02-13 04:16:25 +00:00
jfmcarreira d0933f43c9 Add cmake and clang format and linter 2021-02-13 04:08:43 +00:00
jfmcarreira 1674ec4061 Add missing information 2021-02-13 03:40:56 +00:00
jfmcarreira ab58ca44f2 Fix copyright 2021-02-13 03:16:17 +00:00
jfmcarreira 11bf3f6bfd Format code 2021-02-13 03:12:28 +00:00
jfmcarreira 669f3db250 Add modules test for create operation 2021-02-13 02:27:39 +00:00
jfmcarreira 3c6e0555bc Update doc and gitignore 2021-02-13 02:26:39 +00:00
jfmcarreira fca79a7992 Add cmake variable to define test data location 2021-02-13 02:07:43 +00:00
jfmcarreira b507b61ce4 Pre fill configuration dialog with the last used values 2021-02-02 00:03:29 +00:00
jfmcarreira 72bfaf6796 Update github token 2020-12-18 22:39:05 +00:00
jfmcarreira 0998d98375 Fix 7z extract command 2020-12-18 20:28:54 +00:00
jfmcarreira 3afa6eeb6f Run extract ffmpeg script 2020-12-18 20:18:18 +00:00
jfmcarreira 41c65dcac4 Fix ffmpeg download for appveyor windows build 2020-12-16 02:58:02 +00:00
jfmcarreira 25d40cadbe Merge remote-tracking branch 'upstream/master' 2020-12-12 13:20:14 +00:00
jfmcarreira ca68f5a78f Remove IDE related files 2020-12-12 13:18:48 +00:00
Joao Santos f2e1e4bfc7 Removed decimal places from the median value. 2020-12-12 13:11:09 +00:00
Joao Santos b5edc60794 Added option to print statistics to calypTools. 2020-12-12 13:08:53 +00:00
Joao Santos 6b084c1a7e Fixed minor issue with getEntropy function. 2020-12-12 13:06:52 +00:00
jfmcarreira 7b712bb232 Fix parsing cli args in Calyp 2020-12-12 11:05:39 +00:00
jfmcarreira 684cecd632 Minor bug fixes in the help of calypTools 2020-12-11 18:00:12 +00:00
Joao Santos f6cc0ffd29 The entropy of the image was added to the statistics. 2020-12-10 17:16:38 +00:00
jfmcarreira c1cef58de1 Fix extract command in appveyor 2020-10-24 00:08:55 +01:00
jfmcarreira f9e62c73ac Update appveyor to fetch ffmpeg from a new source 2020-10-23 23:13:02 +01:00
jfmcarreira 6486104db2 Minor changes in optimise display 2020-10-23 18:36:52 +01:00
jfmcarreira 31f7e46e94 Add new option in calypTools to process video with negative values 2019-11-29 00:36:54 +00:00
jfmcarreira aaa5a0fde4 Add new features to CalypFrame and support for sum operation 2019-11-28 23:18:29 +00:00
jfmcarreira f2c8697ace Fix modules name to avoid confusion 2019-11-28 00:51:06 +00:00
jfmcarreira 3ed8b0916f Add new module FrameResampling and change opencv interface 2019-11-23 01:25:46 +00:00
jfmcarreira ce82d0a17d Change the opencv includes 2019-11-16 02:27:47 +00:00
jfmcarreira 81972c9ded Add headers to the CMakeLists 2019-11-16 02:09:56 +00:00
jfmcarreira 115c4b0476 Merge branch 'master' into develOpencvModules 2019-11-16 01:45:22 +00:00
jfmcarreira fd5dcc0e1a Do not show modules with API 3 in CalypApp 2019-11-16 01:45:09 +00:00
jfmcarreira 56f1df4a56 Add new interface for modules using opencv 2019-11-16 01:44:31 +00:00
João Santos d4dddda2c2 Optimise display module now doesn't require a new window. 2019-11-12 16:24:56 +00:00
jfmcarreira 753c4cca3f Update README.md 2019-11-03 20:52:15 +00:00
jfmcarreira 67b0406f86 Increase CalypTools input limit to 255 2019-10-25 11:23:42 +01:00
João Santos abff4f3aa7 OptimiseDisplay now works for all of the image channels. 2019-10-22 16:12:00 +01:00
João Santos 7d83009f4b Fixed the reading of Portable Map images header. 2019-10-22 16:00:35 +01:00
jfmcarreira 2933269ea4 Improve ThreeSixtyFaceConcatenation and ThreeSixtyFaceExtraction 2019-10-21 15:07:53 +01:00
jfmcarreira 20b6edd667 Fix pixel format in OptimiseDisplay module 2019-10-14 15:35:50 +01:00
jfmcarreira 64153e572f Add opencv photo module 2019-09-20 22:49:45 +01:00
jfmcarreira 19cc7002e6 Merge branch 'master' of github.com:pixlra/calyp 2019-09-19 21:00:41 +01:00
jfmcarreira 115a5edec2 Add new modules from private repository 2019-09-19 21:00:31 +01:00
jfmcarreira 50b4ef20ce Add memory checks in xCallocMem 2019-07-29 15:25:01 +01:00
jfmcarreira 5f28b90811 Update binaries and dev in README.md 2019-06-14 17:14:30 +01:00
jfmcarreira 9fb445288c Change function outputs 2019-06-05 00:11:42 +01:00
João Santos 08d9fd1d5d Changed module window title to use the long name. 2019-05-30 16:42:37 +01:00
João Santos 3e186e9685 Added OptimiseDisplay module. 2019-05-30 16:42:09 +01:00
jfmcarreira c26e7c2265 Fix bpp match 2019-05-30 16:40:32 +01:00
João Santos b10a593e01 Improved statistics:
- Fixed issue with the range maximum value calculation
- Added the number of actual used values
2019-05-30 11:21:17 +01:00
jfmcarreira 63442d58b9 Complete last commig 2019-05-28 19:05:16 +01:00
jfmcarreira b36bbeef7a Support for variable number of inputs 2019-05-28 18:55:34 +01:00
jfmcarreira 2adfd28e48 Change module to enable frame re-sampling 2019-05-07 22:12:44 +01:00
jfmcarreira d76d2082ca Add prefix string before dumping stream information 2019-05-06 14:06:53 +01:00
jfmcarreira 10dec18118 Change the definition of the output endinness 2019-05-06 13:32:08 +01:00
jfmcarreira 39618ca7d5 Fix minor bug in the modules API and change input params in CalypFrame 2019-05-06 11:25:21 +01:00
jfmcarreira 833bd5f1c9 Use the same endianess for output as the input 2019-05-06 11:24:54 +01:00
jfmcarreira 937669d3c9 Finishing adding log information about input and output streams 2019-04-16 15:43:33 +01:00
jfmcarreira 63a9e2d22d Change CalypStream methods to support const 2019-04-16 15:42:37 +01:00
jfmcarreira 14bd963046 Start adding support for extended information in calypTools 2019-04-16 14:31:02 +01:00
jfmcarreira d6676b3eaf Fix copyTo and copyFrom functions 2019-04-15 16:37:44 +01:00
jfmcarreira 8152e82129 Fix bug introduced in the CalypFrame->toMat function 2019-04-12 16:58:16 +01:00
jfmcarreira a8ead5dcf6 Remove unused variable 2019-04-12 13:45:04 +01:00
jfmcarreira 35dcb020e6 Remove extra ; 2019-04-12 03:35:58 +01:00
jfmcarreira 68faafc9ed Improve conversion to OpenCv Mat with more than 8 bits 2019-04-12 03:35:42 +01:00
jfmcarreira 0989810e1f Add error message for portable map when pixel format is not supported 2019-04-10 22:15:04 +01:00
jfmcarreira 8620e3ddf2 Fix error in copy from function in CalypFrame 2019-04-08 15:00:15 +01:00
jfmcarreira b5c5c837e8 Add new information in modules 2019-04-07 18:29:04 +01:00
jfmcarreira 291b0b3890 Fix quality metrics 2019-04-04 19:51:28 +01:00
jfmcarreira 9a24ba2236 Fix CalypFrame to OpenCV 2019-04-04 12:41:24 +01:00
jfmcarreira f502dcc70a Add support for WS-PSNR quality metric 2019-04-03 23:37:16 +01:00
jfmcarreira cf2109e016 Change opencv to optional 2019-04-03 21:45:45 +01:00
jfmcarreira eff57f2fec Fix opencv include 2019-04-03 19:49:08 +01:00
jfmcarreira 608cc20508 Change the condtion checking the extra modules location 2019-04-03 19:43:23 +01:00
jfmcarreira e4e4994f25 Fix cmake code to correctly add extra modules 2019-04-03 19:38:36 +01:00
jfmcarreira a8a8043ced Fix the cmake code to support external modules 2019-04-03 18:51:36 +01:00
jfmcarreira e42f0d02bb Major changes in OpenCV handling
CalypFrame to Mat conversion
Remove custom modules
2019-04-03 16:37:32 +01:00
jfmcarreira 97c2fccf1a Fix comments in 360 modules 2019-03-27 14:56:43 +00:00
jfmcarreira 2d1af68418 Reverse change to use calyp-deployment repo 2019-03-21 23:12:03 +00:00
jfmcarreira 9b82ed0e88 Appveyor: do not lock the VM in the end 2019-03-21 13:58:26 +00:00
jfmcarreira 9a05fa3e62 Finish appveyor CI and add badge 2019-03-21 02:20:17 +00:00
jfmcarreira 57c82be827 Add BuildPkg.cmake with instruction to build Windows and Linux pkgs 2019-03-21 01:43:21 +00:00
jfmcarreira 3bcc61780b Improve AppVeyor and change opencv dep 2019-03-21 01:29:37 +00:00
jfmcarreira 5b633f7bda Fix lack of opencv dep in some modules 2019-03-20 22:55:32 +00:00
jfmcarreira 777f39ff9d Re-add appveyor configuration 2019-03-20 22:31:35 +00:00
jfmcarreira 518cd558e3 Delete .appveyor.yml 2019-03-20 15:24:49 +00:00
jfmcarreira 6bebaf0e2e Add AppVeyor configuration 2019-03-20 14:34:32 +00:00
jfmcarreira 2eead20ef0 Update travis CI and add badge 2019-03-20 14:11:23 +00:00
jfmcarreira cff796a4b7 Add different interpolation techniques to the ERP to NxN conversion 2019-03-12 02:18:11 +00:00
jfmcarreira 432d2c6cad Add module to convert ERP to NxN 2019-03-12 02:05:49 +00:00
jfmcarreira 183052148e Merge branch 'master' into private 2019-03-11 23:53:29 +00:00
jfmcarreira fda7e0f0c6 Fix frameToBuffer when using interleaved formats 2019-03-08 18:16:38 +00:00
jfmcarreira 75f16c2b34 Bugfix: Do not guess format if forcing config 2019-03-07 21:54:16 +00:00
jfmcarreira 0013190d27 Allow to save ppm using the StreamHandlerPortableMap 2019-03-07 16:01:15 +00:00
jfmcarreira ea613e097f Move warning flag to GNU compilers
Move -Wno-deprecated-declarations flag to GNU compilers only. This does not exist on windows
2019-03-06 19:06:00 +00:00
jfmcarreira a0fa4364e3 Merge pull request #1 from JNSFilipe/master
Improvements in guessing the sequence format form the name of the file
2019-03-06 18:37:44 +00:00
JFilipe df38f3d832 Name of the file is now read form the end to the begining, in order to guess seuqence format 2019-02-28 21:42:29 +00:00
JFilipe be0c5dca74 Merge branch 'master' of https://github.com/JNSFilipe/calyp 2019-02-28 21:26:47 +00:00
JFilipe f24adede0f add qcif format support and frame rate guessing on opening sequence 2019-02-28 21:25:34 +00:00
jfmcarreira b671596a24 Show configuration windows when it fails to open using a guess 2019-02-28 18:05:15 +00:00
jfmcarreira 805cee6fbc Improve frame difference to support multiple channels 2019-02-28 18:04:47 +00:00
jfmcarreira b3340bb13b Fix StreamHandlerLibav ffmpeg version check 2019-02-27 22:02:19 +00:00
JFilipe 2eec03b23f Enable OpenCV4 compability 2019-02-25 18:09:43 +00:00
jfmcarreira 2b00cceb09 Add a log including the frame num 2019-02-22 17:44:40 +00:00
jfmcarreira b20d5aef49 Fix CalypTools loop with the new module API 2019-02-22 17:31:53 +00:00
jfmcarreira 1dfbc06d7f Fix re-using instance using QDBus 2019-02-22 14:49:21 +00:00
jfmcarreira bad10649e3 Test some code 2019-02-21 02:41:16 +00:00
jfmcarreira c47192f5f3 Add module to reverse transform from video to cube map projection
Add module and fix bug in CalypFrame and add new feature to modules API 3
2019-02-20 23:26:28 +00:00
jfmcarreira ca562ae9f4 Bugfixes and improvements
Uniform the use of unsigned long in the frame number by defining a ClpULong type
CalypFrame Add function to copyTo a specific position
2019-02-20 22:22:43 +00:00
jfmcarreira 00ec0485f4 Fix bits per pixel in calypTools 2019-02-20 04:41:28 +00:00
jfmcarreira b5a5bb90f9 Fix bugs in CalypFrame 2019-02-20 04:41:07 +00:00
jfmcarreira 2129d05e6e Add new API for modules 2019-02-20 03:26:44 +00:00
jfmcarreira 710731db55 Change resolution list 2019-02-08 14:02:34 +00:00
jfmcarreira f2d8b06db2 Fix support for interlaced formats with more than 1 byte / pixel 2019-02-01 18:25:39 +00:00
jfmcarreira 37e14ff1bb Fix axis limits when using several plots 2019-01-06 23:17:24 +00:00
jfmcarreira c0b0388b02 Add average quality into the plot window 2019-01-06 22:37:48 +00:00
jfmcarreira 40d1189275 Add quality metrics units 2019-01-06 22:37:15 +00:00
jfmcarreira 17dbd59338 News year formating
Update copyrights to 2019
Minor code formating while passing formating script to all files
2019-01-06 21:59:04 +00:00
168 changed files with 16435 additions and 13220 deletions

No files matched your search

+46
View File
@@ -0,0 +1,46 @@
image: Visual Studio 2017
configuration: Release
platform:
- x64
environment:
access_token:
secure: SMxOWNKN0RkPvICWhIet2FJM5g/zx5mguM/XAPjM2OrC3U2/LAqcBZw0veS9peS4
clone_folder: C:\Projects\calyp
init:
- ps: Add-Content "$HOME\.git-credentials" "https://$($env:access_token):x-oauth-basic@github.com`n"
- git config --global credential.helper store
- git config --global user.email "jfmcarreira@gmail.com"
- git config --global user.name "AppVeyor"
- ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
install:
- '"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64'
- choco install nsis
- choco install opencv
- 'C:\Tools\opencv\build\setup_vars_opencv4.cmd'
- cd C:\Projects
- ps: Start-FileDownload 'https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full-shared.7z' ffmpeg.7z
- 7z x ffmpeg.7z -y -offmpeg
- git clone https://github.com/pixlra/calyp-deployment.git
- CALL calyp-deployment/scripts/extract_ffmpeg.bat
- ps: rm C:\Projects\ffmpeg_libraries\bin\*.exe
build_script:
- mv C:\Projects\calyp C:\Projects\calyp-deployment\cmake-helper\
- mkdir C:\Projects\calyp-build
- cd C:\Projects\calyp-build
- cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DUSE_DYNLOAD=OFF -DOpenCV_DIR="C:/Tools/opencv/build" -DOpenCV_DLL_DIR="C:/Tools/opencv/build/x64/vc15/bin" -DOpenCV_INSTALL_MODULES="world" -DQT_DIR="C:\Qt\latest\msvc2017_64" -DQt5_DIR="C:\Qt\latest\msvc2017_64\lib\cmake\Qt5" -DUSE_QTDBUS=OFF -DAVFORMAT_LIBRARIES=C:/Projects/ffmpeg_libraries/lib/avformat.lib -DAVFORMAT_INCLUDE_DIRS=C:/Projects/ffmpeg_libraries/include -DAVCODEC_LIBRARIES=C:/Projects/ffmpeg_libraries/lib/avcodec.lib -DAVCODEC_INCLUDE_DIRS=C:/Projects/ffmpeg_libraries/include -DAVUTIL_LIBRARIES=C:/Projects/ffmpeg_libraries/lib/avutil.lib -DAVUTIL_INCLUDE_DIRS=C:/Projects/ffmpeg_libraries/include -DSWSCALE_LIBRARIES=C:/Projects/ffmpeg_libraries/lib/swscale.lib -DSWSCALE_INCLUDE_DIRS=C:/Projects/ffmpeg_libraries/include -DAVDEVICE_LIBRARIES=C:/Projects/ffmpeg_libraries/lib/avdevice.lib -DAVDEVICE_INCLUDE_DIRS=C:/Projects/ffmpeg_libraries/include -DPOSTPROC_LIBRARIES=C:/Projects/ffmpeg_libraries/lib/postproc.lib -DPOSTPROC_INCLUDE_DIRS=C:/Projects/ffmpeg_libraries/include -DFFMPEG_DIR=C:\Projects\ffmpeg_libraries -DSWRESAMPLE_LIBRARIES=C:/Projects/ffmpeg_libraries/lib/swresample.lib -DSWRESAMPLE_INCLUDE_DIRS=C:/Projects/ffmpeg_libraries/include -G "Visual Studio 15 2017 Win64" C:\Projects\calyp-deployment\cmake-helper
- cmake --build . --target ALL_BUILD -- /p:Configuration=Release > log_build
- cmake --build . --target INSTALL -- /p:Configuration=Release > log_install
- cmake --build . --target PACKAGE -- /p:Configuration=Release > log_pkg
after_build:
- IF "%APPVEYOR_REPO_BRANCH%" == "master" (CALL ..\calyp-deployment\scripts\deploy-to-github.bat)
on_failure:
- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
+117
View File
@@ -0,0 +1,117 @@
# ----------------------------------
# Options affecting listfile parsing
# ----------------------------------
with section("parse"):
# Specify structure for custom cmake functions
additional_commands = { 'foo': { 'flags': ['BAR', 'BAZ'],
'kwargs': {'DEPENDS': '*', 'HEADERS': '*', 'SOURCES': '*'}}}
## Override configurations per-command where available
#override_spec = {}
# Specify variable tags.
vartags = []
# Specify property tags.
proptags = []
# -----------------------------
# Options affecting formatting.
# -----------------------------
with section("format"):
# How wide to allow formatted cmake files
line_width = 150
# How many spaces to tab for indent
tab_size = 2
# If an argument group contains more than this many sub-groups (parg or kwarg
# groups) then force it to a vertical layout.
max_subgroups_hwrap = 2
# If a positional argument group contains more than this many arguments, then
# force it to a vertical layout.
max_pargs_hwrap = 6
dangle_parens = True
# Format command names consistently as 'lower' or 'upper' case
command_case = 'upper'
# Format keywords consistently as 'lower' or 'upper' case
keyword_case = 'upper'
# ----------------------------
# Options affecting the linter
# ----------------------------
with section("lint"):
# a list of lint codes to disable
disabled_codes = ["C0103"]
# regular expression pattern describing valid function names
function_pattern = '[0-9a-z_]+'
# regular expression pattern describing valid macro names
macro_pattern = '[0-9A-Z_]+'
# regular expression pattern describing valid names for variables with global
# (cache) scope
global_var_pattern = '[A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for variables with global
# scope (but internal semantic)
internal_var_pattern = '_[A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for variables with local
# scope
local_var_pattern = '[a-z][a-z0-9_]+'
# regular expression pattern describing valid names for privatedirectory
# variables
private_var_pattern = '_[0-9a-z_]+'
# regular expression pattern describing valid names for public directory
# variables
public_var_pattern = '[A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for function/macro
# arguments and loop variables.
argument_var_pattern = '[a-z][a-z0-9_]+'
# regular expression pattern describing valid names for keywords used in
# functions or macros
keyword_pattern = '[A-Z][0-9A-Z_]+'
# In the heuristic for C0201, how many conditionals to match within a loop in
# before considering the loop a parser.
max_conditionals_custom_parser = 2
# Require at least this many newlines between statements
min_statement_spacing = 1
# Require no more than this many newlines between statements
max_statement_spacing = 2
max_returns = 6
max_branches = 12
max_arguments = 5
max_localvars = 15
max_statements = 50
# -------------------------------
# Options affecting file encoding
# -------------------------------
with section("encode"):
# If true, emit the unicode byte-order mark (BOM) at the start of the file
emit_byteorder_mark = False
# Specify the encoding of the input file. Defaults to utf-8
input_encoding = 'utf-8'
# Specify the encoding of the output file. Defaults to utf-8. Note that cmake
# only claims to support utf-8 so be careful when using anything else
output_encoding = 'utf-8'
+31
View File
@@ -0,0 +1,31 @@
name: Build and Test
on:
push:
branches:
- devel
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install Dependencies
run: sudo apt-get install cmake qtbase5-dev libavcodec-dev libavformat-dev libavutil-dev libopencv-dev libopencv-video-dev libopencv-contrib-dev
- name: Build CMake
uses: ashutoshvarma/action-cmake-build@v1
with:
build-dir: ${{ runner.workspace }}/build
# will set the CC & CXX for cmake
cc: gcc
cxx: g++
build-type: Release
# Extra options pass to cmake while configuring project
configure-options: -DBUILD_TESTS=ON -DUSE_WERROR=ON
run-test: true
#ctest-options: -R mytest
# install the build using cmake --install
install-build: true
# run build using '-j [parallel]' to use multiple threads to build
parallel: 14
+146
View File
@@ -0,0 +1,146 @@
# Created by https://www.gitignore.io/api/c++,clion,linux
# Edit at https://www.gitignore.io/?templates=c++,clion,linux
### C++ ###
# Prerequisites
*.d
# Clang
.cache/
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
### CLion ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# CMake
bin/
build/
build-*
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### CLion Patch ###
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
# *.iml
# modules.xml
# .idea/misc.xml
# *.ipr
# Sonarlint plugin
.idea/sonarlint
### Linux ###
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
### vscode ###
.vscode/*
*.code-workspace
# Documentation
doc/
# CLang
compile_commands.json
+27
View File
@@ -0,0 +1,27 @@
fail_fast: false
repos:
- repo: local
hooks:
- id: cmake-configure
name: Cmake Configure
entry: cmake -B build
pass_filenames: false
language: system
- id: cmake-build
name: Cmake Build
entry: cmake --build build
pass_filenames: false
language: system
- repo: https://github.com/cheshirekow/cmake-format-precommit
rev: v0.6.10
hooks:
- id: cmake-format
- id: cmake-lint
- repo: https://github.com/pocc/pre-commit-hooks
rev: v1.1.1
hooks:
- id: clang-format
args: [--style=file, -i]
+3 -2
View File
@@ -2,5 +2,6 @@ language: cpp
dist: xenial
before_install:
- sudo apt-get -qq update
- sudo apt-get install build-essential cmake qtbase5-dev libavcodec-dev libavformat-dev libavutil-dev libopencv-dev libopencv-video-dev
script: mkdir -p build && cd build && cmake .. && make && cd ..
- sudo apt-get install build-essential cmake qtbase5-dev libavcodec-dev libavformat-dev libavutil-dev libopencv-dev libopencv-video-dev libopencv-contrib-dev libgtest-dev
script:
- mkdir -p build && cd build && cmake .. && make && cd ..
+196 -145
View File
@@ -1,227 +1,278 @@
###
### CMakeLists for calyp
###
#
# CMakeLists for calyp
#
cmake_minimum_required( VERSION 3.2.0 )
CMAKE_MINIMUM_REQUIRED(VERSION 3.5.0)
######################################################################################
# ####################################################################################################################################################
# Project Definition
# ####################################################################################################################################################
SET(PROJECT_NAME
"calyp"
CACHE INTERNAL "" FORCE
)
SET(PROJECT_LIBRARY
"Calyp"
CACHE INTERNAL "" FORCE
)
SET(CALYP_VERSION_MAJOR "1")
SET(CALYP_VERSION_MINOR "2")
SET(CALYP_VERSION_PATCH "0")
SET(CALYP_VERSION
"${CALYP_VERSION_MAJOR}.${CALYP_VERSION_MINOR}.${CALYP_VERSION_PATCH}"
CACHE INTERNAL "" FORCE
)
PROJECT(
${PROJECT_NAME}
VERSION ${CALYP_VERSION}
LANGUAGES "CXX"
)
# ####################################################################################################################################################
# CMake functions
######################################################################################
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake )
INCLUDE( cmake/ModulesFct.cmake )
# ####################################################################################################################################################
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
INCLUDE(cmake/ModulesFct.cmake)
INCLUDE(FeatureSummary)
INCLUDE(GNUInstallDirs)
######################################################################################
# Project Definition
######################################################################################
SET( PROJECT_NAME "calyp" CACHE INTERNAL "" FORCE )
SET( PROJECT_LIBRARY "Calyp" CACHE INTERNAL "" FORCE )
PROJECT( ${PROJECT_NAME} )
SET( CALYP_VERSION_MAJOR "1" )
SET( CALYP_VERSION_MINOR "0" )
SET( CALYP_VERSION_PATCH "0" )
SET( CALYP_VERSION "${CALYP_VERSION_MAJOR}.${CALYP_VERSION_MINOR}.${CALYP_VERSION_PATCH}" CACHE INTERNAL "" FORCE )
######################################################################################
# ####################################################################################################################################################
# Variables
######################################################################################
# ####################################################################################################################################################
OPTION( BUILD_APP "Build GUI Application" ON )
OPTION( BUILD_TOOLS "Build Command Line Application" ON )
OPTION( BUILD_EXAMPLES "Build Examples" OFF )
OPTION( BUILD_DOC "Build Documentation" OFF )
OPTION( BUILD_TESTS "Build Google Tests" OFF )
OPTION(BUILD_APP "Build GUI Application" ON)
OPTION(BUILD_TOOLS "Build Command Line Application" ON)
OPTION(BUILD_EXAMPLES "Build Examples" OFF)
OPTION(BUILD_DOC "Build Documentation" OFF)
OPTION(BUILD_TESTS "Build Google Tests" OFF)
OPTION(BUILD_TESTS_CATCH2 "Build Catch2 Tests" OFF)
OPTION( USE_FERVOR "Add Fervor support" OFF )
OPTION(USE_FERVOR "Add Fervor support" OFF)
OPTION( USE_DYNLOAD "Use dynamic load of modules" ON )
OPTION( USE_SSE "Build with SSE support" OFF )
OPTION( USE_WERROR "Warnings as errors" OFF )
OPTION( USE_STATIC "Use static libs" OFF )
OPTION(USE_DYNLOAD "Use dynamic load of modules" ON)
OPTION(USE_SSE "Build with SSE support" OFF)
OPTION(USE_WERROR "Warnings as errors" OFF)
OPTION(USE_STATIC "Use static libs" OFF)
######################################################################################
# ####################################################################################################################################################
# Release configuration
######################################################################################
# ####################################################################################################################################################
# To be switched on when releasing.
OPTION(RELEASE_BUILD "Remove Git revision from program version (use for stable releases)" ON)
# Get current version.
set(CALYP_VERSION_STRING "${CALYP_VERSION}")
if(NOT RELEASE_BUILD AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
SET(CALYP_VERSION_STRING "${CALYP_VERSION}")
IF(NOT RELEASE_BUILD AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
# Probably a Git workspace; determine the revision.
FIND_PACKAGE(Git QUIET)
if(GIT_FOUND)
exec_program(${GIT_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}
IF(GIT_FOUND)
EXEC_PROGRAM(
${GIT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}
ARGS "describe --tags"
OUTPUT_VARIABLE CALYP_GIT_REVISION
RETURN_VALUE TAG_RESULT
)
# git describe --tags failed; maybe the repository was checked with depth=1.
if(NOT ${TAG_RESULT} EQUAL 0)
exec_program(${GIT_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}
IF(NOT ${TAG_RESULT} EQUAL 0)
EXEC_PROGRAM(
${GIT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}
ARGS "describe --always"
OUTPUT_VARIABLE CALYP_GIT_REVISION
)
endif()
message(STATUS "Calyp Git revision: ${CALYP_GIT_REVISION}")
set(CALYP_VERSION_STRING "${CALYP_VERSION} (rev. ${CALYP_GIT_REVISION})")
else()
message(STATUS "Calyp Git revision could not be determined")
endif()
endif()
ENDIF()
MESSAGE(STATUS "Calyp Git revision: ${CALYP_GIT_REVISION}")
SET(CALYP_VERSION_STRING "${CALYP_VERSION} (rev. ${CALYP_GIT_REVISION})")
ELSE()
MESSAGE(STATUS "Calyp Git revision could not be determined")
ENDIF()
ENDIF()
SET(UPDATE_CHANNEL "stable" CACHE STRING "Update channel" )
SET(UPDATE_CHANNEL
"stable"
CACHE STRING "Update channel"
)
# CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/CalypUpdate.xml.in ${CMAKE_CURRENT_BINARY_DIR}/CalypUpdate-${UPDATE_CHANNEL}.xml )
######################################################################################
# ####################################################################################################################################################
# Dependencies
######################################################################################
# ####################################################################################################################################################
IF( BUILD_DOC )
IF(BUILD_DOC)
FIND_PACKAGE(Doxygen)
SET( BUILD_DOC ${Doxygen_FOUND} )
SET(BUILD_DOC ${Doxygen_FOUND})
ENDIF()
SET_PACKAGE_PROPERTIES(Doxygen PROPERTIES URL "http://www.doxygen.org/" DESCRIPTION "Doxygen" TYPE OPTIONAL)
SET_PACKAGE_PROPERTIES(
Doxygen PROPERTIES
URL "http://www.doxygen.org/"
DESCRIPTION "Doxygen"
TYPE OPTIONAL
)
IF( BUILD_TESTS )
IF(BUILD_TESTS)
FIND_PACKAGE(GTest)
SET( BUILD_DOC ${GTEST_FOUND} )
IF( GTEST_FOUND )
SET(BUILD_DOC ${GTEST_FOUND})
IF(GTEST_FOUND)
ENABLE_TESTING()
INCLUDE_DIRECTORIES(${GTEST_INCLUDE_DIRS})
ENDIF()
SET(CALYP_TEST_DATA_DIR
"CALYP_TEST_DATA_DIR"
CACHE PATH "Location of video information for testing"
)
ENDIF()
OPTION( USE_OPENCV "Add OpenCV support" ON )
IF( USE_OPENCV )
LIST(APPEND OPENCV_MODULES core highgui imgproc video videoio )
FIND_PACKAGE( OpenCV COMPONENTS ${OPENCV_MODULES} )
SET(USE_OPENCV ${OpenCV_FOUND})
IF(BUILD_TESTS_CATCH2)
FIND_PACKAGE(Catch2 REQUIRED)
ENABLE_TESTING()
SET_PACKAGE_PROPERTIES(
Catch2 PROPERTIES
URL "https://github.com/catchorg/Catch2"
DESCRIPTION "Catch2 unit tests"
TYPE OPTIONAL
)
ENDIF()
SET_PACKAGE_PROPERTIES(OpenCV PROPERTIES URL "http://opencv.willowgarage.com" DESCRIPTION "OpenCV library support in CalypFrame" TYPE OPTIONAL)
OPTION( USE_FFMPEG "Add FFMPEG support" ON )
IF( USE_FFMPEG )
FIND_PACKAGE( FFmpeg COMPONENTS AVCODEC AVFORMAT AVUTIL SWSCALE )
IF( "${AVCODEC_VERSION}" VERSION_LESS "56.0.0" )
SET(FFMPEG_FOUND FALSE )
SET(FFmpeg_FOUND FALSE )
OPTION(USE_OPENCV "Add OpenCV support" ON)
IF(USE_OPENCV)
FIND_PACKAGE(OpenCV COMPONENTS core highgui imgproc video)
IF(${OpenCV_FOUND})
SET(USE_OPENCV TRUE)
LIST(APPEND OPENCV_MODULES core highgui imgproc video)
FIND_PACKAGE(OpenCV COMPONENTS videoio photo)
IF(${OPENCV_VIDEOIO_FOUND})
LIST(APPEND OPENCV_MODULES videoio)
ENDIF()
IF(${OPENCV_PHOTO_FOUND})
LIST(APPEND OPENCV_MODULES photo)
ENDIF()
ELSE()
SET(USE_OPENCV FALSE)
ENDIF()
ENDIF()
SET_PACKAGE_PROPERTIES(
OpenCV PROPERTIES
URL "http://opencv.willowgarage.com"
DESCRIPTION "OpenCV library support in CalypFrame"
TYPE OPTIONAL
)
OPTION(USE_FFMPEG "Add FFMPEG support" ON)
IF(USE_FFMPEG)
FIND_PACKAGE(FFmpeg COMPONENTS AVCODEC AVFORMAT AVUTIL SWSCALE)
SET(USE_FFMPEG ${FFMPEG_FOUND})
ENDIF()
SET_PACKAGE_PROPERTIES(FFmpeg PROPERTIES URL "http://ffmpeg.org/" DESCRIPTION "Libav library support in CalypStream" TYPE OPTIONAL)
SET_PACKAGE_PROPERTIES(
FFmpeg PROPERTIES
URL "http://ffmpeg.org/"
DESCRIPTION "Libav library support in CalypStream"
TYPE OPTIONAL
)
IF( WIN32 )
SET( USE_STATIC ON )
INCLUDE( cmake/Win32.cmake )
IF(WIN32)
SET(USE_STATIC ON)
INCLUDE(cmake/Win32.cmake)
ENDIF()
######################################################################################
# ####################################################################################################################################################
# CMake Defin1itions
######################################################################################
# ####################################################################################################################################################
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake )
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
INCLUDE(FeatureSummary)
# must go before the project command
SET(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
SET(CMAKE_CONFIGURATION_TYPES
"Debug;Release"
CACHE STRING "Configs" FORCE
)
IF(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8")
SET_PROPERTY( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES})
ENDIF()
SET( CMAKE_CXX_FLAGS "" )
SET(CMAKE_CXX_FLAGS "")
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} )
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
######################################################################################
# ####################################################################################################################################################
# Compiler options
######################################################################################
# ####################################################################################################################################################
SET(CMAKE_CXX_STANDARD 14)
if(CMAKE_COMPILER_IS_GNUCXX)
ADD_DEFINITIONS(-std=gnu++0x)
endif()
IF (NOT CMAKE_BUILD_TYPE )
MESSAGE(STATUS "No build type selected, default to Release")
SET(CMAKE_BUILD_TYPE "Release")
IF(CMAKE_COMPILER_IS_GNUCXX)
ADD_DEFINITIONS(-std=gnu++0x)
ENDIF()
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" )
ADD_DEFINITIONS(-DQT_NO_CAST_TO_ASCII
#-DQT_NO_CAST_FROM_ASCII
-DQT_NO_URL_CAST_FROM_STRING
-DQT_NO_CAST_FROM_BYTEARRAY
#-DQT_NO_SIGNALS_SLOTS_KEYWORDS
#-DQT_USE_QSTRINGBUILDER
)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0.0")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wlogical-op" )
endif()
endif()
IF( USE_WERROR )
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror" )
IF(NOT CMAKE_BUILD_TYPE)
MESSAGE(STATUS "No build type selected, default to Release")
SET(CMAKE_BUILD_TYPE "Release")
ENDIF()
SET( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0" )
SET( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2" )
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
ADD_DEFINITIONS(
-DQT_NO_CAST_TO_ASCII
# -DQT_NO_CAST_FROM_ASCII
-DQT_NO_URL_CAST_FROM_STRING
-DQT_NO_CAST_FROM_BYTEARRAY
# -DQT_NO_SIGNALS_SLOTS_KEYWORDS -DQT_USE_QSTRINGBUILDER
)
######################################################################################
# if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic") endif()
IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
IF(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0.0")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wlogical-op")
ENDIF()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
ENDIF()
IF(USE_WERROR)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
ENDIF()
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2")
# ####################################################################################################################################################
# Configure targets
######################################################################################
# ####################################################################################################################################################
ADD_FEATURE_INFO(CalypApp BUILD_APP "Build Graphical interface")
ADD_FEATURE_INFO(CalypTools BUILD_TOOLS "Build Command line tool" )
ADD_FEATURE_INFO(DynLoad USE_DYNLOAD "Support for dynamic module load" )
ADD_FEATURE_INFO(SSE USE_SSE "SSE instructions support" )
ADD_FEATURE_INFO(WErrors USE_WERROR "Warnings as errors" )
ADD_FEATURE_INFO(CalypApp BUILD_APP "Build Graphical interface")
ADD_FEATURE_INFO(CalypTools BUILD_TOOLS "Build Command line tool")
ADD_FEATURE_INFO(DynLoad USE_DYNLOAD "Support for dynamic module load")
ADD_FEATURE_INFO(SSE USE_SSE "SSE instructions support")
ADD_FEATURE_INFO(WErrors USE_WERROR "Warnings as errors")
ADD_SUBDIRECTORY( lib )
ADD_SUBDIRECTORY( modules )
ADD_SUBDIRECTORY(lib)
ADD_SUBDIRECTORY(modules)
IF( ${BUILD_TOOLS} )
ADD_SUBDIRECTORY( tools )
IF(${BUILD_TOOLS})
ADD_SUBDIRECTORY(tools)
ENDIF()
IF( ${BUILD_APP} )
ADD_SUBDIRECTORY( app )
IF(${BUILD_APP})
ADD_SUBDIRECTORY(app)
ENDIF()
IF( ${BUILD_EXAMPLES} )
ADD_SUBDIRECTORY( examples )
IF(${BUILD_EXAMPLES})
ADD_SUBDIRECTORY(examples)
ENDIF()
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h )
######################################################################################
# ####################################################################################################################################################
# Final information dump
######################################################################################
# ####################################################################################################################################################
MESSAGE("")
MESSAGE( STATUS "${PROJECT_NAME} INFORMATION" )
MESSAGE( STATUS "Version: " "${CALYP_VERSION_STRING}" )
MESSAGE( STATUS "Configuration:" )
MESSAGE( STATUS " Static libs: " "${USE_STATIC}" )
MESSAGE( STATUS " Build type: " "${CMAKE_BUILD_TYPE}" )
MESSAGE( STATUS " Build flags: " "${CMAKE_CXX_FLAGS}" )
MESSAGE(STATUS "${PROJECT_NAME} INFORMATION")
MESSAGE(STATUS "Version: " "${CALYP_VERSION_STRING}")
MESSAGE(STATUS "Configuration:")
MESSAGE(STATUS " Static libs: " "${USE_STATIC}")
MESSAGE(STATUS " Build type: " "${CMAKE_BUILD_TYPE}")
MESSAGE(STATUS " Build flags: " "${CMAKE_CXX_FLAGS}")
FEATURE_SUMMARY(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
+12 -36
View File
@@ -27,19 +27,21 @@ Modules
Supported Quality Metrics
----------------------------------------------------------------
- PSNR
- SSIM
- MSE
- Peak Signal-to-Noise Ratio (PSNR)
- Structural SIMilarity (SSIM)
- Mean Square Error (MSE)
- Weighted Spherical PSNR (WS-PSNR)
Frame Processing Modules
----------------------------------------------------------------
- Component filtering
- Frame difference, crop, shift, binarization
- Frame difference, crop, shift, binarization and rotation
- Sub-sampling operations
- Measuring modules
- Modules based on opencv:
* Disparity estimation
* Motion estimation
- Disparity estimation
- Motion estimation
Supported Formats
----------------------------------------------------------------
@@ -62,35 +64,9 @@ Supported Formats
Developers
----------------------------------------------------------------
- Joao Carreira (jfmcarreira@gmail.com)
- Lui­s Lucas (luisfrlucas@gmail.com)
Builds
----------------------------------------------------------------
Download update build for windows and linux from our <a href="https://sourceforge.net/projects/playuver/">SourceForge project page</a>
Build/Install using cmake
----------------------------------------------------------------
1. The following are required for compilation:
- an ordinary C++ development environment (g++, make, C++ libraries and headers, ...)
- cmake
- a Qt development environment (libraries, headers, qmake, ...): only QtCore, QtGui and QtWidgets are required, at least in version 4
2. Optional Dependencies:
- QtDBus
- OpenCv
- FFmpeg
3. Run the following commands: (this will create an executable named calyp)
```
mkdir build
cd build
cmake -DUSE_QT4=OFF -DUSE_FFMPEG=ON -DUSE_OPENCV=ON .. (for FFmpeg and OpenCV support)
make
make install
```
- [**Joao Carreira**](https://github.com/jfmcarreira) (Founder, Main Developer)
- [**Lui­s Lucas** ](https://github.com/lfrlucas) (Founder, Developer)
- [**Joao Santos** ](https://github.com/jpataias) (Contributor)
- [**JNSFilipe** ](https://github.com/JNSFilipe) (Contributor)
*/
+17 -8
View File
@@ -1,6 +1,12 @@
# Calyp
## Enhanced YUV video player based on Qt focusing on image/video analysis
## Build Status
Master branch | Development branch
------------ | -------------
[![Linux Status](https://travis-ci.org/pixlra/calyp.svg?branch=master)](https://travis-ci.org/pixlra/calyp.svg?branch=master) [![Windows status](https://ci.appveyor.com/api/projects/status/ea2ktvtg7uqwrika/branch/master?svg=true)](https://ci.appveyor.com/project/jfmcarreira/calyp/branch/master) | Comming soon!
## Features
- Support for libavformat and libavcodec;
@@ -23,9 +29,10 @@
- CalypTools: High level command line interface
## Supported Quality Metrics
- PSNR
- SSIM
- MSE
- Peak Signal-to-Noise Ratio (PSNR)
- Structural SIMilarity (SSIM)
- Mean Square Error (MSE)
- Weighted Spherical PSNR (WS-PSNR)
## Frame Processing Modules
- Component filtering
@@ -53,14 +60,16 @@
* Windows Bitmap (bmp)
* Tagged Image File Format (tiff)
## Developers
- **Joao Carreira** (jfmcarreira@gmail.com)
- **Lui­s Lucas** (luisfrlucas@gmail.com)
## Development Team
- [**Joao Carreira**](https://github.com/jfmcarreira) (Founder, Main Developer)
- [**Lui­s Lucas** ](https://github.com/lfrlucas) (Founder, Developer)
- [**Joao Santos** ](https://github.com/jpataias) (Contributor)
- [**JNSFilipe** ](https://github.com/JNSFilipe) (Contributor)
### Binaries and Build
* Packages are available for [Debian](https://launchpad.net/~pixlra/+archive/ubuntu/ppa) and [openSUSE](https://software.opensuse.org/package/playuver)
* **Daily builds** available for Windows and Linux in our [SourceForge page](https://sourceforge.net/projects/playuver/)
* Packages are available for [Debian](https://launchpad.net/~pixlra/+archive/ubuntu/ppa)
* **Daily builds** available for [Windows](https://github.com/pixlra/calyp-releases/blob/master/installers/win/calyp-latest.exe)
* **Dependencies**
1. an ordinary C++ development environment (g++, make, C++ libraries and headers, ...)
2. cmake
+80 -73
View File
@@ -1,148 +1,155 @@
###
### CMakeLists for calyp app component
###
#
# CMakeLists for calyp app component
#
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/external
${CMAKE_CURRENT_SOURCE_DIR}/dialog
${CMAKE_CURRENT_SOURCE_DIR}/docks
${CMAKE_CURRENT_SOURCE_DIR}/widgets )
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/external ${CMAKE_CURRENT_SOURCE_DIR}/dialog ${CMAKE_CURRENT_SOURCE_DIR}/docks
${CMAKE_CURRENT_SOURCE_DIR}/widgets
)
OPTION( USE_QTDBUS "Build with QtDBus" ON )
OPTION( USE_FERVOR "Add Fervor support" OFF )
OPTION(USE_QTDBUS "Build with QtDBus" ON)
OPTION(USE_FERVOR "Add Fervor support" OFF)
ADD_SUBDIRECTORY( external )
ADD_SUBDIRECTORY(external)
FIND_PACKAGE( Qt5 REQUIRED COMPONENTS Core Gui Widgets Concurrent )
LIST(APPEND QT_LINKER_LIBS Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Concurrent )
LIST(APPEND QT_MODULES Core Gui Widgets Concurrent )
FIND_PACKAGE(Qt5 REQUIRED COMPONENTS Core Gui Widgets Concurrent)
LIST(APPEND QT_LINKER_LIBS Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Concurrent)
LIST(APPEND QT_MODULES Core Gui Widgets Concurrent)
IF( USE_QTDBUS )
FIND_PACKAGE( Qt5DBus )
SET_PACKAGE_PROPERTIES(Qt5DBus PROPERTIES DESCRIPTION "Support for Qt5 DBus messages between instances" TYPE OPTIONAL )
IF( ${Qt5DBus_FOUND} )
SET( USE_QTDBUS ${Qt5DBus_FOUND} ) # TODO: fix this stupid variable
SET( USE_QTDBUS ${Qt5DBus_FOUND} PARENT_SCOPE)
LIST(APPEND QT_LINKER_LIBS Qt5::DBus )
LIST(APPEND QT_MODULES DBus )
IF(USE_QTDBUS)
FIND_PACKAGE(Qt5DBus)
SET_PACKAGE_PROPERTIES(
Qt5DBus PROPERTIES
DESCRIPTION "Support for Qt5 DBus messages between instances"
TYPE OPTIONAL
)
IF(${Qt5DBus_FOUND})
SET(USE_QTDBUS ${Qt5DBus_FOUND}) # TODO: fix this stupid variable
SET(USE_QTDBUS
${Qt5DBus_FOUND}
PARENT_SCOPE
)
LIST(APPEND QT_LINKER_LIBS Qt5::DBus)
LIST(APPEND QT_MODULES DBus)
ENDIF()
ENDIF()
set(Calyp_App_SRCS
# Main
SET(Calyp_App_SRCS
# Main
main.cpp
MainWindow.cpp
# Module SubWindow
# Module SubWindow
SubWindowHandle.cpp
MdiSubWindow.cpp
SubWindowAbstract.cpp
# Module Video
# Module Video
VideoHandle.cpp
VideoSubWindow.cpp
ViewArea.cpp
GridManager.cpp
# Module Quality
# Module Quality
QualityHandle.cpp
PlotSubWindow.cpp
external/qcustomplot/qcustomplot.cpp
# Module Plugins
# Module Plugins
ModulesHandle.cpp
CalypAppModuleIf.cpp
# Dialogs
# Dialogs
dialog/AboutDialog.cpp
dialog/ConfigureFormatDialog.cpp
dialog/SubWindowSelectorDialog.cpp
dialog/ProgressBar.cpp
dialog/SeekStreamDialog.cpp
dialog/ModulesHandleOptDialog.cpp
# Widgets
# Widgets
widgets/HistogramWidget.cpp
widgets/FrameNumberWidget.cpp
# Docks
# Docks
docks/FramePropertiesDock.cpp
docks/ModuleHandleDock.cpp
docks/QualityMeasurementSidebar.cpp
)
IF( USE_QTDBUS )
LIST( APPEND Calyp_App_SRCS DBusAppAdaptor.cpp )
IF(USE_QTDBUS)
LIST(APPEND Calyp_App_SRCS DBusAppAdaptor.cpp)
ENDIF()
SET(Calyp_App_UI "")
set(Calyp_App_UI "" )
SET(Calyp_App_RCC resources/${PROJECT_NAME}.qrc)
set(Calyp_App_RCC
resources/${PROJECT_NAME}.qrc
)
IF(USE_FERVOR)
SET(FERVOR_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external/fervor)
IF( USE_FERVOR )
IF(EXISTS ${FERVOR_DIR})
SET( FERVOR_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external/fervor )
SET(FERVOR_APP_NAME ${PROJECT_NAME})
SET(FERVOR_APP_VERSION ${CALYP_VERSION_STRING})
IF(EXISTS ${FERVOR_DIR} )
ADD_SUBDIRECTORY(${FERVOR_DIR})
SET( FERVOR_APP_NAME ${PROJECT_NAME} )
SET( FERVOR_APP_VERSION ${CALYP_VERSION_STRING} )
INCLUDE_DIRECTORIES(${FERVOR_DIR})
ADD_SUBDIRECTORY( ${FERVOR_DIR} )
LIST(APPEND APP_LINKER_LIBS Fervor)
INCLUDE_DIRECTORIES( ${FERVOR_DIR} )
FIND_PACKAGE(Qt5 REQUIRED Network WebKit WebKitWidgets)
LIST(APPEND APP_LINKER_LIBS Fervor )
LIST(APPEND QT_LINKER_LIBS Qt5::Network Qt5::WebKit Qt5::WebKitWidgets)
LIST(APPEND QT_MODULES Network WebKit WebKitWidgets)
FIND_PACKAGE( Qt5 REQUIRED Network WebKit WebKitWidgets )
LIST(APPEND QT_LINKER_LIBS Qt5::Network Qt5::WebKit Qt5::WebKitWidgets )
LIST(APPEND QT_MODULES Network WebKit WebKitWidgets )
# LIST(APPEND APP_LINKER_LIBS ${FERVOR_DEPENDENCIES} )
INCLUDE_DIRECTORIES( ${FERVOR_INCLUDE_DIRS} )
# LIST(APPEND APP_LINKER_LIBS ${FERVOR_DEPENDENCIES} )
INCLUDE_DIRECTORIES(${FERVOR_INCLUDE_DIRS})
SET(QT_USE_QTNETWORK true)
SET(QT_USE_QTWEBKIT true)
ELSE()
MESSAGE( "Fervor lib source code is not find in ${FERVOR_DIR}... Disabling it!" )
SET( USE_FERVOR False )
MESSAGE("Fervor lib source code is not find in ${FERVOR_DIR}... Disabling it!")
SET(USE_FERVOR False)
ENDIF()
ENDIF()
SET_PACKAGE_PROPERTIES(Fervor PROPERTIES URL "https://github.com/pypt/fervor" DESCRIPTION "Fervor lib includes check for updates feature" TYPE OPTIONAL )
SET_PACKAGE_PROPERTIES(
Fervor PROPERTIES
URL "https://github.com/pypt/fervor"
DESCRIPTION "Fervor lib includes check for updates feature"
TYPE OPTIONAL
)
ADD_FEATURE_INFO(Fervor USE_FERVOR "Fervor lib includes check for updates feature.")
QT5_WRAP_UI( Calyp_App_UI_Wrap ${Calyp_App_UI} )
QT5_ADD_RESOURCES( Calyp_App_RCC ${Calyp_App_RCC} )
QT5_WRAP_UI(Calyp_App_UI_Wrap ${Calyp_App_UI})
QT5_ADD_RESOURCES(Calyp_App_RCC ${Calyp_App_RCC})
# Instruct CMake to run moc automatically when needed.
SET( CMAKE_AUTOMOC ON )
SET(CMAKE_AUTOMOC ON)
# Windows application icon
IF( WIN32 )
set(WINDOWS_RES_FILE ${CMAKE_CURRENT_BINARY_DIR}/resources.obj)
IF( MSVC )
add_custom_command(OUTPUT ${WINDOWS_RES_FILE}
IF(WIN32)
SET(WINDOWS_RES_FILE ${CMAKE_CURRENT_BINARY_DIR}/resources.obj)
IF(MSVC)
ADD_CUSTOM_COMMAND(
OUTPUT ${WINDOWS_RES_FILE}
COMMAND rc.exe /fo ${WINDOWS_RES_FILE} ${PROJECT_NAME}.rc
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/resources
COMMENT "Add icon on windows platform"
)
ELSE()
add_custom_command(OUTPUT ${WINDOWS_RES_FILE}
ADD_CUSTOM_COMMAND(
OUTPUT ${WINDOWS_RES_FILE}
COMMAND windres.exe ${PROJECT_NAME}.rc ${WINDOWS_RES_FILE}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/resources
COMMENT "Add icon on windows platform"
)
ENDIF()
ENDIF()
ADD_EXECUTABLE( ${PROJECT_NAME} ${Calyp_App_SRCS} ${HEADERS_MOC_FILES} ${Calyp_App_UI_Wrap} ${Calyp_App_RCC} ${WINDOWS_RES_FILE} )
TARGET_LINK_LIBRARIES( ${PROJECT_NAME} ${PROJECT_LIBRARY} CalypModules ${APP_LINKER_LIBS} ${QT_LINKER_LIBS} QCustomPlotLib )
ADD_EXECUTABLE(${PROJECT_NAME} ${Calyp_App_SRCS} ${HEADERS_MOC_FILES} ${Calyp_App_UI_Wrap} ${Calyp_App_RCC} ${WINDOWS_RES_FILE})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PROJECT_LIBRARY} CalypModules ${APP_LINKER_LIBS} ${QT_LINKER_LIBS} QCustomPlotLib)
# QT5_USE_MODULES( ${PROJECT_NAME} ${QT_MODULES} )
INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin )
INSTALL(FILES resources/calyp.desktop DESTINATION share/applications )
INSTALL(FILES resources/calyp.png DESTINATION share/pixmaps )
INSTALL(FILES resources/calyp.xml DESTINATION share/mime/packages )
INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
INSTALL(FILES resources/calyp.desktop DESTINATION share/applications)
INSTALL(FILES resources/calyp.png DESTINATION share/pixmaps)
INSTALL(FILES resources/calyp.xml DESTINATION share/mime/packages)
+5 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,12 +24,12 @@
#include "CalypAppModuleIf.h"
#include "VideoSubWindow.h"
#include <QAction>
#include <QApplication>
#include <QDockWidget>
#include "VideoSubWindow.h"
CalypAppModuleIf::CalypAppModuleIf( QObject* parent, QAction* action, CalypModuleIf* module )
: m_bIsRunning( false )
, m_pcModuleAction( action )
@@ -125,7 +125,7 @@ void CalypAppModuleIf::run()
if( m_pcModule->m_iModuleType == CLP_FRAME_PROCESSING_MODULE )
{
if( m_pcModule->m_iModuleAPI == CLP_MODULE_API_2 )
if( m_pcModule->m_iModuleAPI >= CLP_MODULE_API_2 )
{
m_pcProcessedFrame = m_pcModule->process( apcFrameList );
}
@@ -136,7 +136,7 @@ void CalypAppModuleIf::run()
}
else if( m_pcModule->m_iModuleType == CLP_FRAME_MEASUREMENT_MODULE )
{
if( m_pcModule->m_iModuleAPI == CLP_MODULE_API_2 )
if( m_pcModule->m_iModuleAPI >= CLP_MODULE_API_2 )
{
m_dMeasurementResult = m_pcModule->measure( apcFrameList );
}
+6 -6
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,6 +25,11 @@
#ifndef __CALYPAPPMODULESIF_H__
#define __CALYPAPPMODULESIF_H__
#include <QEvent>
#include <QVector>
#include <cstdio>
#include <iostream>
#include "CommonDefs.h"
#include "ModuleHandleDock.h"
#include "config.h"
@@ -32,11 +37,6 @@
#include "lib/CalypModuleIf.h"
#include "lib/CalypStream.h"
#include <QEvent>
#include <QVector>
#include <cstdio>
#include <iostream>
class QAction;
class QDockWidget;
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -35,8 +35,8 @@ DBusAppAdaptor::DBusAppAdaptor( MainWindow* app )
: QDBusAbstractAdaptor( app ), m_app( app )
{
// application dbus interface
bool isRegistered = QDBusConnection::sessionBus().registerObject( QStringLiteral( CALYP_DBUS_PATH ), this,
QDBusConnection::ExportAllSlots );
bool isRegistered = QDBusConnection::sessionBus().registerObject( QStringLiteral( CALYP_DBUS_PATH ), QStringLiteral( CALYP_DBUS_SESSION_NAME ),
this, QDBusConnection::ExportAllSlots );
Q_ASSERT( isRegistered == true );
}
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
+3 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -71,8 +71,7 @@ void GridManager::drawGrid( QPixmap& image, const QRect& area, QPainter* painter
switch( style )
{
case intersectionDot:
case intersectionCross:
{
case intersectionCross: {
painter->setPen( mainPen );
// Draw crosses or dots on intersections
for( int x = offsetx; x <= area.right(); x += hSpacing )
@@ -99,8 +98,7 @@ void GridManager::drawGrid( QPixmap& image, const QRect& area, QPainter* painter
}
break;
}
case Dashed:
{
case Dashed: {
// Change pen to the dashed line
mainPen.setStyle( Qt::DashLine );
}
+2 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -29,6 +29,7 @@
#include <QColor>
#include <QPen>
#include <QRect>
#include "CommonDefs.h"
#include "config.h"
+12 -12
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
* Joao Santos (joaompssantos@gmail.com)
*
@@ -25,6 +25,15 @@
#include "MainWindow.h"
#include <QAction>
#include <QActionGroup>
#include <QCloseEvent>
#include <QDoubleSpinBox>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QSignalMapper>
#include <QtDebug>
#include "AboutDialog.h"
#include "ModulesHandle.h"
#include "QualityHandle.h"
@@ -34,15 +43,6 @@
#include "VideoHandle.h"
#include "VideoSubWindow.h"
#include "lib/CalypOptions.h"
#include <QAction>
#include <QActionGroup>
#include <QCloseEvent>
#include <QDoubleSpinBox>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QSignalMapper>
#include <QtDebug>
#ifdef USE_FERVOR
#include "fvupdater.h"
#endif
@@ -101,7 +101,7 @@ bool MainWindow::parseArgs( int argc, char* argv[] )
( "size,s", strResolution, "size (WxH)" ) /**/
( "pel_fmt", strPelFmt, "pixel format" );
if( !pcCmdParser.parse( argc, argv ) )
if( pcCmdParser.parse( argc, argv ) < 0 )
{
bRet |= true;
}
@@ -287,7 +287,7 @@ QStringList MainWindow::showFileDialog( bool bRead )
{
QString fileName = QFileDialog::getSaveFileName( this, tr( "Save File" ), m_cLastOpenPath, filter.join( ";;" ) );
if( !fileName.isEmpty() )
fileNameList.append( fileName );
fileNameList.append( fileName );
}
return fileNameList;
}
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,10 +24,10 @@
#include "MdiSubWindow.h"
#include "SubWindowAbstract.h"
#include <QCloseEvent>
#include "SubWindowAbstract.h"
MdiSubWindow::MdiSubWindow( QWidget* parent )
: QMdiSubWindow( parent )
{
+2 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -26,6 +26,7 @@
#define __MDISUBWINDOW_H_
#include <QMdiSubWindow>
#include "CommonDefs.h"
#include "config.h"
+20 -17
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,6 +24,8 @@
#include "ModulesHandle.h"
#include <cstdio>
#include "MainWindow.h"
#include "ModulesHandleOptDialog.h"
#include "SubWindowHandle.h"
@@ -32,8 +34,6 @@
#include "VideoSubWindow.h"
#include "modules/CalypModulesFactory.h"
#include <cstdio>
ModulesHandle::ModulesHandle( QWidget* parent, SubWindowHandle* windowManager, VideoHandle* moduleVideo )
: QWidget( parent ), m_pcParent( parent ), m_pcMainWindowManager( windowManager ), m_appModuleVideo( moduleVideo )
{
@@ -112,20 +112,23 @@ void ModulesHandle::buildMenu()
ModuleIfinternalName = QString::fromLocal8Bit( it->first );
currSubMenu = NULL;
if( pcCurrModuleIf->m_pchModuleCategory )
if( pcCurrModuleIf->m_iModuleAPI <= CLP_MODULE_API_2 )
{
for( int j = 0; j < m_pcModulesSubMenuList.size(); j++ )
if( pcCurrModuleIf->m_pchModuleCategory )
{
if( m_pcModulesSubMenuList.at( j )->title() == QString( pcCurrModuleIf->m_pchModuleCategory ) )
for( int j = 0; j < m_pcModulesSubMenuList.size(); j++ )
{
currSubMenu = m_pcModulesSubMenuList.at( j );
break;
if( m_pcModulesSubMenuList.at( j )->title() == QString( pcCurrModuleIf->m_pchModuleCategory ) )
{
currSubMenu = m_pcModulesSubMenuList.at( j );
break;
}
}
if( !currSubMenu )
{
currSubMenu = m_pcModulesMenu->addMenu( pcCurrModuleIf->m_pchModuleCategory );
m_pcModulesSubMenuList.append( currSubMenu );
}
}
if( !currSubMenu )
{
currSubMenu = m_pcModulesMenu->addMenu( pcCurrModuleIf->m_pchModuleCategory );
m_pcModulesSubMenuList.append( currSubMenu );
}
}
@@ -380,7 +383,7 @@ void ModulesHandle::activateModule()
{
pcModuleSubWindow = new VideoSubWindow( VideoSubWindow::MODULE_SUBWINDOW );
windowName.append( QStringLiteral( "Module " ) );
windowName.append( pcCurrAppModuleIf->m_pcModule->m_pchModuleName );
windowName.append( pcCurrAppModuleIf->m_pcModule->m_pchModuleLongName );
pcCurrAppModuleIf->m_pcDisplaySubWindow = pcModuleSubWindow;
// connect( pcModuleSubWindow->getViewArea(), SIGNAL( selectionChanged( QRect ) ), m_appModuleVideo,
// SLOT( updateSelectionArea( QRect ) ) );
@@ -422,7 +425,7 @@ void ModulesHandle::activateModule()
// Create Module
bool moduleCreated = false;
if( pcCurrAppModuleIf->m_pcModule->m_iModuleAPI == CLP_MODULE_API_2 )
if( pcCurrAppModuleIf->m_pcModule->m_iModuleAPI >= CLP_MODULE_API_2 )
{
std::vector<CalypFrame*> apcFrameList;
for( int i = 0; i < videoSubWindowList.size(); i++ )
@@ -562,8 +565,8 @@ void ModulesHandle::applyAllModuleIf( CalypAppModuleIf* pcCurrModuleIf )
if( pcCurrModuleIf->m_pcModuleStream )
{
unsigned int numberOfWindows = pcCurrModuleIf->m_pcModule->m_uiNumberOfFrames;
unsigned long long int currFrames = 0;
unsigned long long int numberOfFrames = INT_MAX;
ClpULong currFrames = 0;
ClpULong numberOfFrames = -1;
for( unsigned int i = 0; i < numberOfWindows; i++ )
{
currFrames = pcCurrModuleIf->m_pcSubWindow[i]->getInputStream()->getFrameNum();
+4 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,15 +24,14 @@
#ifndef __MODULESHANDLE_H__
#define __MODULESHANDLE_H__
#include "config.h"
#include <QtCore>
#include <QtWidgets>
#include <cstdio>
#include <iostream>
#include <QtCore>
#include <QtWidgets>
#include "CalypAppModuleIf.h"
#include "CommonDefs.h"
#include "config.h"
#include "lib/CalypFrame.h"
class VideoHandle;
+37 -16
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,6 +24,10 @@
#include "PlotSubWindow.h"
#include <QGuiApplication>
#include <QScreen>
#include <QSize>
#include "qcustomplot.h"
//#include "external/qcustomplot/qcustomplot.h"
@@ -114,6 +118,11 @@ PlotSubWindow::PlotSubWindow( const QString& windowTitle, QWidget* parent )
m_cPlotPen.setWidthF( 2 );
setWidget( m_cPlotArea );
m_aAxisRange[AXIS_HORIZONTAL][0] = 99999;
m_aAxisRange[AXIS_HORIZONTAL][1] = 0;
m_aAxisRange[AXIS_VERTICAL][0] = 99999;
m_aAxisRange[AXIS_VERTICAL][1] = 0;
}
PlotSubWindow::~PlotSubWindow()
@@ -123,8 +132,8 @@ PlotSubWindow::~PlotSubWindow()
void PlotSubWindow::normalSize()
{
m_cPlotArea->xAxis->setRange( m_aAxisRange[HORIZONTAL][0], m_aAxisRange[HORIZONTAL][1] );
m_cPlotArea->yAxis->setRange( m_aAxisRange[VERTICAL][0], m_aAxisRange[VERTICAL][1] );
m_cPlotArea->xAxis->setRange( m_aAxisRange[AXIS_HORIZONTAL][0], m_aAxisRange[AXIS_HORIZONTAL][1] );
m_cPlotArea->yAxis->setRange( m_aAxisRange[AXIS_VERTICAL][0], m_aAxisRange[AXIS_VERTICAL][1] );
m_cPlotArea->replot();
m_dScaleFactor = 1;
}
@@ -169,7 +178,7 @@ QSize PlotSubWindow::sizeHint() const
}
else
{
maxSize = QApplication::desktop()->availableGeometry().size();
maxSize = QGuiApplication::screens()[0]->availableGeometry().size();
}
return sizeHint( maxSize );
}
@@ -187,29 +196,43 @@ void PlotSubWindow::setAxisName( const QString& nameAxisX, const QString& nameAx
void PlotSubWindow::setAxisRange( const QLine& axisLimits )
{
setAxisRange( HORIZONTAL, axisLimits.x1(), axisLimits.x2() );
setAxisRange( VERTICAL, axisLimits.y1(), axisLimits.y2() );
setAxisRange( AXIS_HORIZONTAL, axisLimits.x1(), axisLimits.x2() );
setAxisRange( AXIS_VERTICAL, axisLimits.y1(), axisLimits.y2() );
}
void PlotSubWindow::setAxisRange( PlotSubWindow::Axis eAxis, const int& axisStart, const int& axisEnd )
{
if( eAxis == HORIZONTAL )
if( eAxis == AXIS_HORIZONTAL )
{
m_cPlotArea->xAxis->setRange( axisStart, axisEnd );
// horizontalScrollBar()->setRange( axisStart * 100, axisEnd * 100 );
m_aAxisRange[HORIZONTAL][0] = axisStart;
m_aAxisRange[HORIZONTAL][1] = axisEnd;
m_aAxisRange[AXIS_HORIZONTAL][0] = axisStart;
m_aAxisRange[AXIS_HORIZONTAL][1] = axisEnd;
}
if( eAxis == VERTICAL )
if( eAxis == AXIS_VERTICAL )
{
m_cPlotArea->yAxis->setRange( axisStart, axisEnd );
// verticalScrollBar()->setRange( axisStart * 100, axisEnd * 100 );
m_aAxisRange[VERTICAL][0] = axisStart;
m_aAxisRange[VERTICAL][1] = axisEnd;
m_aAxisRange[AXIS_VERTICAL][0] = axisStart;
m_aAxisRange[AXIS_VERTICAL][1] = axisEnd;
}
m_cPlotArea->replot();
}
void PlotSubWindow::appendAxisLimit( PlotSubWindow::Axis eAxis, const int& axisStart, const int& axisEnd )
{
m_aAxisRange[eAxis][0] = std::min<double>( m_aAxisRange[eAxis][0], axisStart );
m_aAxisRange[eAxis][1] = std::max<double>( m_aAxisRange[eAxis][1], axisEnd );
if( eAxis == AXIS_HORIZONTAL )
m_cPlotArea->xAxis->setRange( m_aAxisRange[AXIS_HORIZONTAL][0], m_aAxisRange[AXIS_HORIZONTAL][1] );
if( eAxis == AXIS_VERTICAL )
m_cPlotArea->xAxis->setRange( m_aAxisRange[AXIS_VERTICAL][0], m_aAxisRange[AXIS_VERTICAL][1] );
m_cPlotArea->replot();
}
void PlotSubWindow::addPlot( const QVector<double>& arrayX, const QVector<double>& arrayY, const QString& key )
{
QCPGraph* newPlot = m_cPlotArea->addGraph();
@@ -232,10 +255,8 @@ void PlotSubWindow::addPlot( const QVector<double>& arrayX, const QVector<double
newPlot->setName( key );
}
m_aAxisRange[HORIZONTAL][0] = m_cPlotArea->xAxis->range().lower;
m_aAxisRange[HORIZONTAL][1] = m_cPlotArea->xAxis->range().upper;
m_aAxisRange[VERTICAL][0] = m_cPlotArea->yAxis->range().lower;
m_aAxisRange[VERTICAL][1] = m_cPlotArea->yAxis->range().upper;
appendAxisLimit( AXIS_HORIZONTAL, m_cPlotArea->xAxis->range().lower, m_cPlotArea->xAxis->range().upper );
appendAxisLimit( AXIS_VERTICAL, m_cPlotArea->yAxis->range().lower, m_cPlotArea->yAxis->range().upper );
m_iNumberPlots++;
}
+6 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,12 +25,12 @@
#ifndef __PLOTWINDOWHANDLE_H__
#define __PLOTWINDOWHANDLE_H__
#include <QtWidgets>
#include "CommonDefs.h"
#include "SubWindowAbstract.h"
#include "config.h"
#include <QtWidgets>
class QCustomPlot;
class PlotSubWindow : public SubWindowAbstract
@@ -45,8 +45,8 @@ private:
enum Axis
{
HORIZONTAL,
VERTICAL,
AXIS_HORIZONTAL,
AXIS_VERTICAL,
};
double m_aAxisRange[2][2];
double m_dScaleFactor;
@@ -78,6 +78,7 @@ public:
void setAxisRange( const QLine& axisLimits );
void setAxisRange( PlotSubWindow::Axis eAxis, const int& axisStart, const int& axisEnd );
void appendAxisLimit( PlotSubWindow::Axis eAxis, const int& axisStart, const int& axisEnd );
void setKey( const QString& key );
+29 -25
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,16 +24,16 @@
#include "QualityHandle.h"
#include <QtGui>
#include "PlotSubWindow.h"
#include "ProgressBar.h"
#include "QtConcurrent/qtconcurrentrun.h"
#include "SubWindowHandle.h"
#include "SubWindowSelectorDialog.h"
#include "VideoSubWindow.h"
#include "lib/LibMemory.h"
#include <QtGui>
#include "QtConcurrent/qtconcurrentrun.h"
QualityHandle::QualityHandle( QWidget* parent, SubWindowHandle* windowManager )
: m_pcParet( parent ), m_pcMainWindowManager( windowManager )
{
@@ -156,13 +156,12 @@ void QualityHandle::update( VideoSubWindow* currSubWindow )
void QualityHandle::measureQuality( QVector<VideoSubWindow*> apcWindowList )
{
QVector<double>* padQualityValues;
unsigned int numberOfWindows = apcWindowList.size();
unsigned long long int currFrames = 0;
unsigned long long int numberOfFrames = INT_MAX;
unsigned numberOfWindows = apcWindowList.size();
ClpULong currFrames = 0;
ClpULong numberOfFrames = -1;
//! Check reference window
for( unsigned int i = 0; i < numberOfWindows; i++ )
for( unsigned i = 0; i < numberOfWindows; i++ )
{
if( !apcWindowList.at( i )->getRefSubWindow() )
{
@@ -172,7 +171,7 @@ void QualityHandle::measureQuality( QVector<VideoSubWindow*> apcWindowList )
VideoSubWindow* pcReferenceWindow = apcWindowList.at( 0 )->getRefSubWindow();
numberOfFrames = pcReferenceWindow->getInputStream()->getFrameNum();
for( unsigned int i = 0; i < numberOfWindows; i++ )
for( unsigned i = 0; i < numberOfWindows; i++ )
{
currFrames = apcWindowList.at( i )->getInputStream()->getFrameNum();
if( currFrames < numberOfFrames )
@@ -183,7 +182,14 @@ void QualityHandle::measureQuality( QVector<VideoSubWindow*> apcWindowList )
ProgressBar* pcProgressBar = new ProgressBar( m_pcParet, numberOfFrames );
padQualityValues = new QVector<double>[numberOfWindows + 1];
QVector<double>* padQualityValues = new QVector<double>[numberOfWindows + 1];
double* padAverageQuality = new double[numberOfWindows + 1];
double dCurrentQuality;
for( unsigned i = 0; i < numberOfWindows + 1; i++ )
{
padAverageQuality[i] = 0;
}
CalypFrame* pcReferenceFrame;
CalypFrame* pcCurrFrame;
@@ -194,7 +200,9 @@ void QualityHandle::measureQuality( QVector<VideoSubWindow*> apcWindowList )
for( unsigned int i = 0; i < numberOfWindows; i++ )
{
pcCurrFrame = apcWindowList.at( i )->getCurrFrame();
padQualityValues[i + 1].append( pcCurrFrame->getQuality( m_iQualityMetricIdx, pcReferenceFrame, CLP_LUMA ) );
dCurrentQuality = pcCurrFrame->getQuality( m_iQualityMetricIdx, pcReferenceFrame, CLP_LUMA );
padAverageQuality[i + 1] = ( padAverageQuality[i + 1] * double( f ) + dCurrentQuality ) / double( f + 1 );
padQualityValues[i + 1].append( dCurrentQuality );
apcWindowList.at( i )->seekRelativeEvent( true );
}
pcReferenceWindow->seekRelativeEvent( true );
@@ -206,27 +214,23 @@ void QualityHandle::measureQuality( QVector<VideoSubWindow*> apcWindowList )
}
pcReferenceWindow->stop();
QString qualityName = QString::fromStdString( CalypFrame::supportedQualityMetricsList()[m_iQualityMetricIdx] );
QString qualityUnits = QString::fromStdString( CalypFrame::supportedQualityMetricsUnitsList()[m_iQualityMetricIdx] );
QString plotWindowTitle( QStringLiteral( "Quality" ) );
if( apcWindowList.size() == 1 )
{
plotWindowTitle += " - " + apcWindowList.at( 0 )->getWindowName();
}
PlotSubWindow* pcPlotWindow = new PlotSubWindow( plotWindowTitle );
pcPlotWindow->setAxisName(
"Frame Number", QString::fromStdString( CalypFrame::supportedQualityMetricsList()[m_iQualityMetricIdx] ) );
pcPlotWindow->setAxisName( "Frame Number", QString( "%1 [%2]" ).arg( qualityName ).arg( qualityUnits ) );
if( apcWindowList.size() > 1 )
QString key;
for( unsigned int i = 0; i < numberOfWindows; i++ )
{
QString key;
for( unsigned int i = 0; i < numberOfWindows; i++ )
{
key = apcWindowList.at( i )->getWindowName();
pcPlotWindow->addPlot( padQualityValues[0], padQualityValues[i + 1], key );
}
}
else
{
pcPlotWindow->addPlot( padQualityValues[0], padQualityValues[1] );
key = apcWindowList.at( i )->getWindowName();
key = QString( "[%1 %2] " ).arg( padAverageQuality[i + 1] ).arg( qualityUnits ) + key;
pcPlotWindow->addPlot( padQualityValues[0], padQualityValues[i + 1], key );
}
m_pcMainWindowManager->addSubWindow( pcPlotWindow );
+2 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -27,6 +27,7 @@
#include <QtCore>
#include <QtWidgets>
#include "CommonDefs.h"
#include "QFuture"
#include "QualityMeasurementSidebar.h"
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,14 +24,14 @@
#include "SubWindowAbstract.h"
#include "MdiSubWindow.h"
#include <QCloseEvent>
#include <QFocusEvent>
#include <QHBoxLayout>
#include <QIcon>
#include <QScrollBar>
#include "MdiSubWindow.h"
SubWindowAbstract::SubWindowAbstract( QWidget* parent, unsigned int category )
: QWidget( parent ), m_cSubWindow( NULL )
{
+2 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -41,6 +41,7 @@
#include <QSize>
#include <QString>
#include <QWidget>
#include "CommonDefs.h"
#include "config.h"
+14 -10
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
* Joao Santos (joaompssantos@gmail.com)
*
@@ -25,22 +25,24 @@
#include "SubWindowHandle.h"
#include "MainWindow.h"
#include "MdiSubWindow.h"
#include "SubWindowAbstract.h"
#include <QAction>
#include <QActionGroup>
#include <QApplication>
#include <QDesktopWidget>
#include <QGuiApplication>
#include <QHBoxLayout>
#include <QMdiArea>
#include <QMenu>
#include <QPainter>
#include <QScreen>
#include <QSettings>
#include <QSignalMapper>
#include <QStyle>
#include "MainWindow.h"
#include "MdiSubWindow.h"
#include "SubWindowAbstract.h"
class MdiArea : public QMdiArea
{
public:
@@ -154,7 +156,7 @@ void SubWindowHandle::setWindowMode( int iWindowMode )
parentWidget()->update();
m_pcApp->showNormal();
qApp->processEvents();
QSize screenSize = QApplication::desktop()->availableGeometry().size();
QSize screenSize = QGuiApplication::screens()[0]->availableGeometry().size();
m_pcApp->move( 0, 0 );
m_pcApp->resize( screenSize.width(), 5 );
m_pcApp->setWindowTitle( QApplication::applicationName() );
@@ -230,12 +232,14 @@ void SubWindowHandle::addMdiSubWindow( SubWindowAbstract* window )
SLOT( removeMdiSubWindow( MdiSubWindow* ) ) );
}
void SubWindowHandle::addSubWindow( SubWindowAbstract* window, Qt::WindowFlags flags )
void SubWindowHandle::addSubWindow( SubWindowAbstract* window )
{
if( window )
{
connect( window, SIGNAL( updateStatusBar( const QString& ) ), m_pcApp, SLOT( printMessage( const QString& ) ) );
connect( window, SIGNAL( zoomFactorChanged( const double, const QPoint ) ), m_pcApp, SLOT( updateZoomFactorSBox() ) );
connect( window, SIGNAL( updateStatusBar( const QString& ) ), m_pcApp,
SLOT( printMessage( const QString& ) ) );
connect( window, SIGNAL( zoomFactorChanged( const double, const QPoint ) ), m_pcApp,
SLOT( updateZoomFactorSBox() ) );
if( m_iWindowMode == DETACHEDSUBWINDOWMODE )
{
connect( window, SIGNAL( aboutToActivate( SubWindowAbstract* ) ), this,
@@ -378,7 +382,7 @@ void SubWindowHandle::tileSubWindows()
if( m_iWindowMode == DETACHEDSUBWINDOWMODE )
{
QSize screenSize = QApplication::desktop()->availableGeometry().size();
QSize screenSize = QGuiApplication::screens()[0]->availableGeometry().size();
unsigned int minWindowsInRow = 1;
while( ( screenSize.width() / minWindowsInRow ) > 500 )
{
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,12 +25,12 @@
#ifndef __SUBWINDOWHANDLE_H__
#define __SUBWINDOWHANDLE_H__
#include "CommonDefs.h"
#include <QString>
#include <QVector>
#include <QWidget>
#include "CommonDefs.h"
class QAction;
class QActionGroup;
class QHBoxLayout;
@@ -51,7 +51,7 @@ public:
void processLogMsg( const QString& msg );
void addSubWindow( SubWindowAbstract* widget, Qt::WindowFlags flags = 0 );
void addSubWindow( SubWindowAbstract* widget );
SubWindowAbstract* activeSubWindow() const;
+14 -14
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,14 +24,6 @@
#include "VideoHandle.h"
#include "FrameNumberWidget.h"
#include "FramePropertiesDock.h"
#include "MainWindow.h"
#include "SeekStreamDialog.h"
#include "SubWindowHandle.h"
#include "SubWindowSelectorDialog.h"
#include "VideoSubWindow.h"
#include <QDockWidget>
#include <QElapsedTimer>
#include <QLabel>
@@ -39,6 +31,14 @@
#include <QSlider>
#include <QToolBar>
#include <QtGui>
#include "FrameNumberWidget.h"
#include "FramePropertiesDock.h"
#include "MainWindow.h"
#include "SeekStreamDialog.h"
#include "SubWindowHandle.h"
#include "SubWindowSelectorDialog.h"
#include "VideoSubWindow.h"
#if( _CONTROL_PLAYING_TIME_ == 1 )
#include <QElapsedTimer>
#endif
@@ -320,8 +320,8 @@ void VideoHandle::update()
CalypStream* pcStream = m_pcCurrentVideoSubWindow->getInputStream();
CalypFrame* pcFrame = m_pcCurrentVideoSubWindow->getCurrFrame();
int frame_num = 0;
unsigned long long int total_frame_num = 1;
unsigned long frame_num = 0;
unsigned long total_frame_num = 1;
m_pcVideoFormatLabel->setText( m_pcCurrentVideoSubWindow->getStreamInformation() );
@@ -519,10 +519,10 @@ void VideoHandle::moveAllScrollBars( const double& horRatio, const double& verRa
}
#endif
unsigned long long int VideoHandle::getMaxFrameNumber()
unsigned long VideoHandle::getMaxFrameNumber()
{
unsigned int currFrames;
unsigned long long int maxFrames = INT_MAX;
unsigned long currFrames;
unsigned long maxFrames = INT_MAX;
if( m_pcCurrentVideoSubWindow )
{
if( m_acPlayingSubWindows.contains( m_pcCurrentVideoSubWindow ) )
+6 -6
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,16 +25,16 @@
#ifndef __VIDEOHANDLE_H__
#define __VIDEOHANDLE_H__
#include "CommonDefs.h"
#include "config.h"
#include <QMenu>
#include <QPoint>
#include <QThread>
#include <QVector>
#include <QWidget>
#define _CONTROL_PLAYING_TIME_ 1
#include "CommonDefs.h"
#include "config.h"
//#define _CONTROL_PLAYING_TIME_ 1
class QToolBar;
class QDockWidget;
@@ -128,7 +128,7 @@ private:
QElapsedTimer* m_pcPlayControlTimer;
#endif
unsigned long long int getMaxFrameNumber();
unsigned long getMaxFrameNumber();
void setTimerStatus();
Q_SIGNALS:
+73 -16
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -23,15 +23,17 @@
*/
#include "VideoSubWindow.h"
#include <QScrollArea>
#include <QSettings>
#include <QStaticText>
#include <cassert>
#include "ConfigureFormatDialog.h"
#include "ModulesHandle.h"
#include "QtConcurrent/qtconcurrentrun.h"
#include "SubWindowAbstract.h"
#include <cassert>
#define QT_NO_CONCURRENT
/**
@@ -257,7 +259,7 @@ QSize VideoSubWindow::sizeHint() const
}
else
{
maxSize = QApplication::desktop()->availableGeometry().size();
maxSize = QGuiApplication::screens()[0]->availableGeometry().size();
}
return sizeHint( maxSize );
}
@@ -311,8 +313,9 @@ bool VideoSubWindow::loadFile( QString cFilename, bool bForceDialog )
{
ConfigureFormatDialog formatDialog( this );
unsigned int Width = 0, Height = 0, BitsPel = 8, FrameRate = 30;
int Endianness = CLP_BIG_ENDIAN;
int Endianness = CLP_LITTLE_ENDIAN;
int InputFormat = CLP_YUV420P;
QSettings appSettings;
if( m_pCurrStream )
m_pCurrStream->getFormat( Width, Height, InputFormat, BitsPel, Endianness, FrameRate );
@@ -321,8 +324,18 @@ bool VideoSubWindow::loadFile( QString cFilename, bool bForceDialog )
{
m_pCurrStream = new CalypStream;
}
bool bConfig = guessFormat( cFilename, Width, Height, InputFormat, BitsPel, Endianness ) || bForceDialog;
bool bConfig = true;
if( !bForceDialog )
{
bConfig = guessFormat( cFilename, Width, Height, InputFormat, BitsPel, Endianness, FrameRate );
if( bConfig )
{
// Pre-load values with last opened file
Width = appSettings.value( "VideoSubWindow/LastWidth" ).value<unsigned int>();
Height = appSettings.value( "VideoSubWindow/LastHeight" ).value<unsigned int>();
BitsPel = appSettings.value( "VideoSubWindow/LastBitsPerPixel" ).value<unsigned int>();
}
}
bool bRet = false;
for( int iPass = 0; iPass < 2 && !bRet; iPass++ )
{
@@ -334,8 +347,15 @@ bool VideoSubWindow::loadFile( QString cFilename, bool bForceDialog )
return false;
}
}
bRet = m_pCurrStream->open( cFilename.toStdString(), Width, Height, InputFormat, BitsPel, Endianness, FrameRate,
true );
try
{
bRet = m_pCurrStream->open( cFilename.toStdString(), Width, Height, InputFormat, BitsPel, Endianness, FrameRate, true );
}
catch( CalypFailure& e )
{
if( iPass == 1 )
throw( e );
}
}
m_sStreamInfo.m_cFilename = cFilename;
@@ -347,6 +367,14 @@ bool VideoSubWindow::loadFile( QString cFilename, bool bForceDialog )
m_sStreamInfo.m_uiFrameRate = FrameRate;
m_sStreamInfo.m_uiFileSize = QFileInfo( cFilename ).size();
QVariant var;
var.setValue<unsigned int>( Width );
appSettings.setValue( "VideoSubWindow/LastWidth", var );
var.setValue<unsigned int>( Height );
appSettings.setValue( "VideoSubWindow/LastHeight", var );
var.setValue<unsigned int>( BitsPel );
appSettings.setValue( "VideoSubWindow/LastBitsPerPixel", var );
QApplication::restoreOverrideCursor();
refreshFrame();
@@ -404,7 +432,8 @@ void VideoSubWindow::updateVideoWindowInfo()
}
if( m_pcCurrentDisplayModule->getModuleRequirements() & CLP_MODULES_HAS_INFO )
{
windowInfoList.append( QString::fromStdString( m_pcCurrentDisplayModule->moduleInfo() ) );
QStringList list = QString::fromStdString( m_pcCurrentDisplayModule->moduleInfo() ).split( '\n' );
windowInfoList.append( list );
}
// qDebug( ) << sourceWindowList;
if( windowInfoList.size() > 0 )
@@ -435,7 +464,7 @@ void VideoSubWindow::updateVideoWindowInfo()
}
bool VideoSubWindow::guessFormat( QString filename, unsigned int& rWidth, unsigned int& rHeight, int& rInputFormat, unsigned int& rBitsPerPixel,
int& rEndianness )
int& rEndianness, unsigned int& rFrameRate )
{
std::vector<CalypStandardResolution> stdResList = CalypStream::stdResolutionSizes();
bool bGuessed = true;
@@ -480,10 +509,11 @@ bool VideoSubWindow::guessFormat( QString filename, unsigned int& rWidth, unsign
}
// Guess resolution - match %dx%d
QRegularExpressionMatch resolutionMatch = QRegularExpression( "_\\d*x\\d*" ).match( FilenameShort );
//QRegularExpressionMatch resolutionMatch = QRegularExpression( "_\\d*x\\d*" ).match( FilenameShort );
QRegularExpressionMatch resolutionMatch = QRegularExpression( "_[0-9]+x[0-9]+" ).match( FilenameShort );
if( resolutionMatch.hasMatch() )
{
QString resolutionString = resolutionMatch.captured( 0 );
QString resolutionString = resolutionMatch.captured( resolutionMatch.lastCapturedIndex() );
if( resolutionString.startsWith( "_" ) || resolutionString.endsWith( "_" ) )
{
resolutionString.remove( "_" );
@@ -528,11 +558,12 @@ bool VideoSubWindow::guessFormat( QString filename, unsigned int& rWidth, unsign
}
}
// [.|_]
// Guess bits per pixel - match %dbpp
QRegularExpressionMatch BppMatch = QRegularExpression( "_\\d*bpp" ).match( FilenameShort );
QRegularExpressionMatch BppMatch = QRegularExpression( "_[0-9]+bpp" ).match( FilenameShort );
if( BppMatch.hasMatch() )
{
QString matchString = BppMatch.captured( 0 );
QString matchString = BppMatch.captured( BppMatch.lastCapturedIndex() );
matchString.remove( "_" );
matchString.remove( "bpp" );
rBitsPerPixel = matchString.toUInt();
@@ -541,6 +572,32 @@ bool VideoSubWindow::guessFormat( QString filename, unsigned int& rWidth, unsign
rBitsPerPixel = -1;
}
}
QRegularExpressionMatch BppOnlybMatch = QRegularExpression( "_[0-9]+b" ).match( FilenameShort );
if( BppOnlybMatch.hasMatch() )
{
QString matchString = BppOnlybMatch.captured( BppOnlybMatch.lastCapturedIndex() );
matchString.remove( "_" );
matchString.remove( "b" );
rBitsPerPixel = matchString.toUInt();
if( !( rBitsPerPixel > 0 && rBitsPerPixel < 16 ) )
{
rBitsPerPixel = -1;
}
}
// Guess frame rate - match %dbpp
QRegularExpressionMatch FpsMatch = QRegularExpression( "_[0-9]+fps" ).match( FilenameShort );
if( FpsMatch.hasMatch() )
{
QString matchString = FpsMatch.captured( FpsMatch.lastCapturedIndex() );
matchString.remove( "_" );
matchString.remove( "fps" );
rFrameRate = matchString.toUInt();
if( rFrameRate < 0 )
{
rFrameRate = 30;
}
}
// Guess Endianness
if( FilenameShort.contains( QStringLiteral( "be" ), Qt::CaseInsensitive ) )
@@ -611,7 +668,7 @@ void VideoSubWindow::disableModule( CalypAppModuleIf* pcModule )
if( m_pcCurrentDisplayModule )
{
pcModule = m_pcCurrentDisplayModule;
m_pcCurrentDisplayModule = 0;
m_pcCurrentDisplayModule = NULL;
ModulesHandle::destroyModuleIf( pcModule );
setWindowName( QFileInfo( m_cFilename ).fileName() );
bRefresh |= true;
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -30,6 +30,7 @@
#include <QRect>
#include <QString>
#include <QVector>
#include "CommonDefs.h"
#include "SubWindowAbstract.h"
#include "ViewArea.h"
@@ -181,7 +182,6 @@ public:
QSize sizeHint( const QSize& ) const;
QString getCurrentFileName() { return m_cFilename; }
bool getIsModule() { return getCategory() | SubWindowAbstract::MODULE_SUBWINDOW; }
void clearWindowBusy() { m_bWindowBusy = false; }
void setFillWindow( bool bFlag );
@@ -192,7 +192,7 @@ private:
bool goToNextFrame( bool bThreaded = false );
static bool guessFormat( QString filename, unsigned int& rWidth, unsigned int& rHeight, int& rInputFormat, unsigned int& rBitsPerPixel,
int& rEndianness );
int& rEndianness, unsigned int& rFrameRate );
bool hasRunningModule();
+8 -13
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,8 +25,6 @@
#include "ViewArea.h"
#include "GridManager.h"
#include <QColor>
#include <QCoreApplication>
#include <QDebug>
@@ -38,9 +36,10 @@
#include <QRectF>
#include <QString>
#include <QWidget>
#include <cmath>
#include "GridManager.h"
static const QColor selectionColor = Qt::cyan;
static const QColor imageMaskColor = Qt::green;
static const QColor eraserColor = Qt::red;
@@ -688,8 +687,7 @@ void ViewArea::paintEvent( QPaintEvent* event )
{
switch( tool() )
{
case MaskTool:
{
case MaskTool: {
if( m_maskColor.isValid() )
color = m_maskColor;
else
@@ -697,8 +695,7 @@ void ViewArea::paintEvent( QPaintEvent* event )
break;
}
case EraserTool:
{
case EraserTool: {
color = eraserColor;
break;
}
@@ -733,7 +730,7 @@ void ViewArea::wheelEvent( QWheelEvent* event )
if( event->modifiers() & Qt::ControlModifier )
{
scale = 0.001 * event->delta();
scale = 0.001 * event->angleDelta().y();
if( scale > 0 )
scale = 1.25;
else
@@ -1075,8 +1072,7 @@ void ViewArea::updateMask( const QRect& rect )
{
switch( tool() )
{
case MaskTool:
{
case MaskTool: {
// Add rect to the mask
QPainter painter( &m_mask );
painter.setBrush( Qt::color1 );
@@ -1085,8 +1081,7 @@ void ViewArea::updateMask( const QRect& rect )
painter.end();
break;
}
case EraserTool:
{
case EraserTool: {
// Clears rect area in the mask
QPainter painter( &m_mask );
painter.setBrush( Qt::color0 );
+6 -6
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -26,17 +26,17 @@
#ifndef __VIEWAREA_H__
#define __VIEWAREA_H__
#include "CommonDefs.h"
#include "GridManager.h"
#include "config.h"
#include "lib/CalypFrame.h"
#include <QBitmap>
#include <QColor>
#include <QPixmap>
#include <QTimer>
#include <QWidget>
#include "CommonDefs.h"
#include "GridManager.h"
#include "config.h"
#include "lib/CalypFrame.h"
class CalypStream;
/**
+13 -6
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
* Joao Santos (joaompssantos@gmail.com)
*
@@ -27,14 +27,14 @@
#include "AboutDialog.h"
#include "config.h"
#include <QApplication>
#include <QDialogButtonBox>
#include <QLabel>
#include <QTextEdit>
#include <QVBoxLayout>
#include "config.h"
#define TAB_FROM_SPACES "&nbsp;&nbsp;&nbsp;"
AboutDialog::AboutDialog( QWidget* parent )
@@ -49,7 +49,7 @@ AboutDialog::AboutDialog( QWidget* parent )
.arg( QApplication::applicationVersion() ) );
label->setWordWrap( false );
QString featuresList = QStringLiteral( "<p><h3><b>Features:</b></h3><ul>" );
QString featuresList = QStringLiteral( "<p><h4><b>Features:</b></h4><ul>" );
#ifdef USE_QTDBUS
featuresList.append( QStringLiteral( "<li>Support for Qt DBus messages" ) );
@@ -63,14 +63,21 @@ AboutDialog::AboutDialog( QWidget* parent )
featuresList.append( QStringLiteral( "</ul></p>" ) );
QLabel* labelFeatures = new QLabel( featuresList );
QLabel* labelCopyright = new QLabel( QStringLiteral( "Copyright © 2014–2018 Joao Carreira and Luis Lucas" ) );
QString thanksList = QStringLiteral( "<p><h4><b>Thanks to:</b></h4><ul>" );
thanksList.append( QStringLiteral( "<li>Joao Santos" ) );
thanksList.append( QStringLiteral( "<li>Jose Filipe" ) );
thanksList.append( QStringLiteral( "</ul></p>" ) );
QLabel* labelContributors = new QLabel( thanksList );
QLabel* labelCopyright = new QLabel( QStringLiteral( "Copyright 2014–2021 Joao Carreira and Luis Lucas" ) );
QWidget* topWidget = new QWidget;
QVBoxLayout* topLayout = new QVBoxLayout;
topLayout->addWidget( pixmapLabel, 0, Qt::AlignHCenter );
topLayout->addWidget( label );
topLayout->addWidget( labelFeatures );
topLayout->addWidget( labelCopyright );
topLayout->addWidget( labelFeatures );
topLayout->addWidget( labelContributors );
topWidget->setLayout( topLayout );
// QTextEdit *textEdit = new QTextEdit(tr("<p>This program is free "
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,8 +24,6 @@
#include "ConfigureFormatDialog.h"
#include "lib/CalypFrame.h"
#include <QComboBox>
#include <QDebug>
#include <QDialogButtonBox>
@@ -39,6 +37,8 @@
#include <QString>
#include <QWidget>
#include "lib/CalypFrame.h"
#define MAX_SUPPORTED_RESOLUTION 99999
QDataStream& operator<<( QDataStream& out, const CalypStandardResolutionVector& array )
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
+5 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,8 +24,6 @@
#include "ModulesHandleOptDialog.h"
#include "lib/CalypOptions.h"
#include <QCheckBox>
#include <QDialogButtonBox>
#include <QLabel>
@@ -34,6 +32,8 @@
#include <QVector>
#include <QWidget>
#include "lib/CalypOptions.h"
class QLineEdit;
class OpionConfiguration : public QWidget
@@ -44,7 +44,8 @@ public:
m_pcChecked = NULL;
m_cName = option->opt_string;
m_pcDescription = new QLabel;
m_pcDescription->setText( QString::fromStdString( option->opt_desc ) );
QString desc = QString::fromStdString( option->opt_desc );
m_pcDescription->setText( desc );
QHBoxLayout* layout = new QHBoxLayout;
layout->addWidget( m_pcDescription, 0, Qt::AlignLeft );
if( !option->isBinary() )
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,13 +25,13 @@
#ifndef __MODULEHANDLEOPTDIALOG_H__
#define __MODULEHANDLEOPTDIALOG_H__
#include <QDialog>
#include <QVector>
#include "CalypAppModuleIf.h"
#include "CommonDefs.h"
#include "config.h"
#include <QDialog>
#include <QVector>
class OpionConfiguration;
/**
+2 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -30,7 +30,7 @@
#include <QProgressBar>
#include <QVBoxLayout>
ProgressBar::ProgressBar( QWidget* parent, unsigned int maxValue )
ProgressBar::ProgressBar( QWidget* parent, unsigned long long int maxValue )
: QWidget( parent ), m_uiTotalProgress( maxValue ), m_uiProgress( 0 )
{
QVBoxLayout* mainLayout = new QVBoxLayout( this );
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,11 +25,11 @@
#ifndef __PROGRESSBAR_H__
#define __PROGRESSBAR_H__
#include "CommonDefs.h"
#include <QDialog>
#include <QWidget>
#include "CommonDefs.h"
class QProgressBar;
class ProgressBar : public QWidget
@@ -37,7 +37,7 @@ class ProgressBar : public QWidget
Q_OBJECT
public:
ProgressBar( QWidget* parent, unsigned int maxValue );
ProgressBar( QWidget* parent, unsigned long long int maxValue );
void incrementProgress( unsigned int );
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,8 +24,6 @@
#include "SeekStreamDialog.h"
#include "lib/CalypStream.h"
#include <QDialogButtonBox>
#include <QGridLayout>
#include <QLabel>
@@ -33,6 +31,8 @@
#include <QVector>
#include <QWidget>
#include "lib/CalypStream.h"
SeekStreamDialog::SeekStreamDialog( CalypStream* pcCurrStream, QWidget* parent )
: QDialog( parent, Qt::Dialog | Qt::WindowTitleHint ), m_iSelectedFrameNum()
{
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,13 +25,13 @@
#ifndef __SEEKSTREAMDIALOG_H__
#define __SEEKSTREAMDIALOG_H__
#include <QDialog>
#include <QVector>
#include "CalypAppModuleIf.h"
#include "CommonDefs.h"
#include "config.h"
#include <QDialog>
#include <QVector>
class QSpinBox;
/**
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,12 +24,12 @@
#include "SubWindowSelectorDialog.h"
#include "SubWindowHandle.h"
#include "VideoSubWindow.h"
#include <QCheckBox>
#include <QGroupBox>
#include "SubWindowHandle.h"
#include "VideoSubWindow.h"
SubWindowSelectorDialog::SubWindowSelectorDialog( QWidget* parent, SubWindowHandle* windowManager,
unsigned int uiCategory, int minWindowsSelected, int maxWindowsSelected )
: QDialog( parent )
+4 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,13 +25,12 @@
#ifndef __DIALOGSUBWINDOWSELECTOR_H__
#define __DIALOGSUBWINDOWSELECTOR_H__
#include "CommonDefs.h"
#include "config.h"
#include <QVector>
#include <QtCore>
#include <QtWidgets>
#include <QVector>
#include "CommonDefs.h"
#include "config.h"
class QPixmap;
class QColor;
+23 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -184,6 +184,11 @@ FramePropertiesDock::FramePropertiesDock( QWidget* parent, bool* pbMainPlaySwitc
labelRangeValue = new QLabel;
labelRangeValue->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
QLabel* nEBinsLabel = new QLabel( tr( "Non empty bins:" ) );
nEBinsLabel->setAlignment( Qt::AlignLeft | Qt::AlignVCenter );
labelNEBinsValue = new QLabel;
labelNEBinsValue->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
QLabel* meanLabel = new QLabel( tr( "Mean:" ) );
meanLabel->setAlignment( Qt::AlignLeft | Qt::AlignVCenter );
labelMeanValue = new QLabel;
@@ -199,6 +204,11 @@ FramePropertiesDock::FramePropertiesDock( QWidget* parent, bool* pbMainPlaySwitc
labelMedianValue = new QLabel;
labelMedianValue->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
QLabel* entropyLabel = new QLabel( tr( "Entropy:" ) );
entropyLabel->setAlignment( Qt::AlignLeft | Qt::AlignVCenter );
labelEntropyValue = new QLabel;
labelEntropyValue->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
QLabel* percentileLabel = new QLabel( tr( "Percentile:" ) );
percentileLabel->setAlignment( Qt::AlignLeft | Qt::AlignVCenter );
labelPercentileValue = new QLabel;
@@ -212,12 +222,16 @@ FramePropertiesDock::FramePropertiesDock( QWidget* parent, bool* pbMainPlaySwitc
statisticsLayout->addWidget( labelCountValue, gridRow++, 1 );
statisticsLayout->addWidget( rangeLabel, gridRow, 0 );
statisticsLayout->addWidget( labelRangeValue, gridRow++, 1 );
statisticsLayout->addWidget( nEBinsLabel, gridRow, 0 );
statisticsLayout->addWidget( labelNEBinsValue, gridRow++, 1 );
statisticsLayout->addWidget( meanLabel, gridRow, 0 );
statisticsLayout->addWidget( labelMeanValue, gridRow++, 1 );
statisticsLayout->addWidget( stdDevLabel, gridRow, 0 );
statisticsLayout->addWidget( labelStdDevValue, gridRow++, 1 );
statisticsLayout->addWidget( medianLabel, gridRow, 0 );
statisticsLayout->addWidget( labelMedianValue, gridRow++, 1 );
statisticsLayout->addWidget( entropyLabel, gridRow, 0 );
statisticsLayout->addWidget( labelEntropyValue, gridRow++, 1 );
QGroupBox* statisticsGroup = new QGroupBox( tr( "Statistics" ) );
statisticsGroup->setLayout( statisticsLayout );
@@ -274,6 +288,7 @@ void FramePropertiesDock::reset()
m_iLastFrameType = -1;
labelNEBinsValue->clear();
labelMeanValue->clear();
labelPixelsValue->clear();
labelStdDevValue->clear();
@@ -444,6 +459,9 @@ void FramePropertiesDock::updateStatistiques()
if( frame )
{
double numBins = frame->getNEBins( channel );
labelNEBinsValue->setText( value.setNum( (float)numBins, 'f', 0 ) );
QString rangeText =
"[" + QString::number( frame->getMinimumPelValue( channel ) ) + ":" + QString::number( frame->getMaximumPelValue( channel ) ) + "]";
labelRangeValue->setText( rangeText );
@@ -461,7 +479,10 @@ void FramePropertiesDock::updateStatistiques()
labelCountValue->setText( value.setNum( (float)counts, 'f', 0 ) );
double median = frame->getMedian( channel, min, max );
labelMedianValue->setText( value.setNum( median, 'f', 1 ) );
labelMedianValue->setText( value.setNum( median, 'f', 0 ) );
double entropy = frame->getEntropy( channel, min, max );
labelEntropyValue->setText( value.setNum( entropy, 'f', 2 ) );
double percentile = ( pixels > 0 ? ( 100.0 * counts / pixels ) : 0.0 );
labelPercentileValue->setText( value.setNum( percentile, 'f', 1 ) );
+5 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,14 +25,14 @@
#ifndef __FRAMEPROPERTIESDOCK_H__
#define __FRAMEPROPERTIESDOCK_H__
#include <QtWidgets>
#include "CommonDefs.h"
#include "HistogramWidget.h"
#include "config.h"
#include "lib/CalypFrame.h"
#include "lib/CalypStream.h"
#include <QtWidgets>
class FramePropertiesDock : public QWidget
{
Q_OBJECT
@@ -72,9 +72,11 @@ private:
QLabel* labelPixelsValue;
QLabel* labelCountValue;
QLabel* labelRangeValue;
QLabel* labelNEBinsValue;
QLabel* labelMeanValue;
QLabel* labelStdDevValue;
QLabel* labelMedianValue;
QLabel* labelEntropyValue;
QLabel* labelPercentileValue;
QLabel* colorsLabel;
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,14 +24,14 @@
#include "ModuleHandleDock.h"
#include "CalypAppModuleIf.h"
#include "ModulesHandle.h"
#include <QGridLayout>
#include <QLabel>
#include <QString>
#include <QtGui>
#include "CalypAppModuleIf.h"
#include "ModulesHandle.h"
ModuleHandleDock::ModuleHandleDock( QWidget* parent, CalypAppModuleIf* moduleIf )
: QWidget( parent ), m_pcCurrModuleIf( moduleIf )
{
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,12 +25,12 @@
#ifndef __MODULEHANDLEDOCK_H__
#define __MODULEHANDLEDOCK_H__
#include "CommonDefs.h"
#include "config.h"
#include <QSize>
#include <QWidget>
#include "CommonDefs.h"
#include "config.h"
class QLabel;
class CalypAppModuleIf;
+6 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,11 +24,11 @@
#include "QualityMeasurementSidebar.h"
#include <QtGui>
#include "SubWindowHandle.h"
#include "VideoSubWindow.h"
#include <QtGui>
QualityMeasurementSidebar::QualityMeasurementSidebar( QWidget* parent, SubWindowHandle* windowManager )
: QWidget( parent ), m_pcMainWindowManager( windowManager ), m_pcCurrentVideoSubWindow( NULL )
{
@@ -185,6 +185,8 @@ void QualityMeasurementSidebar::updateSidebarData()
VideoSubWindow* refSubWindow = m_pcCurrentVideoSubWindow->getRefSubWindow();
if( refSubWindow )
{
QApplication::setOverrideCursor( Qt::WaitCursor );
CalypFrame* currFrame = m_pcCurrentVideoSubWindow->getCurrFrame();
CalypFrame* refFrame = refSubWindow->getCurrFrame();
double quality;
@@ -199,6 +201,7 @@ void QualityMeasurementSidebar::updateSidebarData()
{
m_ppcLabelQualityValue[component]->setText( zeroValue );
}
QApplication::restoreOverrideCursor();
return;
}
else
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,14 +25,14 @@
#ifndef __QUALITYMEASUREMENTSIDEBAR_H__
#define __QUALITYMEASUREMENTSIDEBAR_H__
#include <QtWidgets>
#include "CommonDefs.h"
#include "HistogramWidget.h"
#include "config.h"
#include "lib/CalypFrame.h"
#include "lib/CalypStream.h"
#include <QtWidgets>
class SubWindowHandle;
class VideoSubWindow;
+4 -4
View File
@@ -1,5 +1,5 @@
###
### CMakeLists for calyp external components
###
#
# CMakeLists for calyp external components
#
ADD_SUBDIRECTORY( qcustomplot )
ADD_SUBDIRECTORY(qcustomplot)
+8 -16
View File
@@ -1,20 +1,12 @@
###
### CMakeLists for qcustomplot
###
#
# CMakeLists for qcustomplot
#
FIND_PACKAGE( Qt5 REQUIRED COMPONENTS Core Gui Widgets PrintSupport )
FIND_PACKAGE(Qt5 REQUIRED COMPONENTS Core Gui Widgets PrintSupport)
set(qcustomplot_SRCS
qcustomplot.cpp
qcustomplot.h
)
SET(qcustomplot_SRCS qcustomplot.cpp qcustomplot.h)
ADD_LIBRARY( QCustomPlotLib STATIC ${qcustomplot_SRCS} )
TARGET_LINK_LIBRARIES( QCustomPlotLib
Qt5::Core
Qt5::Gui
Qt5::Widgets
Qt5::PrintSupport
)
ADD_LIBRARY(QCustomPlotLib STATIC ${qcustomplot_SRCS})
TARGET_LINK_LIBRARIES(QCustomPlotLib Qt5::Core Qt5::Gui Qt5::Widgets Qt5::PrintSupport)
TARGET_INCLUDE_DIRECTORIES(QCustomPlotLib PUBLIC . )
TARGET_INCLUDE_DIRECTORIES(QCustomPlotLib PUBLIC .)
+9323 -8800
View File
File diff suppressed because it is too large. Load diff
+3126 -2870
View File
File diff suppressed because it is too large. Load diff
+5 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -51,6 +51,10 @@ int main( int argc, char* argv[] )
QApplication::setApplicationVersion( QStringLiteral( CALYP_VERSION_STRING ) );
QApplication::setOrganizationName( QStringLiteral( "PixLRA" ) );
#if _WIN32
application.setStyle( QStyleFactory::create( "Fusion" ) );
#endif
#ifdef USE_QTDBUS
/**
* use dbus, if available
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,11 +25,11 @@
#ifndef __WIDGETFRAMENUMBER_H__
#define __WIDGETFRAMENUMBER_H__
#include <QWidget>
#include "CommonDefs.h"
#include "config.h"
#include <QWidget>
class QLabel;
class FrameNumberWidget : public QWidget
+6 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -938,7 +938,11 @@ void HistogramWidget::paintEvent( QPaintEvent* )
tipText += cellBeg + tr( "Median:" ) + cellMid;
double median = frame->getMedian( m_channelType, 0, frame->getNumHistogramSegment() - 1 );
tipText += value.setNum( median, 'f', 1 ) + cellEnd;
tipText += value.setNum( median, 'f', 0 ) + cellEnd;
tipText += cellBeg + tr( "Entropy:" ) + cellMid;
double entropy = frame->getEntropy( m_channelType, 0, frame->getNumHistogramSegment() - 1 );
tipText += value.setNum( entropy, 'f', 2 ) + cellEnd;
tipText += cellBeg + tr( "Percent:" ) + cellMid;
double percentile = ( pixels > 0 ? ( 100.0 * counts / pixels ) : 0.0 );
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -26,13 +26,13 @@
#ifndef __HISTOGRAMWIDGET_H__
#define __HISTOGRAMWIDGET_H__
#include <QColor>
#include <QWidget>
#include "CommonDefs.h"
#include "config.h"
#include "lib/CalypFrame.h"
#include <QColor>
#include <QWidget>
class QEvent;
class HistogramWorker;
+94 -102
View File
@@ -1,147 +1,139 @@
# - Try to find the required ffmpeg components(default: AVFORMAT, AVUTIL, AVCODEC)
# * Try to find the required ffmpeg components(default: AVFORMAT, AVUTIL, AVCODEC)
#
# Once done this will define
# FFMPEG_FOUND - System has the all required components.
# FFMPEG_INCLUDE_DIRS - Include directory necessary for using the required components headers.
# FFMPEG_LIBRARIES - Link these to use the required ffmpeg components.
# FFMPEG_DEFINITIONS - Compiler switches required for using the required ffmpeg components.
# Once done this will define FFMPEG_FOUND - System has the all required components. FFMPEG_INCLUDE_DIRS - Include directory necessary for
# using the required components headers. FFMPEG_LIBRARIES - Link these to use the required ffmpeg components. FFMPEG_DEFINITIONS - Compiler
# switches required for using the required ffmpeg components.
#
# For each of the components it will additionally set.
# - AVCODEC
# - AVDEVICE
# - AVFORMAT
# - AVUTIL
# - POSTPROCESS
# - SWSCALE
# the following variables will be defined
# <component>_FOUND - System has <component>
# <component>_INCLUDE_DIRS - Include directory necessary for using the <component> headers
# <component>_LIBRARIES - Link these to use <component>
# <component>_DEFINITIONS - Compiler switches required for using <component>
# <component>_VERSION - The components version
# For each of the components it will additionally set. - AVCODEC - AVDEVICE - AVFORMAT - AVUTIL - POSTPROCESS - SWSCALE the following variables will
# be defined <component>_FOUND - System has <component> <component>_INCLUDE_DIRS - Include directory necessary for using the <component>
# headers <component>_LIBRARIES - Link these to use <component> <component>_DEFINITIONS - Compiler switches required for using <component>
# <component>_VERSION - The components version
#
# Copyright (c) 2006, Matthias Kretz, <kretz@kde.org>
# Copyright (c) 2008, Alexander Neundorf, <neundorf@kde.org>
# Copyright (c) 2011, Michael Jansen, <kde@michael-jansen.biz>
# Copyright (c) 2006, Matthias Kretz, <kretz@kde.org> Copyright (c) 2008, Alexander Neundorf, <neundorf@kde.org> Copyright (c) 2011, Michael Jansen,
# <kde@michael-jansen.biz>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
# Redistribution and use is allowed according to the terms of the BSD license. For details see the accompanying COPYING-CMAKE-SCRIPTS file.
include(FindPackageHandleStandardArgs)
INCLUDE(FindPackageHandleStandardArgs)
# The default components were taken from a survey over other FindFFMPEG.cmake files
if (NOT FFmpeg_FIND_COMPONENTS)
set(FFmpeg_FIND_COMPONENTS AVCODEC AVFORMAT AVUTIL)
endif ()
IF(NOT FFmpeg_FIND_COMPONENTS)
SET(FFmpeg_FIND_COMPONENTS AVCODEC AVFORMAT AVUTIL)
ENDIF()
#
### Macro: set_component_found
# Macro: set_component_found
#
# Marks the given component as found if both *_LIBRARIES AND *_INCLUDE_DIRS is present.
#
macro(set_component_found _component )
if (${_component}_LIBRARIES AND ${_component}_INCLUDE_DIRS)
MACRO(set_component_found _component)
IF(${_component}_LIBRARIES AND ${_component}_INCLUDE_DIRS)
# message(STATUS " - ${_component} found.")
set(${_component}_FOUND TRUE)
else ()
SET(${_component}_FOUND TRUE)
ELSE()
# message(STATUS " - ${_component} not found.")
endif ()
endmacro()
ENDIF()
ENDMACRO()
#
### Macro: find_component
# Macro: find_component
#
# Checks for the given component by invoking pkgconfig and then looking up the libraries and
# include directories.
# Checks for the given component by invoking pkgconfig and then looking up the libraries and include directories.
#
macro(find_component _component _pkgconfig _library _header)
MACRO(find_component _component _pkgconfig _library _header)
if (NOT WIN32)
# use pkg-config to get the directories and then use these values
# in the FIND_PATH() and FIND_LIBRARY() calls
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
pkg_check_modules(PC_${_component} ${_pkgconfig})
endif ()
endif (NOT WIN32)
IF(NOT WIN32)
# use pkg-config to get the directories and then use these values in the FIND_PATH() and FIND_LIBRARY() calls
FIND_PACKAGE(PkgConfig)
IF(PKG_CONFIG_FOUND)
PKG_CHECK_MODULES(PC_${_component} ${_pkgconfig})
ENDIF()
ENDIF(NOT WIN32)
find_path(${_component}_INCLUDE_DIRS ${_header}
HINTS
${PC_LIB${_component}_INCLUDEDIR}
${PC_LIB${_component}_INCLUDE_DIRS}
PATH_SUFFIXES
ffmpeg
FIND_PATH(
${_component}_INCLUDE_DIRS ${_header}
HINTS ${PC_LIB${_component}_INCLUDEDIR} ${PC_LIB${_component}_INCLUDE_DIRS}
PATH_SUFFIXES ffmpeg
)
find_library(${_component}_LIBRARIES NAMES ${_library}
HINTS
${PC_LIB${_component}_LIBDIR}
${PC_LIB${_component}_LIBRARY_DIRS}
)
set(${_component}_DEFINITIONS ${PC_${_component}_CFLAGS_OTHER} CACHE STRING "The ${_component} CFLAGS.")
set(${_component}_VERSION ${PC_${_component}_VERSION} CACHE STRING "The ${_component} version number.")
set_component_found(${_component})
mark_as_advanced(
${_component}_INCLUDE_DIRS
FIND_LIBRARY(
${_component}_LIBRARIES
${_component}_DEFINITIONS
${_component}_VERSION)
NAMES ${_library}
HINTS ${PC_LIB${_component}_LIBDIR} ${PC_LIB${_component}_LIBRARY_DIRS}
)
endmacro()
SET(${_component}_DEFINITIONS
${PC_${_component}_CFLAGS_OTHER}
CACHE STRING "The ${_component} CFLAGS."
)
SET(${_component}_VERSION
${PC_${_component}_VERSION}
CACHE STRING "The ${_component} version number."
)
SET_COMPONENT_FOUND(${_component})
MARK_AS_ADVANCED(${_component}_INCLUDE_DIRS ${_component}_LIBRARIES ${_component}_DEFINITIONS ${_component}_VERSION)
ENDMACRO()
# Check for cached results. If there are skip the costly part.
if (NOT FFMPEG_LIBRARIES)
IF(NOT FFMPEG_LIBRARIES)
# Check for all possible component.
find_component(AVCODEC libavcodec avcodec libavcodec/avcodec.h)
find_component(AVFORMAT libavformat avformat libavformat/avformat.h)
find_component(AVDEVICE libavdevice avdevice libavdevice/avdevice.h)
find_component(AVUTIL libavutil avutil libavutil/avutil.h)
find_component(SWSCALE libswscale swscale libswscale/swscale.h)
find_component(POSTPROC libpostproc postproc libpostproc/postprocess.h)
FIND_COMPONENT(AVCODEC libavcodec avcodec libavcodec/avcodec.h)
FIND_COMPONENT(AVFORMAT libavformat avformat libavformat/avformat.h)
FIND_COMPONENT(AVDEVICE libavdevice avdevice libavdevice/avdevice.h)
FIND_COMPONENT(AVUTIL libavutil avutil libavutil/avutil.h)
FIND_COMPONENT(SWSCALE libswscale swscale libswscale/swscale.h)
FIND_COMPONENT(SWRESAMPLE libswresample swresample libswresample/swresample.h)
FIND_COMPONENT(POSTPROC libpostproc postproc libpostproc/postprocess.h)
# Check if the required components were found and add their stuff to the FFMPEG_* vars.
foreach (_component ${FFmpeg_FIND_COMPONENTS})
if (${_component}_FOUND)
FOREACH(_component ${FFmpeg_FIND_COMPONENTS})
IF(${_component}_FOUND)
# message(STATUS "Required component ${_component} present.")
set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} ${${_component}_LIBRARIES})
set(FFMPEG_DEFINITIONS ${FFMPEG_DEFINITIONS} ${${_component}_DEFINITIONS})
list(APPEND FFMPEG_INCLUDE_DIRS ${${_component}_INCLUDE_DIRS})
else ()
SET(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} ${${_component}_LIBRARIES})
SET(FFMPEG_DEFINITIONS ${FFMPEG_DEFINITIONS} ${${_component}_DEFINITIONS})
LIST(APPEND FFMPEG_INCLUDE_DIRS ${${_component}_INCLUDE_DIRS})
ELSE()
# message(STATUS "Required component ${_component} missing.")
endif ()
endforeach ()
ENDIF()
ENDFOREACH()
# Build the include path with duplicates removed.
if (FFMPEG_INCLUDE_DIRS)
list(REMOVE_DUPLICATES FFMPEG_INCLUDE_DIRS)
endif ()
IF(FFMPEG_INCLUDE_DIRS)
LIST(REMOVE_DUPLICATES FFMPEG_INCLUDE_DIRS)
ENDIF()
# cache the vars.
set(FFMPEG_INCLUDE_DIRS ${FFMPEG_INCLUDE_DIRS} CACHE STRING "The FFmpeg include directories." FORCE)
set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} CACHE STRING "The FFmpeg libraries." FORCE)
set(FFMPEG_DEFINITIONS ${FFMPEG_DEFINITIONS} CACHE STRING "The FFmpeg cflags." FORCE)
SET(FFMPEG_INCLUDE_DIRS
${FFMPEG_INCLUDE_DIRS}
CACHE STRING "The FFmpeg include directories." FORCE
)
SET(FFMPEG_LIBRARIES
${FFMPEG_LIBRARIES}
CACHE STRING "The FFmpeg libraries." FORCE
)
SET(FFMPEG_DEFINITIONS
${FFMPEG_DEFINITIONS}
CACHE STRING "The FFmpeg cflags." FORCE
)
mark_as_advanced(FFMPEG_INCLUDE_DIRS
FFMPEG_LIBRARIES
FFMPEG_DEFINITIONS)
MARK_AS_ADVANCED(FFMPEG_INCLUDE_DIRS FFMPEG_LIBRARIES FFMPEG_DEFINITIONS)
endif ()
ENDIF()
# Now set the noncached _FOUND vars for the components.
foreach (_component AVCODEC AVDEVICE AVFORMAT AVUTIL POSTPROCESS SWSCALE)
set_component_found(${_component})
endforeach ()
FOREACH(_component AVCODEC AVDEVICE AVFORMAT AVUTIL POSTPROCESS SWSCALE)
SET_COMPONENT_FOUND(${_component})
ENDFOREACH()
# Compile the list of required vars
set(_FFmpeg_REQUIRED_VARS FFMPEG_LIBRARIES FFMPEG_INCLUDE_DIRS)
foreach (_component ${FFmpeg_FIND_COMPONENTS})
list(APPEND _FFmpeg_REQUIRED_VARS ${_component}_LIBRARIES ${_component}_INCLUDE_DIRS)
endforeach ()
SET(_FFmpeg_REQUIRED_VARS FFMPEG_LIBRARIES FFMPEG_INCLUDE_DIRS)
FOREACH(_component ${FFmpeg_FIND_COMPONENTS})
LIST(APPEND _FFmpeg_REQUIRED_VARS ${_component}_LIBRARIES ${_component}_INCLUDE_DIRS)
ENDFOREACH()
# Give a nice error message if some of the required vars are missing.
find_package_handle_standard_args(FFmpeg DEFAULT_MSG ${_FFmpeg_REQUIRED_VARS})
FIND_PACKAGE_HANDLE_STANDARD_ARGS(FFmpeg DEFAULT_MSG ${_FFmpeg_REQUIRED_VARS})
+54 -50
View File
@@ -1,64 +1,68 @@
MACRO(ADD_MODULE name file )
set(__modulename "Module${name}")
OPTION(MODULE_${name} "Use module ${name}" ON )
ADD_FEATURE_INFO(${name} MODULE_${name} "Module ${name}" )
if( MODULE_${name} )
list(APPEND Calyp_Mod_SRCS ${file} )
LIST(APPEND MODULES_LIST_NAME ${name} )
LIST(APPEND MODULES_LIST_FILES ${file} )
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "#include \"${file}.h\"\n")
endif()
unset(__modulename)
# General function to add a module It receives the name of the module and the filename where it is defined. Used in modules/CMakeLists.txt
MACRO(ADD_MODULE name file)
SET(__modulename "Module${name}")
OPTION(MODULE_${name} "Use module ${name}" ON)
ADD_FEATURE_INFO(${name} MODULE_${name} "Module ${name}")
IF(MODULE_${name})
LIST(APPEND Calyp_Mod_SRCS ${MODULE_LOCATION}${file}.cpp)
LIST(APPEND MODULES_LIST_NAME ${name})
LIST(APPEND MODULES_LIST_FILES ${file})
SET(Calyp_Mod_SRCS
"${Calyp_Mod_SRCS}"
PARENT_SCOPE
)
SET(MODULES_LIST_NAME
"${MODULES_LIST_NAME}"
PARENT_SCOPE
)
SET(MODULES_LIST_FILES
"${MODULES_LIST_FILES}"
PARENT_SCOPE
)
ENDIF()
UNSET(__modulename)
ENDMACRO()
MACRO(ADD_MODULE_USE_OPENCV name file )
IF( USE_OPENCV )
SET( ADD_MODULE_USE_OPENCV_VERSION "2.4" )
CMAKE_PARSE_ARGUMENTS(ADD_MODULE_USE_OPENCV "" "VERSION" "MODULES" ${ARGN} )
IF( NOT ( ${OpenCV_VERSION} VERSION_LESS ${ADD_MODULE_USE_OPENCV_VERSION} ) )
SET( _HAS_MODULES TRUE )
FOREACH(opencv_module IN LISTS ADD_MODULE_USE_OPENCV_MODULES )
string(TOUPPER "${opencv_module}" opencv_moduleUP)
FIND_PACKAGE( OpenCV QUIET COMPONENTS ${opencv_module} )
IF( NOT ${OPENCV_${opencv_moduleUP}_FOUND} EQUAL "1" )
SET( _HAS_MODULES FALSE )
# General function to add a module It receives the name of the module and the filename where it is defined. Moreover it receives a VERSION and MODULES
# (OpenCV modules required) Used in modules/CMakeLists.txt
MACRO(ADD_MODULE_USE_OPENCV name file)
IF(USE_OPENCV)
SET(ADD_MODULE_USE_OPENCV_VERSION "2.4")
CMAKE_PARSE_ARGUMENTS(ADD_MODULE_USE_OPENCV "" "VERSION" "MODULES" ${ARGN})
IF(NOT (${OpenCV_VERSION} VERSION_LESS ${ADD_MODULE_USE_OPENCV_VERSION}))
SET(_HAS_MODULES TRUE)
FOREACH(opencv_module IN LISTS ADD_MODULE_USE_OPENCV_MODULES)
STRING(TOUPPER "${opencv_module}" opencv_moduleUP)
FIND_PACKAGE(OpenCV QUIET COMPONENTS ${opencv_module})
IF(NOT ${OPENCV_${opencv_moduleUP}_FOUND} EQUAL "1")
SET(_HAS_MODULES FALSE)
ELSE()
LIST(APPEND OPENCV_MODULES ${opencv_module} )
LIST(APPEND OPENCV_MODULES ${opencv_module})
ENDIF()
ENDFOREACH()
IF( _HAS_MODULES )
ADD_MODULE( ${name} ${file} )
IF(_HAS_MODULES)
ADD_MODULE(${name} ${file})
ENDIF()
UNSET( OPENCV_${opencv_moduleUP}_FOUND )
UNSET( _HAS_MODULES )
UNSET(OPENCV_${opencv_moduleUP}_FOUND)
UNSET(_HAS_MODULES)
ENDIF()
UNSET( ADD_MODULE_USE_OPENCV_VERSION )
UNSET(ADD_MODULE_USE_OPENCV_VERSION)
ENDIF()
ENDMACRO()
#
# Create header
#
MACRO(CREATE_MODULE_MACROS)
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "// This files add the header files of each module\n"
"#ifndef __MODULESLISTHEADER_H__\n#define __MODULESLISTHEADER_H__\n"
)
FOREACH(module ${MODULES_LIST_FILES})
FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "#include \"${module}.h\"\n")
ENDFOREACH(module ${MODULES_LIST_FILES})
MACRO(CREATE_MODULE_MACROS )
file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "// This files add the header files of each module\n"
"#ifndef __MODULESLISTHEADER_H__\n#define __MODULESLISTHEADER_H__\n" )
foreach(module ${MODULES_LIST_FILES})
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "#include \"${module}.h\"\n")
endforeach(module ${MODULES_LIST_FILES})
file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "#define REGISTER_ALL_MODULES \\\n" )
foreach(module ${MODULES_LIST_NAME})
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "Register( \"${module}\", &(${module}::Create) ); \\\n")
endforeach(module ${MODULES_LIST_NAME})
file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "\n#endif // __MODULESLISTHEADER_H__\n" )
FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "#define REGISTER_ALL_MODULES \\\n")
FOREACH(module ${MODULES_LIST_NAME})
FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "Register( \"${module}\", &(${module}::Create) ); \\\n")
ENDFOREACH(module ${MODULES_LIST_NAME})
FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "\n#endif // __MODULESLISTHEADER_H__\n")
ENDMACRO()
+67 -49
View File
@@ -1,63 +1,81 @@
#####################################################################################
# ####################################################################################################################################################
# DLLs and Win32 specific code
######################################################################################
# ####################################################################################################################################################
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "." )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "." )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "." )
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
FOREACH(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
STRING(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ".")
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ".")
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ".")
ENDFOREACH(OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES)
SET(MSVC_DLL_DIR "MSVC_DLL_DIR" CACHE PATH "Where to find MSVC dlls")
#INSTALL(FILES ${MSVC_DLL_DIR}/msvcr120.dll DESTINATION bin )
#INSTALL(FILES ${MSVC_DLL_DIR}/msvcp120.dll DESTINATION bin )
SET(MSVC_DLL_DIR
"MSVC_DLL_DIR"
CACHE PATH "Where to find MSVC dlls"
)
# INSTALL(FILES ${MSVC_DLL_DIR}/msvcr120.dll DESTINATION bin ) INSTALL(FILES ${MSVC_DLL_DIR}/msvcp120.dll DESTINATION bin )
SET(QT_DIR "QT-Dir" CACHE PATH "Where to find QT Lib on Windows")
SET(QT_ICU_VERSION "" CACHE STRING "Qt ICU version of dll's" )
SET(QT_DLL_POSTFIX "" CACHE STRING "Postfix to dll's name for debug" )
SET(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH} ${QT_DIR}" )
SET(QT_DIR
"QT-Dir"
CACHE PATH "Where to find QT Lib on Windows"
)
SET(QT_ICU_VERSION
""
CACHE STRING "Qt ICU version of dll's"
)
SET(QT_DLL_POSTFIX
""
CACHE STRING "Postfix to dll's name for debug"
)
SET(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH} ${QT_DIR}")
SET(WINDLLIB "Dl-location" CACHE PATH "Where to find DL Lib on Windows")
SET(WINDLLIB
"Dl-location"
CACHE PATH "Where to find DL Lib on Windows"
)
IF(NOT USE_QT4)
INSTALL(FILES ${QT_DIR}/bin/Qt5Core${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5Gui${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5Widgets${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5PrintSupport${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/plugins/platforms/qwindows${QT_DLL_POSTFIX}.dll DESTINATION bin/platforms)
INSTALL(FILES ${QT_DIR}/plugins/platforms/qminimal${QT_DLL_POSTFIX}.dll DESTINATION bin/platforms)
INSTALL(FILES ${QT_DIR}/plugins/platforms/qoffscreen${QT_DLL_POSTFIX}.dll DESTINATION bin/platforms)
IF( NOT USE_QT4 )
INSTALL(FILES ${QT_DIR}/bin/Qt5Core${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/bin/Qt5Gui${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/bin/Qt5Widgets${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/bin/Qt5PrintSupport${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/plugins/platforms/qwindows${QT_DLL_POSTFIX}.dll DESTINATION bin/platforms )
INSTALL(FILES ${QT_DIR}/plugins/platforms/qminimal${QT_DLL_POSTFIX}.dll DESTINATION bin/platforms )
INSTALL(FILES ${QT_DIR}/plugins/platforms/qoffscreen${QT_DLL_POSTFIX}.dll DESTINATION bin/platforms )
IF( USE_FERVOR )
INSTALL(FILES ${QT_DIR}/bin/Qt5Network${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/bin/Qt5WebKit${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/bin/Qt5WebKitWidgets${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/bin/Qt5Quick${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/bin/Qt5Qml${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/bin/Qt5Multimedia${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/bin/Qt5Sql${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/bin/Qt5Positioning${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/bin/Qt5Sensors${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/bin/Qt5MultimediaWidgets${QT_DLL_POSTFIX}.dll DESTINATION bin )
INSTALL(FILES ${QT_DIR}/bin/Qt5OpenGL${QT_DLL_POSTFIX}.dll DESTINATION bin )
IF(USE_FERVOR)
INSTALL(FILES ${QT_DIR}/bin/Qt5Network${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5WebKit${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5WebKitWidgets${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5Quick${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5Qml${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5Multimedia${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5Sql${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5Positioning${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5Sensors${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5MultimediaWidgets${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5OpenGL${QT_DLL_POSTFIX}.dll DESTINATION bin)
ENDIF()
ENDIF()
IF( USE_OPENCV )
SET(OpenCV_DLL_DIR "${OpenCV_DIR}/bin" CACHE PATH "Where to find OpenCV dlls")
SET(OpenCV_INSTALL_MODULES ${OPENCV_MODULES} CACHE STRING "List of OpenCV modules")
FOREACH(opencv_module IN LISTS OpenCV_INSTALL_MODULES )
INSTALL(FILES ${OpenCV_DLL_DIR}/opencv_${opencv_module}${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}.dll DESTINATION bin )
IF(USE_OPENCV)
SET(OpenCV_DLL_DIR
"${OpenCV_DIR}/bin"
CACHE PATH "Where to find OpenCV dlls"
)
SET(OpenCV_INSTALL_MODULES
${OPENCV_MODULES}
CACHE STRING "List of OpenCV modules"
)
FOREACH(opencv_module IN LISTS OpenCV_INSTALL_MODULES)
INSTALL(FILES ${OpenCV_DLL_DIR}/opencv_${opencv_module}${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}.dll DESTINATION bin)
ENDFOREACH()
ENDIF()
IF( USE_FFMPEG )
SET(FFMPEG_DIR "FFmpeg-Dir" CACHE PATH "Where to find FFmpeg Lib on Windows")
INSTALL(FILES ${FFMPEG_DIR}/bin/avcodec-${AVCODEC_VERSION}.dll DESTINATION bin )
INSTALL(FILES ${FFMPEG_DIR}/bin/avformat-${AVFORMAT_VERSION}.dll DESTINATION bin )
INSTALL(FILES ${FFMPEG_DIR}/bin/avutil-${AVUTIL_VERSION}.dll DESTINATION bin )
INSTALL(FILES ${FFMPEG_DIR}/bin/swscale-${SWSCALE_VERSION}.dll DESTINATION bin )
INSTALL(FILES ${FFMPEG_DIR}/bin/swresample-${SWRESAMPLE_VERSION}.dll DESTINATION bin )
IF(USE_FFMPEG)
SET(FFMPEG_DIR
"FFmpeg-Dir"
CACHE PATH "Where to find FFmpeg Lib on Windows"
)
INSTALL(DIRECTORY ${FFMPEG_DIR}/bin/ DESTINATION bin)
ENDIF()
+5 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -26,10 +26,10 @@
#define __CONFIG_CALYP_H__
/* Version definition */
#define CALYP_VERSION_MAJOR @CALYP_VERSION_MAJOR@
#define CALYP_VERSION_MINOR @CALYP_VERSION_MINOR@
#define CALYP_VERSION_PATCH @CALYP_VERSION_PATCH@
#define CALYP_VERSION @CALYP_VERSION@
#define CALYP_VERSION_MAJOR @CALYP_VERSION_MAJOR @
#define CALYP_VERSION_MINOR @CALYP_VERSION_MINOR @
#define CALYP_VERSION_PATCH @CALYP_VERSION_PATCH @
#define CALYP_VERSION @CALYP_VERSION @
#define CALYP_VERSION_STRING "@CALYP_VERSION_STRING@"
#define UPDATE_CHANNEL "@UPDATE_CHANNEL@"
+4 -6
View File
@@ -1,7 +1,5 @@
###
### CMakeLists for examples
###
ADD_SUBDIRECTORY( modules )
#
# CMakeLists for examples
#
ADD_SUBDIRECTORY(modules)
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -23,6 +23,7 @@
*/
#include "AbsoluteFrameDifferenceExample.h"
#include <cstdlib>
REGISTER_CLASS_MAKER( AbsoluteFrameDifferenceExample )
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,10 +25,10 @@
#ifndef __ABSOLUTEFRAMEDIFFERENCEEXAMPLE_H__
#define __ABSOLUTEFRAMEDIFFERENCEEXAMPLE_H__
#include "CalypModuleIf.h"
#include <cassert>
#include "CalypModuleIf.h"
class AbsoluteFrameDifferenceExample : public CalypModuleIf
{
REGISTER_CLASS_FACTORY( AbsoluteFrameDifferenceExample )
+9 -14
View File
@@ -1,21 +1,16 @@
###
### CMakeLists for modules_example
###
#
# CMakeLists for modules_example
#
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.9)
CMAKE_MINIMUM_REQUIRED( VERSION 2.8.9 )
PROJECT("modules_example")
PROJECT( "modules_example" )
# THIS
# FIND_PACKAGE( Calyp )
#INCLUDE_DIRECTORIES( ${CALYP_INCLUDE_DIRS} )
# OR
INCLUDE_DIRECTORIES( ../../lib )
# THIS FIND_PACKAGE( Calyp ) INCLUDE_DIRECTORIES( ${CALYP_INCLUDE_DIRS} ) OR
INCLUDE_DIRECTORIES(../../lib)
ADD_LIBRARY(FrameBinarization SHARED FrameBinarization_APIv1.cpp)
TARGET_LINK_LIBRARIES( FrameBinarization ${CALYP_LINKER_LIBS} )
TARGET_LINK_LIBRARIES(FrameBinarization ${CALYP_LINKER_LIBS})
ADD_LIBRARY(AbsoluteFrameDifferenceExample SHARED AbsoluteFrameDifferenceExample.cpp)
TARGET_LINK_LIBRARIES( AbsoluteFrameDifferenceExample ${PROJECT_LIBRARY} ${CALYP_LINKER_LIBS} )
TARGET_LINK_LIBRARIES(AbsoluteFrameDifferenceExample ${PROJECT_LIBRARY} ${CALYP_LINKER_LIBS})
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
+3 -3
View File
@@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
export LC_ALL=en_GB.utf8
export LANG=C
@@ -8,7 +8,7 @@ MY_NAME="$(basename "$0")"
SET_VERBOSE=0
ALL_FILES=0
function parsearguments {
function parsearguments() {
local ARGS=$(getopt -o "h" -l "verbose,all,help" -n "${MY_NAME}" -- "$@")
local PRINT_HELP=0
@@ -123,5 +123,5 @@ while read filename ; do
# only change/touch original file if it has been changed
diff -q ${TEMPFILE} "${filename}" >/dev/null || { echo "Updating \"${filename}\"" ; cp -p ${TEMPFILE} "${filename}" || echo "Cannot copy \"${TEMPFILE}\" \"${filename}\"" ; }
rm -f ${TEMPFILE}
# rm -f ${TEMPFILE}
done
+58 -68
View File
@@ -1,22 +1,14 @@
###
### CMakeLists for calyp lib component
###
#
# CMakeLists for calyp lib component
#
INCLUDE(GNUInstallDirs)
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} )
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
set(Calyp_Lib_SRCS
LibMemory.h
CalypLib.h
CalypDefs.h
# Frame
CalypFrame.h
CalypFrame.cpp
CalypPixel.cpp
PixelFormats.h
PixelFormats.cpp
# Stream
SET(Calyp_Lib_Frame_SRCS CalypPixel.cpp PixelFormats.h PixelFormats.cpp CalypFrame.h CalypFrame.cpp)
SET(Calyp_Lib_Stream_SRCS
CalypStream.h
CalypStream.cpp
CalypStreamHandlerIf.h
@@ -24,78 +16,76 @@ set(Calyp_Lib_SRCS
StreamHandlerRaw.cpp
StreamHandlerPortableMap.h
StreamHandlerPortableMap.cpp
# Options Parser
CalypOptions.h
CalypOptions.cpp
# Modules
CalypModuleIf.h
)
LIST(APPEND CMAKE_CFG_LINKER_LIBSS ${PROJECT_LIBRARY} )
LIST(APPEND CMAKE_CFG_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR} )
SET(Calyp_Lib_OptionParser_SRCS CalypOptions.h CalypOptions.cpp)
SET(Calyp_Lib_Modules_SRCS CalypOptions.h CalypOptions.cpp)
IF( USE_FFMPEG )
LIST( APPEND Calyp_Lib_SRCS StreamHandlerLibav.h )
LIST( APPEND Calyp_Lib_SRCS StreamHandlerLibav.cpp )
LIST(APPEND CMAKE_CFG_LINKER_LIBSS ${FFMPEG_LIBRARIES} )
LIST(APPEND CMAKE_CFG_INCLUDE_DIRS ${FFMPEG_INCLUDE_DIRS} )
ENDIF()
IF( USE_OPENCV )
LIST( APPEND Calyp_Lib_SRCS StreamHandlerOpenCV.h )
LIST( APPEND Calyp_Lib_SRCS StreamHandlerOpenCV.cpp )
LIST(APPEND CMAKE_CFG_LINKER_LIBSS ${OpenCV_LIBRARIES} )
LIST(APPEND CMAKE_CFG_INCLUDE_DIRS ${OpenCV_INCLUDE_DIRS} )
ENDIF()
set(Calyp_Lib_HEADERS
SET(Calyp_Lib_SRCS
LibMemory.h
CalypLib.h
CalypDefs.h
CalypFrame.h
CalypStream.h
CalypOptions.h
CalypModuleIf.h
${Calyp_Lib_Frame_SRCS}
${Calyp_Lib_Stream_SRCS}
${Calyp_Lib_OptionParser_SRCS}
${Calyp_Lib_Modules_SRCS}
)
CONFIGURE_FILE( CalypConfig.cmake.in CalypConfig.cmake @ONLY)
LIST(APPEND CMAKE_CFG_LINKER_LIBSS ${PROJECT_LIBRARY})
LIST(APPEND CMAKE_CFG_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})
INCLUDE_DIRECTORIES( ${FFMPEG_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS} )
IF(USE_FFMPEG)
LIST(APPEND Calyp_Lib_SRCS StreamHandlerLibav.h)
LIST(APPEND Calyp_Lib_SRCS StreamHandlerLibav.cpp)
IF( USE_STATIC )
ADD_LIBRARY( ${PROJECT_LIBRARY} STATIC ${Calyp_Lib_SRCS} )
ELSE()
ADD_LIBRARY( ${PROJECT_LIBRARY} SHARED ${Calyp_Lib_SRCS} )
LIST(APPEND CMAKE_CFG_LINKER_LIBSS ${FFMPEG_LIBRARIES})
LIST(APPEND CMAKE_CFG_INCLUDE_DIRS ${FFMPEG_INCLUDE_DIRS})
ENDIF()
IF(USE_OPENCV)
LIST(APPEND Calyp_Lib_SRCS StreamHandlerOpenCV.h)
LIST(APPEND Calyp_Lib_SRCS StreamHandlerOpenCV.cpp)
TARGET_LINK_LIBRARIES( ${PROJECT_LIBRARY}
${FFMPEG_LIBRARIES}
${OpenCV_LIBRARIES}
)
LIST(APPEND Calyp_Lib_SRCS CalypOpenCVModuleIf.cpp)
TARGET_INCLUDE_DIRECTORIES(${PROJECT_LIBRARY}
PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
)
LIST(APPEND CMAKE_CFG_LINKER_LIBSS ${OpenCV_LIBRARIES})
LIST(APPEND CMAKE_CFG_INCLUDE_DIRS ${OpenCV_INCLUDE_DIRS})
ENDIF()
SET_TARGET_PROPERTIES( ${PROJECT_LIBRARY}
PROPERTIES VERSION ${CALYP_VERSION}
SOVERSION ${CALYP_VERSION_MAJOR}
)
SET(Calyp_Lib_HEADERS CalypDefs.h CalypFrame.h CalypStream.h CalypOptions.h CalypModuleIf.h CalypOpenCVModuleIf.h)
IF( NOT USE_STATIC )
INSTALL( TARGETS ${PROJECT_LIBRARY}
CONFIGURE_FILE(CalypConfig.cmake.in CalypConfig.cmake @ONLY)
INCLUDE_DIRECTORIES(${FFMPEG_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})
IF(USE_STATIC)
ADD_LIBRARY(${PROJECT_LIBRARY} STATIC ${Calyp_Lib_SRCS})
ELSE()
ADD_LIBRARY(${PROJECT_LIBRARY} SHARED ${Calyp_Lib_SRCS})
ENDIF()
TARGET_LINK_LIBRARIES(${PROJECT_LIBRARY} ${FFMPEG_LIBRARIES} ${OpenCV_LIBRARIES})
TARGET_INCLUDE_DIRECTORIES(${PROJECT_LIBRARY} PUBLIC $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>)
SET_TARGET_PROPERTIES(${PROJECT_LIBRARY} PROPERTIES VERSION ${CALYP_VERSION} SOVERSION ${CALYP_VERSION_MAJOR})
IF(NOT USE_STATIC)
INSTALL(
TARGETS ${PROJECT_LIBRARY}
RUNTIME DESTINATION bin
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
)
INSTALL(FILES ${Calyp_Lib_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" )
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/CalypConfig.cmake DESTINATION share/calyp )
INSTALL(FILES ${Calyp_Lib_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/CalypConfig.cmake DESTINATION share/calyp)
ENDIF()
IF( BUILD_TESTS )
ADD_SUBDIRECTORY( tests )
IF(BUILD_TESTS)
ADD_SUBDIRECTORY(tests)
ENDIF()
IF(BUILD_TESTS_CATCH2)
ADD_SUBDIRECTORY(catch2)
ENDIF()
+6 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -27,11 +27,13 @@
#define __CALYPDEFS_H__
#include <algorithm>
#include <iterator>
#include <string>
#include <vector>
typedef unsigned short ClpPel; ///< 16-bit pixel type
typedef unsigned char ClpByte;
typedef unsigned long long ClpULong;
typedef std::string ClpString;
@@ -100,6 +102,9 @@ enum CLP_Endianness
CLP_LITTLE_ENDIAN = 1,
};
static const double S_PI = 3.14159265358979323846;
static const double S_PI_2 = 1.57079632679489661923;
inline ClpString clpLowercase( const ClpString& in )
{
ClpString out;
+334 -122
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,15 +24,17 @@
#include "CalypFrame.h"
#include <cassert>
#include <cmath>
#include "LibMemory.h"
#include "PixelFormats.h"
#include "config.h"
#include <cassert>
#include <cmath>
#ifdef USE_OPENCV
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#endif
std::vector<ClpString> CalypFrame::supportedColorSpacesListNames()
@@ -81,6 +83,11 @@ int CalypFrame::findPixelFormat( const ClpString& name )
return -1;
}
int CalypFrame::pelformatColorSpace( const int idx )
{
return g_CalypPixFmtDescriptorsMap.at( idx ).colorSpace;
}
struct CalypFramePrivate
{
public:
@@ -95,6 +102,7 @@ public:
int m_iPixelFormat; //!< Pixel format number (it follows the list of supported pixel formats)
unsigned int m_uiBitsPel; //!< Bits per pixel/channel
unsigned int m_uiHalfPelValue; //!< Bits per pixel/channel
bool m_bHasNegativeValues; //!< Half of the scale correspond to negative values
ClpPel*** m_pppcInputPel;
@@ -111,15 +119,12 @@ public:
/** Numbers of histogram segments depending of image bytes depth*/
unsigned int m_uiHistoSegments;
/**
* Common constructor function of a frame
*
* @param width width of the frame
* @param height height of the frame
* @param pel_format pixel format index (always use PixelFormats enum)
*
*/
void init( unsigned int width, unsigned int height, int pel_format, int bitsPixel )
void init( unsigned int width, unsigned int height, int pel_format, unsigned bitsPixel )
{
init( width, height, pel_format, bitsPixel, false );
}
void init( unsigned int width, unsigned int height, int pel_format, unsigned bitsPixel, bool has_negative_values )
{
m_bInit = false;
m_bHasRGBPel = false;
@@ -130,6 +135,7 @@ public:
m_iPixelFormat = pel_format;
m_uiBitsPel = bitsPixel < 8 ? 8 : bitsPixel;
m_uiHalfPelValue = 1 << ( m_uiBitsPel - 1 );
m_bHasNegativeValues = has_negative_values;
if( m_uiWidth == 0 || m_uiHeight == 0 || m_iPixelFormat == -1 || bitsPixel > 16 )
{
@@ -252,16 +258,22 @@ public:
* \brief Constructors
*/
CalypFrame::CalypFrame( unsigned int width, unsigned int height, int pelFormat, int bitsPixel )
CalypFrame::CalypFrame( unsigned int width, unsigned int height, int pelFormat, unsigned bitsPixel )
: d( new CalypFramePrivate )
{
d->init( width, height, pelFormat, bitsPixel );
}
CalypFrame::CalypFrame( unsigned int width, unsigned int height, int pelFormat, unsigned bitsPixel, bool has_negative_values )
: d( new CalypFramePrivate )
{
d->init( width, height, pelFormat, bitsPixel, has_negative_values );
}
CalypFrame::CalypFrame( const CalypFrame& other )
: d( new CalypFramePrivate )
{
d->init( other.getWidth(), other.getHeight(), other.getPelFormat(), other.getBitsPel() );
d->init( other.getWidth(), other.getHeight(), other.getPelFormat(), other.getBitsPel(), other.getHasNegativeValues() );
copyFrom( &other );
}
@@ -270,7 +282,7 @@ CalypFrame::CalypFrame( const CalypFrame* other )
{
if( other )
{
d->init( other->getWidth(), other->getHeight(), other->getPelFormat(), other->getBitsPel() );
d->init( other->getWidth(), other->getHeight(), other->getPelFormat(), other->getBitsPel(), other->getHasNegativeValues() );
copyFrom( other );
}
}
@@ -346,6 +358,8 @@ bool CalypFrame::haveSameFmt( const CalypFrame& other, unsigned int match ) cons
bRet &= ( getBitsPel() == other.getBitsPel() );
if( match & MATCH_COLOR_SPACE_IGNORE_GRAY )
bRet &= ( getColorSpace() == CLP_COLOR_GRAY || getColorSpace() == other.getColorSpace() );
if( match & MATCH_BYTES_PER_FRAME )
bRet &= ( getBytesPerFrame() == other.getBytesPerFrame() );
return bRet;
}
@@ -379,31 +393,46 @@ unsigned int CalypFrame::getNumberChannels() const
return d->m_pcPelFormat->numberChannels;
}
unsigned int CalypFrame::getWidth( int channel ) const
unsigned CalypFrame::getWidth( unsigned channel ) const
{
return CHROMASHIFT( d->m_uiWidth, channel > 0 ? d->m_pcPelFormat->log2ChromaWidth : 0 );
}
unsigned int CalypFrame::getHeight( int channel ) const
unsigned CalypFrame::getHeight( unsigned channel ) const
{
return CHROMASHIFT( d->m_uiHeight, channel > 0 ? d->m_pcPelFormat->log2ChromaHeight : 0 );
}
unsigned int CalypFrame::getPixels( int channel ) const
bool CalypFrame::getHasNegativeValues() const
{
return getWidth( channel ) * getWidth( channel );
return d->m_bHasNegativeValues;
}
unsigned char CalypFrame::getChromaWidthRatio() const
ClpULong CalypFrame::getPixels( unsigned channel ) const
{
return getWidth( channel ) * getHeight( channel );
}
ClpULong CalypFrame::getTotalNumberOfPixels() const
{
ClpULong numberPixels = 0;
for( unsigned i = 0; i < getNumberChannels(); i++ )
{
numberPixels += getPixels( i );
}
return numberPixels;
}
unsigned CalypFrame::getChromaWidthRatio() const
{
return d->m_pcPelFormat->log2ChromaWidth;
}
unsigned char CalypFrame::getChromaHeightRatio() const
unsigned CalypFrame::getChromaHeightRatio() const
{
return d->m_pcPelFormat->log2ChromaHeight;
}
unsigned int CalypFrame::getChromaLength() const
ClpULong CalypFrame::getChromaLength() const
{
return getWidth( 1 ) * getHeight( 1 );
}
@@ -413,19 +442,19 @@ unsigned int CalypFrame::getBitsPel() const
return d->m_uiBitsPel;
}
unsigned long CalypFrame::getBytesPerFrame()
ClpULong CalypFrame::getBytesPerFrame() const
{
return getBytesPerFrame( d->m_uiWidth, d->m_uiHeight, d->m_iPixelFormat, d->m_uiBitsPel );
}
unsigned long CalypFrame::getBytesPerFrame( unsigned int uiWidth, unsigned int uiHeight, int iPixelFormat, unsigned int bitsPixel )
ClpULong CalypFrame::getBytesPerFrame( unsigned int uiWidth, unsigned int uiHeight, int iPixelFormat, unsigned int bitsPixel )
{
const CalypPixelFormatDescriptor* pcPelFormat = &( g_CalypPixFmtDescriptorsMap.at( iPixelFormat ) );
unsigned int bytesPerPixel = ( bitsPixel - 1 ) / 8 + 1;
unsigned long long int numberBytes = uiWidth * uiHeight;
ClpULong numberBytes = uiWidth * uiHeight;
if( pcPelFormat->numberChannels > 1 )
{
unsigned long long int numberBytesChroma =
ClpULong numberBytesChroma =
CHROMASHIFT( uiWidth, pcPelFormat->log2ChromaWidth ) * CHROMASHIFT( uiHeight, pcPelFormat->log2ChromaHeight );
numberBytes += ( pcPelFormat->numberChannels - 1 ) * numberBytesChroma;
}
@@ -471,19 +500,24 @@ unsigned char* CalypFrame::getRGBBuffer() const
return NULL;
}
ClpPel CalypFrame::operator()( unsigned int ch, unsigned int xPos, unsigned int yPos )
ClpPel CalypFrame::operator()( unsigned int ch, unsigned int xPos, unsigned int yPos, bool absolute ) const
{
int retValue = 0;
if( ch < d->m_pcPelFormat->numberChannels )
return d->m_pppcInputPel[ch][yPos][xPos];
return 0;
{
retValue = d->m_pppcInputPel[ch][yPos][xPos];
if( !absolute && d->m_bHasNegativeValues )
retValue = retValue - int( d->m_uiHalfPelValue );
}
return ClpPel( retValue );
}
CalypPixel CalypFrame::operator()( unsigned int xPos, unsigned int yPos )
CalypPixel CalypFrame::operator()( unsigned int xPos, unsigned int yPos ) const
{
return getPixel( xPos, yPos );
}
CalypPixel CalypFrame::getPixel( unsigned int xPos, unsigned int yPos )
CalypPixel CalypFrame::getPixel( unsigned int xPos, unsigned int yPos ) const
{
CalypPixel PixelValue( d->m_pcPelFormat->colorSpace );
for( unsigned int ch = 0; ch < d->m_pcPelFormat->numberChannels; ch++ )
@@ -514,11 +548,11 @@ void CalypFrame::setPixel( unsigned int xPos, unsigned int yPos, CalypPixel pixe
void CalypFrame::copyFrom( const CalypFrame& other )
{
if( haveSameFmt( other, MATCH_ALL ) )
if( !haveSameFmt( other, MATCH_COLOR_SPACE | MATCH_BYTES_PER_FRAME | MATCH_BITS ) )
return;
d->m_bHasRGBPel = false;
d->m_bHasHistogram = false;
memcpy( *d->m_pppcInputPel[CLP_LUMA], other.getPelBufferYUV()[CLP_LUMA][0], getBytesPerFrame() * sizeof( ClpPel ) );
memcpy( &( d->m_pppcInputPel[0][0][0] ), &( other.getPelBufferYUV()[0][0][0] ), getTotalNumberOfPixels() * sizeof( ClpPel ) );
}
void CalypFrame::copyFrom( const CalypFrame* other )
@@ -527,10 +561,11 @@ void CalypFrame::copyFrom( const CalypFrame* other )
copyFrom( *other );
}
void CalypFrame::copyFrom( const CalypFrame& other, unsigned int xPos, unsigned int yPos )
void CalypFrame::copyFrom( const CalypFrame& other, unsigned x, unsigned y )
{
if( haveSameFmt( other, MATCH_ALL ) )
if( !haveSameFmt( other, MATCH_COLOR_SPACE | MATCH_BITS ) )
return;
// TODO: Protect width and height
ClpPel*** pInput = other.getPelBufferYUV();
for( unsigned int ch = 0; ch < d->m_pcPelFormat->numberChannels; ch++ )
{
@@ -538,7 +573,7 @@ void CalypFrame::copyFrom( const CalypFrame& other, unsigned int xPos, unsigned
int ratioW = ch > 0 ? d->m_pcPelFormat->log2ChromaHeight : 0;
for( unsigned int i = 0; i < CHROMASHIFT( d->m_uiHeight, ratioH ); i++ )
{
memcpy( d->m_pppcInputPel[ch][i], &( pInput[ch][( yPos >> ratioH ) + i][( xPos >> ratioW )] ),
memcpy( &( d->m_pppcInputPel[ch][i][0] ), &( pInput[ch][( y >> ratioH ) + i][( x >> ratioW )] ),
( d->m_uiWidth >> ratioW ) * sizeof( ClpPel ) );
}
}
@@ -546,12 +581,39 @@ void CalypFrame::copyFrom( const CalypFrame& other, unsigned int xPos, unsigned
d->m_bHasHistogram = false;
}
void CalypFrame::copyFrom( const CalypFrame* other, unsigned int x, unsigned int y )
void CalypFrame::copyFrom( const CalypFrame* other, unsigned x, unsigned y )
{
if( other )
copyFrom( *other, x, y );
}
void CalypFrame::copyTo( const CalypFrame& other, unsigned x, unsigned y )
{
if( !haveSameFmt( other, MATCH_COLOR_SPACE | MATCH_PEL_FMT | MATCH_BITS ) )
return;
ClpPel*** pInput = other.getPelBufferYUV();
unsigned width = other.getWidth();
// TODO: Protect width and height
for( unsigned int ch = 0; ch < d->m_pcPelFormat->numberChannels; ch++ )
{
int ratioH = ch > 0 ? d->m_pcPelFormat->log2ChromaWidth : 0;
int ratioW = ch > 0 ? d->m_pcPelFormat->log2ChromaHeight : 0;
for( unsigned int i = 0; i < other.getHeight( ch ); i++ )
{
memcpy( &( d->m_pppcInputPel[ch][( y >> ratioH ) + i][( x >> ratioW )] ), &( pInput[ch][i][0] ),
( width >> ratioW ) * sizeof( ClpPel ) );
}
}
d->m_bHasRGBPel = false;
d->m_bHasHistogram = false;
}
void CalypFrame::copyTo( const CalypFrame* other, unsigned x, unsigned y )
{
if( other )
copyTo( *other, x, y );
}
void CalypFrame::frameFromBuffer( ClpByte* Buff, int iEndianness, unsigned long uiBuffSize )
{
if( uiBuffSize != getBytesPerFrame() )
@@ -574,7 +636,7 @@ void CalypFrame::frameFromBuffer( ClpByte* Buff, int iEndianness )
int b;
int maxval = pow( 2, d->m_uiBitsPel ) - 1;
if( iEndianness == 0 )
if( iEndianness == CLP_BIG_ENDIAN )
{
startByte = bytesPixel - 1;
endByte = -1;
@@ -593,10 +655,10 @@ void CalypFrame::frameFromBuffer( ClpByte* Buff, int iEndianness )
{
ratioW = ch > 0 ? d->m_pcPelFormat->log2ChromaWidth : 0;
ratioH = ch > 0 ? d->m_pcPelFormat->log2ChromaHeight : 0;
step = d->m_pcPelFormat->comp[ch].step_minus1;
step = ( d->m_pcPelFormat->comp[ch].step_minus1 ) * bytesPixel;
pPel = d->m_pppcInputPel[ch][0];
pTmpBuff = ppBuff[d->m_pcPelFormat->comp[ch].plane] + ( d->m_pcPelFormat->comp[ch].offset_plus1 - 1 );
pTmpBuff = ppBuff[d->m_pcPelFormat->comp[ch].plane] + ( d->m_pcPelFormat->comp[ch].offset_plus1 - 1 ) * bytesPixel;
for( i = 0; i < CHROMASHIFT( d->m_uiHeight, ratioH ) * CHROMASHIFT( d->m_uiWidth, ratioW ); i++ )
{
@@ -632,7 +694,7 @@ void CalypFrame::frameToBuffer( ClpByte* output_buffer, int iEndianness )
int incByte = 1;
int b;
if( iEndianness == 0 )
if( iEndianness == CLP_BIG_ENDIAN )
{
startByte = bytesPixel - 1;
endByte = -1;
@@ -651,10 +713,10 @@ void CalypFrame::frameToBuffer( ClpByte* output_buffer, int iEndianness )
{
ratioW = ch > 0 ? d->m_pcPelFormat->log2ChromaWidth : 0;
ratioH = ch > 0 ? d->m_pcPelFormat->log2ChromaHeight : 0;
step = d->m_pcPelFormat->comp[ch].step_minus1;
step = ( d->m_pcPelFormat->comp[ch].step_minus1 ) * bytesPixel;
pTmpPel = d->m_pppcInputPel[ch][0];
pTmpBuff = ppBuff[d->m_pcPelFormat->comp[ch].plane];
pTmpBuff = ppBuff[d->m_pcPelFormat->comp[ch].plane] + ( d->m_pcPelFormat->comp[ch].offset_plus1 - 1 ) * bytesPixel;
for( i = 0; i < CHROMASHIFT( d->m_uiHeight, ratioH ) * CHROMASHIFT( d->m_uiWidth, ratioW ); i++ )
{
@@ -669,12 +731,12 @@ void CalypFrame::frameToBuffer( ClpByte* output_buffer, int iEndianness )
}
}
void CalypFrame::fillRGBBuffer()
{
#define PEL_ARGB( a, r, g, b ) ( ( a & 0xff ) << 24 ) | ( ( r & 0xff ) << 16 ) | ( ( g & 0xff ) << 8 ) | ( b & 0xff )
#define PEL_RGB( r, g, b ) PEL_ARGB( 0xffu, r, g, b )
#define CLAMP_YUV2RGB( X ) X = X < 0 ? 0 : X > 255 ? 255 : X;
#define CLAMP_YUV2RGB( X ) X = X < 0 ? 0 : X > 255 ? 255 : \
X;
#define YUV2RGB( iY, iU, iV, iR, iG, iB ) \
iR = iY + ( ( 1436 * ( iV - 128 ) ) >> 10 ); \
iG = iY - ( ( 352 * ( iU - 128 ) + 731 * ( iV - 128 ) ) >> 10 ); \
@@ -809,7 +871,7 @@ int CalypFrame::getNumHistogramSegment()
return d->m_uiHistoSegments;
}
unsigned int CalypFrame::getMinimumPelValue( int channel )
unsigned int CalypFrame::getMinimumPelValue( unsigned channel )
{
if( !d->m_bHasHistogram )
return 0;
@@ -841,7 +903,7 @@ unsigned int CalypFrame::getMinimumPelValue( int channel )
return 0;
}
unsigned int CalypFrame::getMaximumPelValue( int channel )
unsigned int CalypFrame::getMaximumPelValue( unsigned channel )
{
if( !d->m_bHasHistogram )
return 0;
@@ -867,13 +929,46 @@ unsigned int CalypFrame::getMaximumPelValue( int channel )
{
if( d->m_puiHistogram[i] > 0 )
{
return i - indexEnd + 1;
return i - indexEnd - 1;
}
}
return 0;
}
unsigned int CalypFrame::getMaximum( int channel )
unsigned int CalypFrame::getNEBins( unsigned channel )
{
if( !d->m_bHasHistogram )
return 0;
channel = d->getRealHistogramChannel( channel );
if( channel < 0 )
return 0;
int indexStart;
int indexEnd;
if( channel == HIST_ALL_CHANNELS )
{
indexStart = 0;
indexEnd = d->m_uiHistoChannels * d->m_uiHistoSegments;
}
else
{
indexStart = channel * d->m_uiHistoSegments;
indexEnd = indexStart + d->m_uiHistoSegments;
}
int nEBins = 0;
for( int i = indexStart; i < indexEnd; i++ )
{
if( d->m_puiHistogram[i] > 0 )
{
nEBins++;
}
}
return nEBins;
}
unsigned int CalypFrame::getMaximum( unsigned channel )
{
if( !d->m_bHasHistogram )
return 0;
@@ -906,7 +1001,7 @@ unsigned int CalypFrame::getMaximum( int channel )
return maxValue;
}
unsigned int CalypFrame::getNumPixelsRange( int channel, unsigned int start, unsigned int end )
unsigned int CalypFrame::getNumPixelsRange( unsigned channel, unsigned int start, unsigned int end )
{
if( !d->m_bHasHistogram || start < 0 || end > d->m_uiHistoSegments - 1 || start > end )
{
@@ -928,7 +1023,7 @@ unsigned int CalypFrame::getNumPixelsRange( int channel, unsigned int start, uns
return count;
}
double CalypFrame::getMean( int channel, unsigned int start, unsigned int end )
double CalypFrame::getMean( unsigned channel, unsigned int start, unsigned int end )
{
if( !d->m_bHasHistogram || start < 0 || end > d->m_uiHistoSegments - 1 || start > end )
{
@@ -958,7 +1053,7 @@ double CalypFrame::getMean( int channel, unsigned int start, unsigned int end )
return mean;
}
int CalypFrame::getMedian( int channel, unsigned int start, unsigned int end )
int CalypFrame::getMedian( unsigned channel, unsigned int start, unsigned int end )
{
if( !d->m_bHasHistogram || start < 0 || end > d->m_uiHistoSegments - 1 || start > end )
{
@@ -984,7 +1079,7 @@ int CalypFrame::getMedian( int channel, unsigned int start, unsigned int end )
return 0;
}
double CalypFrame::getStdDev( int channel, unsigned int start, unsigned int end )
double CalypFrame::getStdDev( unsigned channel, unsigned int start, unsigned int end )
{
if( !d->m_bHasHistogram || start < 0 || end > d->m_uiHistoSegments - 1 || start > end )
{
@@ -1006,14 +1101,14 @@ double CalypFrame::getStdDev( int channel, unsigned int start, unsigned int end
/*------------ original
for ( i = start ; i <= end ; i++ )
{
dev += ( i - mean ) * ( i - mean ) * d->m_puiHistogram[indexStart +i];
}
for ( i = start ; i <= end ; i++ )
{
dev += ( i - mean ) * ( i - mean ) * d->m_puiHistogram[indexStart +i];
}
return sqrt( dev / count );
return sqrt( dev / count );
-----------------------*/
-----------------------*/
for( unsigned int i = start; i <= end; i++ )
{
@@ -1023,7 +1118,7 @@ double CalypFrame::getStdDev( int channel, unsigned int start, unsigned int end
return sqrt( ( dev - count * mean * mean ) / ( count - 1 ) );
}
double CalypFrame::getHistogramValue( int channel, unsigned int bin )
double CalypFrame::getHistogramValue( unsigned channel, unsigned int bin )
{
if( !d->m_bHasHistogram || bin < 0 || bin > d->m_uiHistoSegments - 1 )
return 0.0;
@@ -1038,13 +1133,39 @@ double CalypFrame::getHistogramValue( int channel, unsigned int bin )
return d->m_puiHistogram[indexStart + bin];
}
double CalypFrame::getEntropy( unsigned channel, unsigned int start, unsigned int end )
{
if( !d->m_bHasHistogram )
return 0;
channel = d->getRealHistogramChannel( channel );
if( channel < 0 )
return 0;
int indexStart = channel * d->m_uiHistoSegments;
double numValues = getNumPixelsRange( channel, start, end );
double entropy = 0.0;
for( unsigned b = start; b <= end; b++ )
{
if( d->m_puiHistogram[indexStart + b] == 0 )
continue;
double prob = d->m_puiHistogram[indexStart + b] / numValues;
entropy -= prob * log2( prob );
}
return entropy;
}
/*
**************************************************************
* interface to other libs
**************************************************************
*/
bool CalypFrame::toMat( cv::Mat& cvMat, bool convertToGray )
bool CalypFrame::toMat( cv::Mat& cvMat, bool convertToGray, bool scale, unsigned channel )
{
bool bRet = false;
#ifdef USE_OPENCV
@@ -1053,46 +1174,78 @@ bool CalypFrame::toMat( cv::Mat& cvMat, bool convertToGray )
{
return bRet;
}
int cvType = CV_MAKETYPE( CV_8U, convertToGray ? 1 : d->m_pcPelFormat->numberChannels );
cvMat.create( d->m_uiHeight, d->m_uiWidth, cvType );
unsigned char* pCvPel = cvMat.data;
if( !convertToGray && ( d->m_pcPelFormat->colorSpace == CLP_COLOR_YUV ||
d->m_pcPelFormat->colorSpace == CLP_COLOR_RGB ) )
unsigned int cvPrecision = getBitsPel() > 8 ? CV_16U : CV_8U;
unsigned numBytes = getBitsPel() > 8 ? 2 : 1;
unsigned numChannels = getNumberChannels();
unsigned scaleFactor = 1 << ( numBytes * 8 - getBitsPel() );
if( !scale )
scaleFactor = 1;
if( convertToGray )
{
fillRGBBuffer();
unsigned char* pARGB = d->m_pcARGB32;
for( unsigned int i = 0; i < d->m_uiWidth * d->m_uiHeight; i++ )
{
*pCvPel++ = *pARGB++;
*pCvPel++ = *pARGB++;
*pCvPel++ = *pARGB++;
pARGB++;
}
bRet = true;
channel = channel >= numChannels ? 0 : channel;
numChannels = 1;
}
else if( convertToGray || d->m_pcPelFormat->colorSpace == CLP_COLOR_GRAY )
unsigned imgWidth = getWidth( channel );
unsigned imgHeight = getHeight( channel );
cvMat.create( imgHeight, imgWidth, CV_MAKETYPE( cvPrecision, numChannels ) );
if( numChannels > 1 )
{
ClpPel* pPel = d->m_pppcInputPel[CLP_LUMA][0];
for( unsigned int i = 0; i < d->m_uiWidth * d->m_uiHeight; i++ )
cv::Mat tmpMat( imgHeight, imgWidth, CV_MAKETYPE( cvPrecision, numChannels ) );
unsigned char* cv_data = tmpMat.data;
CalypPixel currPel;
for( unsigned y = 0; y < imgHeight; y++ )
{
*pCvPel++ = *pPel++;
for( unsigned x = 0; x < imgWidth; x++ )
{
currPel = getPixel( x, y ) * scaleFactor;
for( unsigned int ch = 0; ch < numChannels; ch++ )
for( unsigned b = 0; b < numBytes; b++ )
{
unsigned char pel = currPel[ch] >> ( 8 * b );
*cv_data++ = pel;
}
}
}
if( getNumberChannels() >= 1 )
{
// TODO: check for other formats
switch( getColorSpace() )
{
case CLP_COLOR_YUV:
cv::cvtColor( tmpMat, cvMat, cv::COLOR_YCrCb2RGB );
break;
}
}
bRet = true;
}
else
{
return false;
unsigned char* cv_data = cvMat.data;
ClpPel* pel = getPelBufferYUV()[channel][0];
for( unsigned y = 0; y < imgHeight * imgWidth; y++ )
{
ClpPel currPel = ( *pel++ ) * scaleFactor;
for( unsigned b = 0; b < numBytes; b++ )
*cv_data++ = currPel >> ( 8 * b );
}
}
bRet = true;
#endif
return bRet;
}
bool CalypFrame::fromMat( cv::Mat& cvMat )
bool CalypFrame::fromMat( cv::Mat& cvMat, int channel )
{
bool bRet = false;
#ifdef USE_OPENCV
unsigned numBytes = getBitsPel() > 8 ? 2 : 1;
unsigned numChannels = getNumberChannels();
unsigned int cvPrecision = getBitsPel() > 8 ? CV_16U : CV_8U;
if( !d->m_bInit )
{
uchar depth = cvMat.type() & CV_MAT_DEPTH_MASK;
if( d->m_iPixelFormat == CLP_INVALID_FMT )
{
switch( cvMat.channels() )
@@ -1107,35 +1260,69 @@ bool CalypFrame::fromMat( cv::Mat& cvMat )
return false;
}
}
d->init( cvMat.cols, cvMat.rows, d->m_iPixelFormat, 8 );
d->m_uiBitsPel = depth == CV_8U ? 8 : 16;
d->init( cvMat.cols, cvMat.rows, d->m_iPixelFormat, d->m_uiBitsPel );
}
d->m_bHasRGBPel = false;
d->m_bHasHistogram = false;
unsigned char* pCvPel = cvMat.data;
if( d->m_iPixelFormat != CLP_GRAY )
if( channel >= 0 )
numChannels = 1;
else
channel = 0;
if( cvMat.channels() != int( numChannels ) )
{
ClpPel* pInputPelR = d->m_pppcInputPel[CLP_COLOR_R][0];
ClpPel* pInputPelG = d->m_pppcInputPel[CLP_COLOR_G][0];
ClpPel* pInputPelB = d->m_pppcInputPel[CLP_COLOR_B][0];
for( unsigned int i = 0; i < d->m_uiHeight * d->m_uiWidth; i++ )
return false;
}
unsigned imgWidth = getWidth( channel );
unsigned imgHeight = getHeight( channel );
if( numChannels > 1 )
{
cv::Mat tmpMat( imgHeight, imgWidth, CV_MAKETYPE( cvPrecision, numChannels ) );
switch( getColorSpace() )
{
*pInputPelB++ = *pCvPel++;
*pInputPelG++ = *pCvPel++;
*pInputPelR++ = *pCvPel++;
case CLP_COLOR_YUV:
cv::cvtColor( tmpMat, cvMat, cv::COLOR_RGB2YCrCb );
break;
}
unsigned char* cv_data = tmpMat.data;
unsigned int cv_step = tmpMat.step;
CalypPixel currPel;
for( unsigned int y = 0; y < imgHeight; y++ )
{
for( unsigned int x = 0; x < imgWidth; x++ )
{
for( unsigned int ch = 0; ch < numChannels; ch++ )
{
currPel[ch] = 0;
for( unsigned b = 0; b < numBytes; b++ )
{
currPel[ch] = currPel[ch] + ( *( cv_data + y * cv_step + x * numChannels * numBytes + ch + b ) << ( 8 * b ) );
}
}
setPixel( x, y, currPel );
}
}
bRet = true;
}
else
{
ClpPel* pPel = d->m_pppcInputPel[CLP_LUMA][0];
for( unsigned int i = 0; i < d->m_uiWidth * d->m_uiHeight; i++ )
unsigned char* cv_data = cvMat.data;
ClpPel curr_pel;
ClpPel* pel = getPelBufferYUV()[channel][0];
for( unsigned int y = 0; y < imgHeight * imgWidth; y++ )
{
*pPel++ = *pCvPel++;
curr_pel = 0;
for( unsigned b = 0; b < numBytes; b++ )
curr_pel += ( *cv_data++ ) << ( 8 * b );
*pel++ = curr_pel;
}
bRet = true;
}
bRet = true;
#endif
return bRet;
}
@@ -1152,6 +1339,17 @@ std::vector<ClpString> CalypFrame::supportedQualityMetricsList()
"PSNR",
"MSE",
"SSIM",
"WS-PSNR",
};
}
std::vector<ClpString> CalypFrame::supportedQualityMetricsUnitsList()
{
return std::vector<ClpString>{
"dB",
"",
"",
"dB",
};
}
@@ -1172,6 +1370,9 @@ double CalypFrame::getQuality( int Metric, CalypFrame* Org, unsigned int compone
case SSIM_METRIC:
return getSSIM( Org, component );
break;
case WSPSNR_METRIC:
return getWSPNR( Org, component );
break;
default:
assert( 0 );
};
@@ -1182,43 +1383,27 @@ double CalypFrame::getMSE( CalypFrame* Org, unsigned int component )
{
ClpPel* pPelYUV = getPelBufferYUV()[component][0];
ClpPel* pOrgPelYUV = Org->getPelBufferYUV()[component][0];
int aux_pel_1, aux_pel_2;
int diff = 0;
double ssd = 0;
unsigned int numberOfPixels = 0;
if( component == CLP_LUMA )
{
numberOfPixels = Org->getHeight() * Org->getWidth();
}
else
{
numberOfPixels = getChromaLength();
}
ClpULong numberOfPixels = Org->getHeight( component ) * Org->getWidth( component );
ClpULong ssd = 0;
for( unsigned int i = 0; i < numberOfPixels; i++ )
{
aux_pel_1 = *pPelYUV++;
aux_pel_2 = *pOrgPelYUV++;
diff = aux_pel_1 - aux_pel_2;
ssd += (double)( diff * diff );
int diff = int( *pPelYUV++ ) - int( *pOrgPelYUV++ );
ssd += diff * diff;
}
if( ssd == 0.0 )
{
return 0.0;
}
return ssd / double( numberOfPixels );
return double( ssd ) / double( numberOfPixels );
}
double CalypFrame::getPSNR( CalypFrame* Org, unsigned int component )
{
unsigned int uiMaxValue = ( 1 << Org->getBitsPel() ) - 1;
double uiMaxValueSquare = uiMaxValue * uiMaxValue;
ClpULong uiMaxValue = ( 1 << Org->getBitsPel() ) - 1;
double dPSNR = 100;
double dMSE = getMSE( Org, component );
if( dMSE != 0 )
dPSNR = 10 * log10( uiMaxValueSquare / dMSE );
dPSNR = 10 * log10( double( uiMaxValue * uiMaxValue ) / dMSE );
return dPSNR;
}
@@ -1304,3 +1489,30 @@ double CalypFrame::getSSIM( CalypFrame* Org, unsigned int component )
}
return dSSIM;
}
double CalypFrame::getWSPNR( CalypFrame* Org, unsigned int component )
{
ClpPel* pPelYUV = getPelBufferYUV()[component][0];
ClpPel* pOrgPelYUV = Org->getPelBufferYUV()[component][0];
unsigned height = getHeight( component );
unsigned width = getWidth( component );
double ssd = 0;
double weight_sum = 0;
for( unsigned y = 0; y < height; y++ )
for( unsigned x = 0; x < width; x++ )
{
int diff = int( *pPelYUV++ ) - int( *pOrgPelYUV++ );
double weight = cos( double( ( y + 0.5 - height / 2.0 ) * S_PI / height ) );
ssd += (double)( diff * diff * 1000 ) * weight;
weight_sum += weight * 1000;
}
if( ssd == 0.0 )
{
return 100.00;
}
unsigned long uiMaxValue = ( 1 << Org->getBitsPel() ) - 1;
return 10 * log10( double( uiMaxValue * uiMaxValue ) * weight_sum / ssd );
}
+82 -30
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -100,6 +100,7 @@ public:
static std::vector<ClpString> supportedPixelFormatListNames( int colorSpace );
static int numberOfFormats();
static int findPixelFormat( const ClpString& name );
static int pelformatColorSpace( const int idx );
/**
* Creates a new frame using the following configuration
@@ -110,7 +111,18 @@ public:
*
* @note this function might misbehave if the pixel format enum is not correct
*/
CalypFrame( unsigned int width, unsigned int height, int pelFormat, int bitsPixel = 8 );
CalypFrame( unsigned int width, unsigned int height, int pelFormat, unsigned bitsPixel = 8 );
/**
* Creates a new frame using the following configuration
*
* @param width width of the frame
* @param height height of the frame
* @param pel_format pixel format index (always use PixelFormats enum)
*
* @note this function might misbehave if the pixel format enum is not correct
*/
CalypFrame( unsigned int width, unsigned int height, int pelFormat, unsigned bitsPixel, bool has_negative_values );
/**
* Copy contructor
@@ -145,6 +157,7 @@ public:
MATCH_PEL_FMT = 4,
MATCH_BITS = 8,
MATCH_COLOR_SPACE_IGNORE_GRAY = 16,
MATCH_BYTES_PER_FRAME = 32,
MATCH_ALL = 0xFFFF,
};
@@ -179,46 +192,58 @@ public:
* Get the number of channels
* @return number of channels
*/
unsigned int getNumberChannels() const;
unsigned getNumberChannels() const;
/**
* Get width of the frame
* @param channel/component
* @return number of pixels
*/
unsigned int getWidth( int channel = 0 ) const;
unsigned int getWidth( unsigned channel = 0 ) const;
/**
* Get height of the frame
* @param channel/component
* @return number of pixels
*/
unsigned int getHeight( int channel = 0 ) const;
unsigned int getHeight( unsigned channel = 0 ) const;
/**
* Check if frame has negative values
* @return Boolean with the flag value
*/
bool getHasNegativeValues() const;
/**
* Get number of pixels of the frame
* @param channel/component
* @return number of pixels
*/
unsigned int getPixels( int channel = 0 ) const;
ClpULong getPixels( unsigned channel = 0 ) const;
/**
* Get the total number of pixels of the frame
* @return number of pixels
*/
ClpULong getTotalNumberOfPixels() const;
/**
* Get chroma width ratio
* @return ratio multiple of 2
*/
unsigned char getChromaWidthRatio() const;
unsigned getChromaWidthRatio() const;
/**
* Get chroma height ratio
* @return ratio multiple of 2
*/
unsigned char getChromaHeightRatio() const;
unsigned getChromaHeightRatio() const;
/**
* Get number of pixels in each chroma channel
* @return number of pixels
*/
unsigned int getChromaLength() const;
ClpULong getChromaLength() const;
/**
* Get number of bits per pixel
@@ -230,13 +255,13 @@ public:
* Get number of bytes per frame of an existing frame
* @return number of bytes per frame
*/
unsigned long getBytesPerFrame();
ClpULong getBytesPerFrame() const;
/**
* Get number of bytes per frame of a specific pixel format
* @return number of bytes per frame
*/
static unsigned long getBytesPerFrame( unsigned int uiWidth, unsigned int uiHeight, int iPixelFormat, unsigned int bitsPixel );
static ClpULong getBytesPerFrame( unsigned int uiWidth, unsigned int uiHeight, int iPixelFormat, unsigned int bitsPixel );
/**
* Reset frame pixels to zero
@@ -249,13 +274,14 @@ public:
unsigned char* getRGBBuffer() const;
/**
* Get pixel value at coordinates
* Get pixel value at coordinates
* @param ch frame channel
* @param xPos position in X axis
* @param yPos position in Y axis
* @param absolute whether it should return positive/negative values
* @return pixel value
*/
ClpPel operator()( unsigned int ch, unsigned int xPos, unsigned int yPos );
ClpPel operator()( unsigned int ch, unsigned int xPos, unsigned int yPos, bool absolute = true ) const;
/**
* Get pixel value at coordinates
@@ -263,7 +289,7 @@ public:
* @param yPos position in Y axis
* @return pixel value
*/
CalypPixel operator()( unsigned int xPos, unsigned int yPos );
CalypPixel operator()( unsigned int xPos, unsigned int yPos ) const;
/**
* Get pixel value at coordinates
@@ -271,7 +297,7 @@ public:
* @param yPos position in Y axis
* @return pixel value
*/
CalypPixel getPixel( unsigned int xPos, unsigned int yPos );
CalypPixel getPixel( unsigned int xPos, unsigned int yPos ) const;
/**
* Get pixel value at coordinates
@@ -290,10 +316,32 @@ public:
*/
void setPixel( unsigned int xPos, unsigned int yPos, CalypPixel pixel );
void copyFrom( const CalypFrame& );
void copyFrom( const CalypFrame* );
void copyFrom( const CalypFrame&, unsigned int, unsigned int );
void copyFrom( const CalypFrame*, unsigned int, unsigned int );
/**
* Copy a frame into the current buffer
* @param other frame to be copied
*/
void copyFrom( const CalypFrame& other );
void copyFrom( const CalypFrame* other );
/**
* Copy a region from a reference corresponding to the size
* of the size of the current frame
* @param other frame to be copied
* @param x x position on the reference frame
* @param y y position on the reference frame
*/
void copyFrom( const CalypFrame& other, unsigned x, unsigned y );
void copyFrom( const CalypFrame* other, unsigned x, unsigned y );
/**
* Copy a reference frame to a specific location on the current frame
* The whole reference frame is copied
* @param other frame to be copied
* @param x x position on the current frame
* @param y y position on the current frame
*/
void copyTo( const CalypFrame& other, unsigned x, unsigned y );
void copyTo( const CalypFrame* other, unsigned x, unsigned y );
void frameFromBuffer( ClpByte*, int, unsigned long );
void frameFromBuffer( ClpByte*, int );
@@ -322,22 +370,24 @@ public:
};
void calcHistogram();
unsigned int getMinimumPelValue( int channel );
unsigned int getMaximumPelValue( int channel );
unsigned int getMinimumPelValue( unsigned channel );
unsigned int getMaximumPelValue( unsigned channel );
unsigned int getMaximum( int channel );
unsigned int getNumPixelsRange( int channel, unsigned int start, unsigned int end );
double getMean( int channel, unsigned int start, unsigned int end );
int getMedian( int channel, unsigned int start, unsigned int end );
double getStdDev( int channel, unsigned int start, unsigned int end );
double getHistogramValue( int channel, unsigned int bin );
unsigned int getMaximum( unsigned channel );
unsigned int getNumPixelsRange( unsigned channel, unsigned int start, unsigned int end );
double getMean( unsigned channel, unsigned int start, unsigned int end );
int getMedian( unsigned channel, unsigned int start, unsigned int end );
double getStdDev( unsigned channel, unsigned int start, unsigned int end );
double getHistogramValue( unsigned channel, unsigned int bin );
unsigned int getNEBins( unsigned channel );
int getNumHistogramSegment();
double getEntropy( unsigned channel, unsigned int start, unsigned int end );
/**
* interface with OpenCV lib
*/
bool toMat( cv::Mat& cvMat, bool convertToGray = false );
bool fromMat( cv::Mat& cvMat );
bool toMat( cv::Mat& cvMat, bool convertToGray = false, bool scale = true, unsigned channel = 0 );
bool fromMat( cv::Mat& cvMat, int iChannel = -1 );
/**
* \ingroup CalypFrameGrp
@@ -353,15 +403,17 @@ public:
PSNR_METRIC = 0,
MSE_METRIC,
SSIM_METRIC,
WSPSNR_METRIC,
NUMBER_METRICS,
};
static std::vector<ClpString> supportedQualityMetricsList();
static std::vector<ClpString> supportedQualityMetricsUnitsList();
double getQuality( int Metric, CalypFrame* Org, unsigned int component );
double getMSE( CalypFrame* Org, unsigned int component );
double getPSNR( CalypFrame* Org, unsigned int component );
double getSSIM( CalypFrame* Org, unsigned int component );
double getWSPNR( CalypFrame* Org, unsigned int component );
/** @} */
private:
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
+22 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -50,6 +50,11 @@ public: \
if( !apcFrameList[i] ) \
return false;
#define _BASIC_MODULE_API_3_BREAK_CONDITION_ \
if( m_iFrameBufferCount == 0 ) \
if( apcFrameList.size() <= 0 ) \
return NULL;
/** Module_API_Version Enum
* \ingroup Calyp_Modules
* Version of the modules API required
@@ -59,6 +64,7 @@ enum Module_API_Version
{
CLP_MODULE_API_1,
CLP_MODULE_API_2,
CLP_MODULE_API_3,
};
/** Module_Type Enum
@@ -118,6 +124,9 @@ public:
//! Features/Requirements
unsigned int m_uiModuleRequirements;
unsigned int m_iFrameBufferCount;
CalypFrame* m_pcOutputFrame;
CalypOptions m_cModuleOptions;
CalypModuleIf()
@@ -125,6 +134,8 @@ public:
m_iModuleAPI = CLP_MODULE_API_1;
m_uiModuleRequirements = CLP_MODULE_REQUIRES_NOTHING;
m_pchModuleLongName = NULL;
m_pcOutputFrame = NULL;
m_iFrameBufferCount = 0;
}
virtual ~CalypModuleIf() {}
virtual void Delete() = 0;
@@ -149,6 +160,16 @@ public:
virtual double measure( std::vector<CalypFrame*> ) { return 0; }
virtual bool keyPressed( enum Module_Key_Supported ) { return false; }
virtual ClpString moduleInfo() { return ClpString(); }
/**
* Module API version 3
*/
virtual CalypFrame* getProcessedFrame() { return m_pcOutputFrame; }
virtual bool needFrame() { return m_iFrameBufferCount == 0 ? true : false; };
virtual bool flush()
{
m_iFrameBufferCount = 0;
return true;
};
};
#endif // __CALYPMODULESIF_H__
+83
View File
@@ -0,0 +1,83 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/**
* \file CalypOpenCVModuleIf.cpp
* \brief Calyp modules interface for OpenCV
*/
#include "CalypOpenCVModuleIf.h"
// OpenCV
#include <opencv2/opencv.hpp>
using cv::Mat;
bool CalypOpenCVModuleIf::create( std::vector<CalypFrame*> apcFrameList )
{
_BASIC_MODULE_API_2_CHECK_
bool bRet = false;
std::vector<Mat*> acMatList( apcFrameList.size() );
for( unsigned i = 0; i < apcFrameList.size(); i++ )
{
acMatList[i] = new Mat;
apcFrameList[i]->toMat( *acMatList[i], m_bConvertToGray );
}
Mat* outputMat = create_using_opencv( acMatList );
if( outputMat )
{
unsigned pelFormat = m_bConvertToGray ? CalypFrame::findPixelFormat( "GRAY" ) : apcFrameList[0]->getPelFormat();
m_pcOutputFrame = new CalypFrame( outputMat->cols, outputMat->rows, pelFormat, apcFrameList[0]->getBitsPel() );
bRet = true;
}
else
{
return false;
}
for( unsigned i = 0; i < apcFrameList.size(); i++ )
{
delete acMatList[i];
}
return bRet;
}
CalypFrame* CalypOpenCVModuleIf::process( std::vector<CalypFrame*> apcFrameList )
{
m_pcOutputFrame->reset();
std::vector<Mat*> acMatList( apcFrameList.size() );
for( unsigned i = 0; i < apcFrameList.size(); i++ )
{
acMatList[i] = new Mat;
apcFrameList[i]->toMat( *acMatList[i], m_bConvertToGray );
}
Mat* cvOutput = process_using_opencv( acMatList );
m_pcOutputFrame->fromMat( *cvOutput );
for( unsigned i = 0; i < apcFrameList.size(); i++ )
{
delete acMatList[i];
}
return m_pcOutputFrame;
}
void CalypOpenCVModuleIf::destroy()
{
if( m_pcOutputFrame )
delete m_pcOutputFrame;
m_pcOutputFrame = NULL;
}
+65
View File
@@ -0,0 +1,65 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/**
* \file CalypOpenCVModuleIf.h
* \ingroup CalypLibGroup
* \brief Calyp modules interface for OpenCV
*/
#ifndef __CALYPOPENCVMODULEIF_H__
#define __CALYPOPENCVMODULEIF_H__
#include "CalypModuleIf.h"
namespace cv
{
class Mat;
}
/**
* \class CalypOpenCVModuleIf
* \ingroup CalypLib Calyp_Modules
* \brief Abstract class for modules using OpenCV library
*/
class CalypOpenCVModuleIf : public CalypModuleIf
{
protected:
const char* m_pchPythonFunctionName;
bool m_bConvertToGray;
public:
CalypOpenCVModuleIf()
{
m_bConvertToGray = false;
};
virtual ~CalypOpenCVModuleIf() {}
// Common API
bool create( std::vector<CalypFrame*> apcFrameList );
CalypFrame* process( std::vector<CalypFrame*> apcFrameList );
void destroy();
// API using OpenCV
virtual cv::Mat* create_using_opencv( std::vector<cv::Mat*> apcFrameList ) { return NULL; };
virtual cv::Mat* process_using_opencv( std::vector<cv::Mat*> apcFrameList ) = 0;
virtual void destroy_using_opencv(){};
};
#endif // __CALYPOPENCVMODULEIF_H__
+20 -14
View File
@@ -38,13 +38,13 @@
#include "CalypOptions.h"
#include "config.h"
#include "lib/CalypModuleIf.h"
#include <cstring>
#include <iostream>
#include <sstream>
#include "config.h"
#include "lib/CalypModuleIf.h"
using namespace std;
struct ParseFailure : public std::exception
@@ -62,7 +62,7 @@ class boolOption : public OptionBase
{
public:
boolOption( const ClpString& name, const ClpString& desc )
: OptionBase( name, desc ) { is_binary = true; }
: OptionBase( name, desc, "(1-0)" ) { is_binary = true; }
void parse( const ClpString& arg ) { arg_count++; }
};
@@ -71,8 +71,8 @@ template <typename T>
class StandardOption : public OptionBase
{
public:
StandardOption( const ClpString& name, T& storage, const ClpString& desc )
: OptionBase( name, desc ), opt_storage( storage )
StandardOption( const ClpString& name, T& storage, const ClpString& desc, const ClpString& def )
: OptionBase( name, desc, def ), opt_storage( storage )
{
is_binary = false;
}
@@ -160,8 +160,8 @@ struct FunctionOption : public OptionBase
public:
typedef void( Func )( CalypOptions&, const ClpString& );
FunctionOption( const ClpString& name, CalypOptions& parent_, Func* func_, const ClpString& desc )
: OptionBase( name, desc ), parent( parent_ ), func( func_ )
FunctionOption( const ClpString& name, CalypOptions& parent_, Func* func_, const ClpString& desc, const ClpString& def )
: OptionBase( name, desc, def ), parent( parent_ ), func( func_ )
{
is_binary = false;
}
@@ -198,6 +198,13 @@ CalypOptions& CalypOptions::operator()( const ClpString& name, const ClpString&
*/
template <typename T>
CalypOptions& CalypOptions::operator()( const ClpString& name, T& storage, const ClpString& desc )
{
addOption( new StandardOption<T>( name, storage, desc, ClpString( "" ) ) );
return *this;
}
template <typename T>
CalypOptions& CalypOptions::operator()( const ClpString& name, T& storage, const ClpString& desc, const ClpString& defaults )
{
addOption( new StandardOption<T>( name, storage, desc ) );
return *this;
@@ -277,7 +284,7 @@ bool CalypOptions::hasOpt( const ClpString& optName )
void CalypOptions::addDefaultOptions()
{
addOptions() /**/
( "help,h", "produce help message" ) /**/
( "help", "produce help message" ) /**/
( "version", "show version and exit" ) /**/
( "pel_fmts", "list pixel formats" ) /**/
( "quality_metrics", "list supported quality metrics" ) /**/
@@ -470,27 +477,26 @@ unsigned int CalypOptions::parseSHORT( unsigned int argc, char* argv[] )
return 1;
}
bool CalypOptions::parse( unsigned int argc, char* argv[] )
int CalypOptions::parse( unsigned int argc, char* argv[] )
{
try
{
m_aUnhandledArgs = scanArgv( argc, argv );
if( checkListingOpts() )
{
return false;
return 1;
}
}
catch( std::exception& e )
{
std::cerr << "error: " << e.what() << "\n";
return false;
return -1;
}
catch( ... )
{
std::cerr << "Exception of unknown type!\n";
}
return true;
return 0;
}
list<const char*> CalypOptions::scanArgv( unsigned int argc, char* argv[] )
+10 -6
View File
@@ -40,11 +40,11 @@
#ifndef __CALYPOPTIONS_H__
#define __CALYPOPTIONS_H__
#include "CalypDefs.h"
#include <list>
#include <map>
#include "CalypDefs.h"
/**
* \class OptionBase
* \ingroup CalypLibGrp
@@ -55,8 +55,8 @@
class OptionBase
{
public:
OptionBase( const ClpString& name, const ClpString& desc )
: arg_count( 0 ), opt_string( name ), opt_desc( desc ) {}
OptionBase( const ClpString& name, const ClpString& desc, const ClpString& def )
: arg_count( 0 ), opt_string( name ), opt_desc( desc ), opt_defaults( def ) {}
virtual ~OptionBase() {}
/* parse argument arg, to obtain a value for the option */
virtual void parse( const ClpString& arg ) = 0;
@@ -65,6 +65,7 @@ public:
int arg_count;
ClpString opt_string;
ClpString opt_desc;
ClpString opt_defaults;
bool is_binary;
};
@@ -89,7 +90,7 @@ public:
CalypOptions( const ClpString& name = "" );
~CalypOptions();
bool parse( unsigned int argc, char* argv[] );
int parse( unsigned int argc, char* argv[] );
void parse( std::vector<ClpString> args_array );
std::list<const char*>& getUnhandledArgs() { return m_aUnhandledArgs; }
@@ -117,11 +118,14 @@ public:
* Add option described by name to the parent Options list,
* with storage for the option's value
* with default_val as the default value
* with desc as an optional help description
* description and range along with default value
*/
template <typename T>
CalypOptions& operator()( const ClpString& name, T& storage, const ClpString& desc );
template <typename T>
CalypOptions& operator()( const ClpString& name, T& storage, const ClpString& desc, const ClpString& defaults );
bool checkListingOpts();
private:
+7 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -23,7 +23,6 @@
*/
#include "CalypFrame.h"
#include "PixelFormats.h"
#include "config.h"
@@ -51,9 +50,12 @@ static inline void yuvToRgb( const int& iY, const int& iU, const int& iV, int& i
iR = iY + ( ( 1436 * ( iV - 128 ) ) >> 10 );
iG = iY - ( ( 352 * ( iU - 128 ) + 731 * ( iV - 128 ) ) >> 10 );
iB = iY + ( ( 1812 * ( iU - 128 ) ) >> 10 );
iR = iR < 0 ? 0 : iR > 255 ? 255 : iR;
iG = iG < 0 ? 0 : iG > 255 ? 255 : iG;
iB = iB < 0 ? 0 : iB > 255 ? 255 : iB;
iR = iR < 0 ? 0 : iR > 255 ? 255 :
iR;
iG = iG < 0 ? 0 : iG > 255 ? 255 :
iG;
iB = iB < 0 ? 0 : iB > 255 ? 255 :
iB;
}
static inline void rgbToYuv( const int& iR, const int& iG, const int& iB, int& iY, int& iU, int& iV )
+31 -18
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -78,6 +78,7 @@ std::vector<CalypStandardResolution> CalypStream::stdResolutionSizes()
std::vector<CalypStandardResolution> stdResList;
CalypStandardResolution stdResElement;
REGIST_CALYP_STANDARD_RESOLUTION( "QCIF", 176, 144 );
REGIST_CALYP_STANDARD_RESOLUTION( "CIF", 352, 288 );
REGIST_CALYP_STANDARD_RESOLUTION( "VGA", 640, 480 );
REGIST_CALYP_STANDARD_RESOLUTION( "WVGA", 832, 480 );
@@ -89,7 +90,9 @@ std::vector<CalypStandardResolution> CalypStream::stdResolutionSizes()
REGIST_CALYP_STANDARD_RESOLUTION( "FullHD", 1920, 1080 );
REGIST_CALYP_STANDARD_RESOLUTION( "WQXGA", 2560, 1600 );
REGIST_CALYP_STANDARD_RESOLUTION( "UltraHD", 3840, 2160 );
REGIST_CALYP_STANDARD_RESOLUTION( "8K", 8192, 4608 );
REGIST_CALYP_STANDARD_RESOLUTION( "6K 2:1", 6144, 3072 );
REGIST_CALYP_STANDARD_RESOLUTION( "8K", 7680, 4320 );
REGIST_CALYP_STANDARD_RESOLUTION( "8K 2:1", 8192, 4096 );
return stdResList;
}
@@ -100,11 +103,11 @@ private:
unsigned int m_uiIndex;
public:
CalypStreamBufferPrivate( unsigned int size, unsigned int width, unsigned int height, int pelFormat, int bitsPixel )
CalypStreamBufferPrivate( unsigned int size, unsigned int width, unsigned int height, int pelFormat, int bitsPixel, bool hasNegative )
{
for( unsigned int i = 0; i < size; i++ )
{
CalypFrame* pFrame = new CalypFrame( width, height, pelFormat, bitsPixel );
CalypFrame* pFrame = new CalypFrame( width, height, pelFormat, bitsPixel, hasNegative );
m_apcFrameBuffer.push_back( pFrame );
}
m_uiIndex = 0;
@@ -226,16 +229,16 @@ CalypStream::~CalypStream()
close();
}
ClpString CalypStream::getFormatName()
ClpString CalypStream::getFormatName() const
{
return !d->handler ? "" : d->handler->getFormatName();
}
ClpString CalypStream::getCodecName()
ClpString CalypStream::getCodecName() const
{
return !d->handler ? "" : d->handler->getCodecName();
}
bool CalypStream::open( ClpString filename, ClpString resolution, ClpString input_format_name, unsigned int bitsPel, int endianness,
bool CalypStream::open( ClpString filename, ClpString resolution, ClpString input_format_name, unsigned int bitsPel, int endianness, bool hasNegative,
unsigned int frame_rate, bool bInput )
{
unsigned int width = 0;
@@ -258,11 +261,17 @@ bool CalypStream::open( ClpString filename, ClpString resolution, ClpString inpu
break;
}
}
return open( filename, width, height, input_format, bitsPel, endianness, frame_rate, bInput );
return open( filename, width, height, input_format, bitsPel, endianness, hasNegative, frame_rate, bInput );
}
bool CalypStream::open( ClpString filename, unsigned int width, unsigned int height, int input_format, unsigned int bitsPel, int endianness,
unsigned int frame_rate, bool bInput )
{
return open( filename, width, height, input_format, bitsPel, endianness, false, frame_rate, bInput );
}
bool CalypStream::open( ClpString filename, unsigned int width, unsigned int height, int input_format, unsigned int bitsPel, int endianness, bool hasNegative,
unsigned int frame_rate, bool bInput )
{
if( d->isInit )
{
@@ -311,7 +320,7 @@ bool CalypStream::open( ClpString filename, unsigned int width, unsigned int hei
try
{
d->frameBuffer = new CalypStreamBufferPrivate( d->isInput ? 3 : 1, d->handler->m_uiWidth, d->handler->m_uiHeight,
d->handler->m_iPixelFormat, d->handler->m_uiBitsPerPixel );
d->handler->m_iPixelFormat, d->handler->m_uiBitsPerPixel, hasNegative );
}
catch( CalypFailure& e )
{
@@ -389,17 +398,17 @@ void CalypStream::close()
d->isInit = false;
}
ClpString CalypStream::getFileName()
ClpString CalypStream::getFileName() const
{
return d->cFilename;
}
bool CalypStream::isNative()
bool CalypStream::isNative() const
{
return d->handler->m_bNative;
}
unsigned int CalypStream::getFrameNum()
ClpULong CalypStream::getFrameNum() const
{
return d->handler->m_uiTotalNumberFrames;
}
@@ -411,22 +420,26 @@ unsigned int CalypStream::getHeight() const
{
return d->handler->m_uiHeight;
}
unsigned int CalypStream::getBitsPerPixel() const
{
return d->handler->m_uiBitsPerPixel;
}
int CalypStream::getEndianess() const
{
return d->handler->m_iEndianness;
}
double CalypStream::getFrameRate()
double CalypStream::getFrameRate() const
{
return d->handler->m_dFrameRate;
}
int CalypStream::getCurrFrameNum()
long CalypStream::getCurrFrameNum() const
{
return d->iCurrFrameNum;
}
void CalypStream::getFormat( unsigned int& rWidth, unsigned int& rHeight, int& rInputFormat, unsigned int& rBitsPerPel, int& rEndianness,
unsigned int& rFrameRate )
unsigned int& rFrameRate ) const
{
if( d->isInit )
{
@@ -472,7 +485,7 @@ void CalypStream::loadAll()
d->iCurrFrameNum = 0;
}
void CalypStream::getDuration( int* duration_array )
void CalypStream::getDuration( int* duration_array ) const
{
// int hours, mins, secs = 0;
// #ifdef USE_FFMPEG
@@ -571,7 +584,7 @@ void CalypStream::readNextFrameFillRGBBuffer()
return;
}
CalypFrame* CalypStream::getCurrFrame( CalypFrame* pyuv_image )
CalypFrame* CalypStream::getCurrFrame( CalypFrame* pyuv_image ) const
{
if( pyuv_image == NULL )
pyuv_image = new CalypFrame( d->frameBuffer->current() );
@@ -580,7 +593,7 @@ CalypFrame* CalypStream::getCurrFrame( CalypFrame* pyuv_image )
return pyuv_image;
}
CalypFrame* CalypStream::getCurrFrame()
CalypFrame* CalypStream::getCurrFrame() const
{
return d->frameBuffer->current();
}
+19 -13
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -67,26 +67,32 @@ public:
CalypStream();
~CalypStream();
ClpString getFormatName();
ClpString getCodecName();
ClpString getFormatName() const;
;
ClpString getCodecName() const;
;
bool open( ClpString filename, ClpString resolution, ClpString input_format, unsigned int bitsPel, int endianness, unsigned int frame_rate,
bool open( ClpString filename, ClpString resolution, ClpString input_format, unsigned int bitsPel, int endianness, bool hasNegative, unsigned int frame_rate,
bool bInput );
bool open( ClpString filename, unsigned int width, unsigned int height, int input_format, unsigned int bitsPel, int endianness, unsigned int frame_rate,
bool bInput );
bool open( ClpString filename, unsigned int width, unsigned int height, int input_format, unsigned int bitsPel, int endianness, bool hasNegative, unsigned int frame_rate,
bool bInput );
bool reload();
void close();
bool isNative();
ClpString getFileName();
unsigned int getFrameNum();
bool isNative() const;
ClpString getFileName() const;
ClpULong getFrameNum() const;
unsigned int getWidth() const;
unsigned int getHeight() const;
unsigned int getBitsPerPixel() const;
int getEndianess() const;
int getCurrFrameNum();
double getFrameRate();
long getCurrFrameNum() const;
double getFrameRate() const;
void getFormat( unsigned int& rWidth, unsigned int& rHeight, int& rInputFormat, unsigned int& rBitsPerPel, int& rEndianness,
unsigned int& rFrameRate );
unsigned int& rFrameRate ) const;
void loadAll();
@@ -96,18 +102,18 @@ public:
bool saveFrame( const ClpString& filename );
static bool saveFrame( const ClpString& filename, CalypFrame* saveFrame );
CalypFrame* getCurrFrame( CalypFrame* );
CalypFrame* getCurrFrame( CalypFrame* ) const;
// continuous read control
bool setNextFrame();
void readNextFrame();
void readNextFrameFillRGBBuffer();
CalypFrame* getCurrFrame();
CalypFrame* getCurrFrame() const;
bool seekInputRelative( bool bIsFoward );
bool seekInput( unsigned long new_frame_num );
void getDuration( int* duration_array );
void getDuration( int* duration_array ) const;
private:
bool readFrame( CalypFrame* frame );
+7 -7
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -37,7 +37,7 @@
formatElem.formatName = name; \
formatElem.formatExt = clpLowercase( ext ); \
formatElem.formatFct = handler; \
formatsList.push_back( formatElem );
formatsList.push_back( formatElem )
#define REGIST_CALYP_SUPPORTED_ABSTRACT_FMT( handler, name, pattern ) \
formatElem.formatPattern = pattern; \
@@ -70,13 +70,13 @@ public:
CalypStreamHandlerIf()
: m_bIsInput( true )
, m_bNative( true )
, m_uiCurrFrameFileIdx( 0 )
, m_uiWidth( 0 )
, m_uiHeight( 0 )
, m_iPixelFormat( -1 )
, m_uiBitsPerPixel( 8 )
, m_iEndianness( -1 )
, m_dFrameRate( 30 )
, m_uiCurrFrameFileIdx( 0 )
, m_uiTotalNumberFrames( 0 )
, m_pStreamBuffer( NULL )
, m_uiNBytesPerFrame( 0 )
@@ -89,7 +89,7 @@ public:
virtual bool openHandler( ClpString strFilename, bool bInput ) = 0;
virtual void closeHandler() = 0;
virtual bool configureBuffer( CalypFrame* pcFrame ) = 0;
virtual bool seek( unsigned long long int iFrameNum ) = 0;
virtual bool seek( ClpULong iFrameNum ) = 0;
virtual bool read( CalypFrame* pcFrame ) = 0;
virtual bool write( CalypFrame* pcFrame ) = 0;
@@ -105,7 +105,6 @@ protected:
ClpString m_strCodecName;
bool m_bIsInput;
bool m_bNative;
unsigned long m_uiCurrFrameFileIdx;
ClpString m_cFilename;
unsigned int m_uiWidth;
unsigned int m_uiHeight;
@@ -113,9 +112,10 @@ protected:
unsigned int m_uiBitsPerPixel;
int m_iEndianness;
double m_dFrameRate;
unsigned long m_uiTotalNumberFrames;
ClpULong m_uiCurrFrameFileIdx;
ClpULong m_uiTotalNumberFrames;
ClpByte* m_pStreamBuffer;
unsigned long m_uiNBytesPerFrame;
ClpULong m_uiNBytesPerFrame;
bool m_isEOF;
};
+3 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -55,7 +55,8 @@ static inline void* xCallocMem( size_t nitems, size_t size )
{
size_t padded_size = nitems * size;
void* d = xMallocMem( padded_size );
memset( d, 0, (int)padded_size );
if( d )
memset( d, 0, (int)padded_size );
return d;
}
+31 -48
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -56,9 +56,9 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
1,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_YUV420P ),
{
{0, 0, 1}, /* Y */
{1, 0, 1}, /* U */
{2, 0, 1}, /* V */
{ 0, 0, 1 }, /* Y */
{ 1, 0, 1 }, /* U */
{ 2, 0, 1 }, /* V */
},
},
},
@@ -73,9 +73,9 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_YUV422P ),
{
{0, 0, 1}, /* Y */
{1, 0, 1}, /* U */
{2, 0, 1}, /* V */
{ 0, 0, 1 }, /* Y */
{ 1, 0, 1 }, /* U */
{ 2, 0, 1 }, /* V */
},
},
},
@@ -90,9 +90,9 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_YUV444P ),
{
{0, 0, 1}, /* Y */
{1, 0, 1}, /* U */
{2, 0, 1}, /* V */
{ 0, 0, 1 }, /* Y */
{ 1, 0, 1 }, /* U */
{ 2, 0, 1 }, /* V */
},
},
},
@@ -107,9 +107,9 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_YUYV422 ),
{
{0, 1, 1}, /* Y */
{0, 3, 2}, /* U */
{0, 3, 4}, /* V */
{ 0, 1, 1 }, /* Y */
{ 0, 3, 2 }, /* U */
{ 0, 3, 4 }, /* V */
},
},
},
@@ -123,7 +123,7 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0,
0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_GRAY8 ),
{{0, 0, 1}}, /* Y */
{ { 0, 0, 1 } }, /* Y */
},
},
{
@@ -137,9 +137,9 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_NONE ),
{
{0, 0, 1}, /* R */
{1, 0, 1}, /* G */
{2, 0, 1}, /* B */
{ 0, 0, 1 }, /* R */
{ 1, 0, 1 }, /* G */
{ 2, 0, 1 }, /* B */
},
},
},
@@ -154,9 +154,9 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_RGB24 ),
{
{0, 2, 1}, /* R */
{0, 2, 2}, /* G */
{0, 2, 3}, /* B */
{ 0, 2, 1 }, /* R */
{ 0, 2, 2 }, /* G */
{ 0, 2, 3 }, /* B */
},
},
},
@@ -171,26 +171,9 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_BGR24 ),
{
{0, 2, 3}, /* R */
{0, 2, 2}, /* G */
{0, 2, 1}, /* B */
},
},
},
{
CLP_BGR24,
{
"BGR",
CLP_COLOR_RGB,
3,
1,
0,
0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_BGR24 ),
{
{0, 2, 3}, /* R */
{0, 2, 2}, /* G */
{0, 2, 1}, /* B */
{ 0, 2, 3 }, /* R */
{ 0, 2, 2 }, /* G */
{ 0, 2, 1 }, /* B */
},
},
},
@@ -205,10 +188,10 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_RGBA ),
{
{0, 3, 1}, /* R */
{0, 3, 2}, /* G */
{0, 3, 3}, /* B */
{0, 3, 4}, /* A */
{ 0, 3, 1 }, /* R */
{ 0, 3, 2 }, /* G */
{ 0, 3, 3 }, /* B */
{ 0, 3, 4 }, /* A */
},
},
},
@@ -223,10 +206,10 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_BGRA ),
{
{0, 3, 3}, /* R */
{0, 3, 2}, /* G */
{0, 3, 1}, /* B */
{0, 3, 4}, /* A */
{ 0, 3, 3 }, /* R */
{ 0, 3, 2 }, /* G */
{ 0, 3, 1 }, /* B */
{ 0, 3, 4 }, /* A */
},
},
},
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -25,10 +25,10 @@
#ifndef __PIXELFORMATS_H__
#define __PIXELFORMATS_H__
#include "CalypFrame.h"
#include <map>
#include "CalypFrame.h"
#define CHROMA_RESAMPLING( X ) ( ( ( X + 1 ) >> 1 ) << 1 )
#define CHROMARATIO( SIZE, RATIO ) ( RATIO > 1 ? ( ( SIZE + 1 ) / RATIO ) : SIZE )
+8 -8
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,14 +24,14 @@
#include "StreamHandlerLibav.h"
#include <cstdio>
#include <iostream>
#include "CalypFrame.h"
#include "LibMemory.h"
#include "PixelFormats.h"
#include <cstdio>
#include <iostream>
#if( ( LIBAVCODEC_VERSION_MAJOR >= 57 ) && ( LIBAVCODEC_VERSION_MINOR >= 37 ) )
#if( ( LIBAVCODEC_VERSION_MAJOR > 57 ) || ( LIBAVCODEC_VERSION_MAJOR == 57 ) && ( LIBAVCODEC_VERSION_MINOR >= 37 ) )
#define FF_SEND_RECEIVE_API
#define FF_USER_CODEC_PARAM
#endif
@@ -91,7 +91,7 @@ bool StreamHandlerLibav::openHandler( ClpString strFilename, bool bInput )
// }
// Register all components of FFmpeg
av_register_all();
//av_register_all();
/* open input file, and allocate format context */
if( avformat_open_input( &m_cFmtCtx, filename, NULL, NULL ) < 0 )
@@ -335,7 +335,7 @@ bool StreamHandlerLibav::configureBuffer( CalypFrame* pcFrame )
void StreamHandlerLibav::calculateFrameNumber()
{
unsigned long long int num_frames;
ClpULong num_frames;
/*if( m_cStream->nb_frames )
{
num_frames = m_cStream->nb_frames;
@@ -442,7 +442,7 @@ bool StreamHandlerLibav::write( CalypFrame* pcFrame )
return false;
}
bool StreamHandlerLibav::seek( unsigned long long int iFrameNum )
bool StreamHandlerLibav::seek( ClpULong iFrameNum )
{
if( m_uiTotalNumberFrames == 1 )
return true;
+3 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -27,6 +27,7 @@
#define __STREAMHANDLERLIBAV_H__
#include <inttypes.h>
#include <string>
#include <vector>
@@ -66,7 +67,7 @@ public:
void closeHandler();
bool configureBuffer( CalypFrame* pcFrame );
void calculateFrameNumber();
bool seek( unsigned long long int iFrameNum );
bool seek( ClpULong iFrameNum );
bool read( CalypFrame* pcFrame );
bool write( CalypFrame* pcFrame );
+27 -16
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,12 +24,15 @@
#include "StreamHandlerOpenCV.h"
#include "CalypFrame.h"
#include "LibMemory.h"
#include <cstdio>
#include <opencv2/opencv.hpp>
#include "CalypFrame.h"
#include "LibMemory.h"
#if CV_MAJOR_VERSION >= 3
#include <opencv2/videoio.hpp>
#endif
using cv::Mat;
using cv::VideoCapture;
@@ -37,7 +40,8 @@ std::vector<CalypStreamFormat> StreamHandlerOpenCV::supportedReadFormats()
{
INI_REGIST_CALYP_SUPPORTED_FMT;
#if( CV_MAJOR_VERSION >= 3 )
REGIST_CALYP_SUPPORTED_ABSTRACT_FMT( &StreamHandlerOpenCV::Create, "Device", "/dev/video*" );
REGIST_CALYP_SUPPORTED_ABSTRACT_FMT( &StreamHandlerOpenCV::Create, "Device",
"/dev/video*" );
#endif
END_REGIST_CALYP_SUPPORTED_FMT;
}
@@ -45,10 +49,12 @@ std::vector<CalypStreamFormat> StreamHandlerOpenCV::supportedReadFormats()
std::vector<CalypStreamFormat> StreamHandlerOpenCV::supportedWriteFormats()
{
INI_REGIST_CALYP_SUPPORTED_FMT;
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create, "Portable PixMap ", "ppm" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create, "Portable Network Graphics", "png" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create, "Joint Photographic Experts Group", "jpg" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create, "Windows Bitmap", "bmp" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create,
"Portable Network Graphics", "png" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create,
"Joint Photographic Experts Group", "jpg" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create, "Windows Bitmap",
"bmp" );
END_REGIST_CALYP_SUPPORTED_FMT;
}
@@ -78,14 +84,20 @@ bool StreamHandlerOpenCV::openHandler( ClpString strFilename, bool bInput )
m_strFormatName = "DEV";
m_strCodecName = "Raw Video";
pcVideoCapture = new VideoCapture( iDeviceId );
#if CV_MAJOR_VERSION >= 4
m_uiWidth = pcVideoCapture->get( cv::CAP_PROP_FRAME_WIDTH );
m_uiHeight = pcVideoCapture->get( cv::CAP_PROP_FRAME_HEIGHT );
#else
m_uiWidth = pcVideoCapture->get( CV_CAP_PROP_FRAME_WIDTH );
m_uiHeight = pcVideoCapture->get( CV_CAP_PROP_FRAME_HEIGHT );
#endif
m_dFrameRate = 25;
}
else
#endif
{
m_strCodecName = m_strFormatName = clpUppercase( strFilename.substr( strFilename.find_last_of( "." ) + 1 ) );
m_strCodecName = m_strFormatName =
clpUppercase( strFilename.substr( strFilename.find_last_of( "." ) + 1 ) );
Mat cvMat = cv::imread( m_cFilename );
m_uiWidth = cvMat.cols;
m_uiHeight = cvMat.rows;
@@ -119,7 +131,7 @@ bool StreamHandlerOpenCV::configureBuffer( CalypFrame* pcFrame )
return true;
}
bool StreamHandlerOpenCV::seek( unsigned long long int iFrameNum )
bool StreamHandlerOpenCV::seek( ClpULong iFrameNum )
{
// m_uiCurrFrameFileIdx =
return true;
@@ -149,10 +161,9 @@ bool StreamHandlerOpenCV::write( CalypFrame* pcFrame )
{
bool bRet = false;
Mat cvFrame;
bRet = pcFrame->toMat( cvFrame );
if( bRet )
{
bRet = cv::imwrite( m_cFilename, cvFrame );
}
bRet = pcFrame->toMat( cvFrame, false, true );
if( !bRet )
return bRet;
bRet = cv::imwrite( m_cFilename, cvFrame );
return bRet;
}
+2 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -43,7 +43,7 @@ public:
bool openHandler( ClpString strFilename, bool bInput );
void closeHandler();
bool configureBuffer( CalypFrame* pcFrame );
bool seek( unsigned long long int iFrameNum );
bool seek( ClpULong iFrameNum );
bool read( CalypFrame* pcFrame );
bool write( CalypFrame* pcFrame );
+44 -30
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,16 +24,16 @@
#include "StreamHandlerPortableMap.h"
#include "CalypFrame.h"
#include "LibMemory.h"
#include <cmath>
#include <cstdio>
#include "CalypFrame.h"
#include "LibMemory.h"
std::vector<CalypStreamFormat> StreamHandlerPortableMap::supportedReadFormats()
{
INI_REGIST_CALYP_SUPPORTED_FMT;
//REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerPortableMap::Create, "Portable BitMap ", "pbm" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerPortableMap::Create, "Portable BitMap ", "pbm" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerPortableMap::Create, "Portable GrayMap ", "pgm" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerPortableMap::Create, "Portable PixMap ", "ppm" );
END_REGIST_CALYP_SUPPORTED_FMT;
@@ -42,7 +42,9 @@ std::vector<CalypStreamFormat> StreamHandlerPortableMap::supportedReadFormats()
std::vector<CalypStreamFormat> StreamHandlerPortableMap::supportedWriteFormats()
{
INI_REGIST_CALYP_SUPPORTED_FMT;
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerPortableMap::Create, "Portable BitMap ", "pbm" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerPortableMap::Create, "Portable GrayMap ", "pgm" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerPortableMap::Create, "Portable PixMap ", "ppm" );
END_REGIST_CALYP_SUPPORTED_FMT;
}
@@ -50,62 +52,71 @@ bool StreamHandlerPortableMap::openHandler( ClpString strFilename, bool bInput )
{
m_bIsInput = bInput;
m_pFile = NULL;
m_pFile = fopen( strFilename.c_str(), bInput ? "rb" : "wb" );
if( m_pFile == NULL )
{
return false;
}
m_strFormatName = "PGM";
m_strCodecName = "Raw Video";
if( m_bIsInput )
{
m_pFile = fopen( strFilename.c_str(), "rb" );
char line[101];
while( fgets( line, 100, m_pFile ) && line[0] == '#' )
;
sscanf( line, "P%d", &m_iMagicNumber );
while( fgets( line, 100, m_pFile ) && line[0] == '#' )
;
sscanf( line, "%u %u", &m_uiWidth, &m_uiHeight );
if( m_iMagicNumber == 1 || m_iMagicNumber == 4 )
{
m_uiBitsPerPixel = 1;
m_iMaxValue = 1;
m_iPixelFormat = CLP_GRAY;
}
else
if( sscanf( line, "P%d %u %u %d", &m_iMagicNumber, &m_uiWidth, &m_uiHeight, &m_iMaxValue ) != 4 )
{
sscanf( line, "P%d", &m_iMagicNumber );
while( fgets( line, 100, m_pFile ) && line[0] == '#' )
;
sscanf( line, "%d", &m_iMaxValue );
m_uiBitsPerPixel = log( m_iMaxValue + 1 ) / log( 2 );
m_iPixelFormat = m_iMagicNumber == 2 || m_iMagicNumber == 5 ? CLP_GRAY : CLP_RGB24;
sscanf( line, "%u %u", &m_uiWidth, &m_uiHeight );
if( m_iMagicNumber == 1 )
{
m_iMaxValue = 1;
}
else
{
while( fgets( line, 100, m_pFile ) && line[0] == '#' )
;
sscanf( line, "%d", &m_iMaxValue );
}
}
m_uiBitsPerPixel = log( m_iMaxValue + 1 ) / log( 2 );
m_iPixelFormat = m_iMagicNumber == 1 || m_iMagicNumber == 2 || m_iMagicNumber == 5 ? CLP_GRAY : CLP_RGB24;
}
else
{
int colorSpace = CalypFrame::pelformatColorSpace( m_iPixelFormat );
m_iMaxValue = ( 1 << m_uiBitsPerPixel ) - 1;
if( m_uiBitsPerPixel == 1 )
{
m_iMagicNumber = 4;
m_iMagicNumber = 1;
m_iPixelFormat = CalypFrame::findPixelFormat( "GRAY" );
}
else if( m_iPixelFormat == CLP_GRAY )
else if( colorSpace == CLP_COLOR_GRAY )
{
m_iMagicNumber = 5;
m_iPixelFormat = CalypFrame::findPixelFormat( "GRAY" );
}
else if( m_iPixelFormat == CLP_RGB24 )
else if( colorSpace == CLP_COLOR_RGB )
{
m_iMagicNumber = 6;
m_iPixelFormat = CalypFrame::findPixelFormat( "RGB" );
}
else
{
closeHandler();
throw CalypFailure( "CalypStream", "Invalid format for portable map" );
return false;
}
m_pFile = fopen( strFilename.c_str(), "wb" );
}
m_iEndianness = 0;
m_iEndianness = CLP_BIG_ENDIAN;
m_dFrameRate = 1;
m_uiTotalNumberFrames = 1;
if( m_pFile == NULL )
{
closeHandler();
return false;
}
return true;
}
@@ -123,7 +134,7 @@ bool StreamHandlerPortableMap::configureBuffer( CalypFrame* pcFrame )
return getMem1D<ClpByte>( &m_pStreamBuffer, pcFrame->getBytesPerFrame() );
}
bool StreamHandlerPortableMap::seek( unsigned long long int iFrameNum )
bool StreamHandlerPortableMap::seek( ClpULong iFrameNum )
{
// m_uiCurrFrameFileIdx =
return true;
@@ -141,13 +152,16 @@ bool StreamHandlerPortableMap::read( CalypFrame* pcFrame )
bool StreamHandlerPortableMap::write( CalypFrame* pcFrame )
{
CalypFrame pcRGBFrame( pcFrame->getWidth(), pcFrame->getHeight(),
m_iPixelFormat, pcFrame->getBitsPel() );
pcRGBFrame.copyFrom( pcFrame );
fseek( m_pFile, 0, SEEK_SET );
fprintf( m_pFile, "P%d\n%d %d\n", m_iMagicNumber, m_uiWidth, m_uiHeight );
if( m_iMagicNumber > 4 )
{
fprintf( m_pFile, "%d\n", m_iMaxValue );
}
pcFrame->frameToBuffer( m_pStreamBuffer, CLP_BIG_ENDIAN );
pcRGBFrame.frameToBuffer( m_pStreamBuffer, m_iEndianness );
unsigned long long int processed_bytes = fwrite( m_pStreamBuffer, sizeof( ClpByte ), m_uiNBytesPerFrame, m_pFile );
if( processed_bytes != m_uiNBytesPerFrame )
return false;
+2 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -38,7 +38,7 @@ public:
bool openHandler( ClpString strFilename, bool bInput );
void closeHandler();
bool configureBuffer( CalypFrame* pcFrame );
bool seek( unsigned long long int iFrameNum );
bool seek( ClpULong iFrameNum );
bool read( CalypFrame* pcFrame );
bool write( CalypFrame* pcFrame );
+6 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -24,11 +24,11 @@
#include "StreamHandlerRaw.h"
#include <cstdio>
#include "CalypFrame.h"
#include "LibMemory.h"
#include <cstdio>
std::vector<CalypStreamFormat> StreamHandlerRaw::supportedReadFormats()
{
INI_REGIST_CALYP_SUPPORTED_FMT;
@@ -57,6 +57,7 @@ bool StreamHandlerRaw::openHandler( ClpString strFilename, bool bInput )
calculateFrameNumber();
m_strFormatName = "YUV";
m_strCodecName = "Raw Video";
m_dFrameRate = 30;
return true;
}
@@ -78,13 +79,13 @@ void StreamHandlerRaw::calculateFrameNumber()
if( m_pFile && m_uiNBytesPerFrame > 0 )
{
fseek( m_pFile, 0, SEEK_END );
unsigned long long int fileSize = ftell( m_pFile );
unsigned long long fileSize = ftell( m_pFile );
fseek( m_pFile, 0, SEEK_SET );
m_uiTotalNumberFrames = fileSize / m_uiNBytesPerFrame;
}
}
bool StreamHandlerRaw::seek( unsigned long long int iFrameNum )
bool StreamHandlerRaw::seek( ClpULong iFrameNum )
{
if( m_bIsInput && m_pFile )
{
+2 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project
* Copyright (C) 2014-2018 by Joao Carreira (jfmcarreira@gmail.com)
* Copyright (C) 2014-2021 by Joao Carreira (jfmcarreira@gmail.com)
* Luis Lucas (luisfrlucas@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -46,7 +46,7 @@ public:
void closeHandler();
bool configureBuffer( CalypFrame* pcFrame );
void calculateFrameNumber();
bool seek( unsigned long long int iFrameNum );
bool seek( ClpULong iFrameNum );
bool read( CalypFrame* pcFrame );
bool write( CalypFrame* pcFrame );
};
Loaded 100 of 168 files, more files were not shown because too many files have changed in this diff. Show more