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 dist: xenial
before_install: before_install:
- sudo apt-get -qq update - 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 - 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 .. 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 # CMake functions
###################################################################################### # ####################################################################################################################################################
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ) SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
INCLUDE( cmake/ModulesFct.cmake ) INCLUDE(cmake/ModulesFct.cmake)
INCLUDE(FeatureSummary) INCLUDE(FeatureSummary)
INCLUDE(GNUInstallDirs) 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 # Variables
###################################################################################### # ####################################################################################################################################################
OPTION( BUILD_APP "Build GUI Application" ON ) OPTION(BUILD_APP "Build GUI Application" ON)
OPTION( BUILD_TOOLS "Build Command Line Application" ON ) OPTION(BUILD_TOOLS "Build Command Line Application" ON)
OPTION( BUILD_EXAMPLES "Build Examples" OFF ) OPTION(BUILD_EXAMPLES "Build Examples" OFF)
OPTION( BUILD_DOC "Build Documentation" OFF ) OPTION(BUILD_DOC "Build Documentation" OFF)
OPTION( BUILD_TESTS "Build Google Tests" 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_DYNLOAD "Use dynamic load of modules" ON)
OPTION( USE_SSE "Build with SSE support" OFF ) OPTION(USE_SSE "Build with SSE support" OFF)
OPTION( USE_WERROR "Warnings as errors" OFF ) OPTION(USE_WERROR "Warnings as errors" OFF)
OPTION( USE_STATIC "Use static libs" OFF ) OPTION(USE_STATIC "Use static libs" OFF)
# ####################################################################################################################################################
######################################################################################
# Release configuration # Release configuration
###################################################################################### # ####################################################################################################################################################
# To be switched on when releasing. # To be switched on when releasing.
OPTION(RELEASE_BUILD "Remove Git revision from program version (use for stable releases)" ON) OPTION(RELEASE_BUILD "Remove Git revision from program version (use for stable releases)" ON)
# Get current version. # Get current version.
set(CALYP_VERSION_STRING "${CALYP_VERSION}") SET(CALYP_VERSION_STRING "${CALYP_VERSION}")
if(NOT RELEASE_BUILD AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git) IF(NOT RELEASE_BUILD AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
# Probably a Git workspace; determine the revision. # Probably a Git workspace; determine the revision.
FIND_PACKAGE(Git QUIET) FIND_PACKAGE(Git QUIET)
if(GIT_FOUND) IF(GIT_FOUND)
exec_program(${GIT_EXECUTABLE} EXEC_PROGRAM(
${CMAKE_CURRENT_SOURCE_DIR} ${GIT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}
ARGS "describe --tags" ARGS "describe --tags"
OUTPUT_VARIABLE CALYP_GIT_REVISION OUTPUT_VARIABLE CALYP_GIT_REVISION
RETURN_VALUE TAG_RESULT RETURN_VALUE TAG_RESULT
) )
# git describe --tags failed; maybe the repository was checked with depth=1. # git describe --tags failed; maybe the repository was checked with depth=1.
if(NOT ${TAG_RESULT} EQUAL 0) IF(NOT ${TAG_RESULT} EQUAL 0)
exec_program(${GIT_EXECUTABLE} EXEC_PROGRAM(
${CMAKE_CURRENT_SOURCE_DIR} ${GIT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}
ARGS "describe --always" ARGS "describe --always"
OUTPUT_VARIABLE CALYP_GIT_REVISION OUTPUT_VARIABLE CALYP_GIT_REVISION
) )
endif() ENDIF()
message(STATUS "Calyp Git revision: ${CALYP_GIT_REVISION}") MESSAGE(STATUS "Calyp Git revision: ${CALYP_GIT_REVISION}")
set(CALYP_VERSION_STRING "${CALYP_VERSION} (rev. ${CALYP_GIT_REVISION})") SET(CALYP_VERSION_STRING "${CALYP_VERSION} (rev. ${CALYP_GIT_REVISION})")
else() ELSE()
message(STATUS "Calyp Git revision could not be determined") MESSAGE(STATUS "Calyp Git revision could not be determined")
endif() ENDIF()
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 ) # CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/CalypUpdate.xml.in ${CMAKE_CURRENT_BINARY_DIR}/CalypUpdate-${UPDATE_CHANNEL}.xml )
# ####################################################################################################################################################
######################################################################################
# Dependencies # Dependencies
###################################################################################### # ####################################################################################################################################################
IF( BUILD_DOC ) IF(BUILD_DOC)
FIND_PACKAGE(Doxygen) FIND_PACKAGE(Doxygen)
SET( BUILD_DOC ${Doxygen_FOUND} ) SET(BUILD_DOC ${Doxygen_FOUND})
ENDIF() 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) FIND_PACKAGE(GTest)
SET( BUILD_DOC ${GTEST_FOUND} ) SET(BUILD_DOC ${GTEST_FOUND})
IF( GTEST_FOUND ) IF(GTEST_FOUND)
ENABLE_TESTING() ENABLE_TESTING()
INCLUDE_DIRECTORIES(${GTEST_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(${GTEST_INCLUDE_DIRS})
ENDIF() ENDIF()
SET(CALYP_TEST_DATA_DIR
"CALYP_TEST_DATA_DIR"
CACHE PATH "Location of video information for testing"
)
ENDIF() ENDIF()
OPTION( USE_OPENCV "Add OpenCV support" ON ) IF(BUILD_TESTS_CATCH2)
IF( USE_OPENCV ) FIND_PACKAGE(Catch2 REQUIRED)
LIST(APPEND OPENCV_MODULES core highgui imgproc video videoio ) ENABLE_TESTING()
FIND_PACKAGE( OpenCV COMPONENTS ${OPENCV_MODULES} ) SET_PACKAGE_PROPERTIES(
SET(USE_OPENCV ${OpenCV_FOUND}) Catch2 PROPERTIES
URL "https://github.com/catchorg/Catch2"
DESCRIPTION "Catch2 unit tests"
TYPE OPTIONAL
)
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 ) OPTION(USE_OPENCV "Add OpenCV support" ON)
IF( USE_FFMPEG ) IF(USE_OPENCV)
FIND_PACKAGE( FFmpeg COMPONENTS AVCODEC AVFORMAT AVUTIL SWSCALE )
IF( "${AVCODEC_VERSION}" VERSION_LESS "56.0.0" ) FIND_PACKAGE(OpenCV COMPONENTS core highgui imgproc video)
SET(FFMPEG_FOUND FALSE ) IF(${OpenCV_FOUND})
SET(FFmpeg_FOUND FALSE ) 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()
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}) SET(USE_FFMPEG ${FFMPEG_FOUND})
ENDIF() 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 ) IF(WIN32)
SET( USE_STATIC ON ) SET(USE_STATIC ON)
INCLUDE( cmake/Win32.cmake ) INCLUDE(cmake/Win32.cmake)
ENDIF() ENDIF()
# ####################################################################################################################################################
######################################################################################
# CMake Defin1itions # CMake Defin1itions
###################################################################################### # ####################################################################################################################################################
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ) SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
INCLUDE(FeatureSummary) INCLUDE(FeatureSummary)
# must go before the project command # 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") 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() ENDIF()
SET( CMAKE_CXX_FLAGS "" ) SET(CMAKE_CXX_FLAGS "")
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} ) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
###################################################################################### # ####################################################################################################################################################
# Compiler options # Compiler options
###################################################################################### # ####################################################################################################################################################
SET(CMAKE_CXX_STANDARD 14) SET(CMAKE_CXX_STANDARD 14)
if(CMAKE_COMPILER_IS_GNUCXX) IF(CMAKE_COMPILER_IS_GNUCXX)
ADD_DEFINITIONS(-std=gnu++0x) 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")
ENDIF() ENDIF()
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" ) IF(NOT CMAKE_BUILD_TYPE)
MESSAGE(STATUS "No build type selected, default to Release")
ADD_DEFINITIONS(-DQT_NO_CAST_TO_ASCII SET(CMAKE_BUILD_TYPE "Release")
#-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" )
ENDIF() ENDIF()
SET( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0" ) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
SET( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2" )
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 # Configure targets
###################################################################################### # ####################################################################################################################################################
ADD_FEATURE_INFO(CalypApp BUILD_APP "Build Graphical interface") ADD_FEATURE_INFO(CalypApp BUILD_APP "Build Graphical interface")
ADD_FEATURE_INFO(CalypTools BUILD_TOOLS "Build Command line tool" ) ADD_FEATURE_INFO(CalypTools BUILD_TOOLS "Build Command line tool")
ADD_FEATURE_INFO(DynLoad USE_DYNLOAD "Support for dynamic module load" ) ADD_FEATURE_INFO(DynLoad USE_DYNLOAD "Support for dynamic module load")
ADD_FEATURE_INFO(SSE USE_SSE "SSE instructions support" ) ADD_FEATURE_INFO(SSE USE_SSE "SSE instructions support")
ADD_FEATURE_INFO(WErrors USE_WERROR "Warnings as errors" ) ADD_FEATURE_INFO(WErrors USE_WERROR "Warnings as errors")
ADD_SUBDIRECTORY( lib ) ADD_SUBDIRECTORY(lib)
ADD_SUBDIRECTORY( modules ) ADD_SUBDIRECTORY(modules)
IF( ${BUILD_TOOLS} ) IF(${BUILD_TOOLS})
ADD_SUBDIRECTORY( tools ) ADD_SUBDIRECTORY(tools)
ENDIF() ENDIF()
IF( ${BUILD_APP} ) IF(${BUILD_APP})
ADD_SUBDIRECTORY( app ) ADD_SUBDIRECTORY(app)
ENDIF() ENDIF()
IF( ${BUILD_EXAMPLES} ) IF(${BUILD_EXAMPLES})
ADD_SUBDIRECTORY( examples ) ADD_SUBDIRECTORY(examples)
ENDIF() 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 # Final information dump
###################################################################################### # ####################################################################################################################################################
MESSAGE("") MESSAGE("")
MESSAGE( STATUS "${PROJECT_NAME} INFORMATION" ) MESSAGE(STATUS "${PROJECT_NAME} INFORMATION")
MESSAGE( STATUS "Version: " "${CALYP_VERSION_STRING}" ) MESSAGE(STATUS "Version: " "${CALYP_VERSION_STRING}")
MESSAGE( STATUS "Configuration:" ) MESSAGE(STATUS "Configuration:")
MESSAGE( STATUS " Static libs: " "${USE_STATIC}" ) MESSAGE(STATUS " Static libs: " "${USE_STATIC}")
MESSAGE( STATUS " Build type: " "${CMAKE_BUILD_TYPE}" ) MESSAGE(STATUS " Build type: " "${CMAKE_BUILD_TYPE}")
MESSAGE( STATUS " Build flags: " "${CMAKE_CXX_FLAGS}" ) MESSAGE(STATUS " Build flags: " "${CMAKE_CXX_FLAGS}")
FEATURE_SUMMARY(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) FEATURE_SUMMARY(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
+12 -36
View File
@@ -27,19 +27,21 @@ Modules
Supported Quality Metrics Supported Quality Metrics
---------------------------------------------------------------- ----------------------------------------------------------------
- PSNR - Peak Signal-to-Noise Ratio (PSNR)
- SSIM - Structural SIMilarity (SSIM)
- MSE - Mean Square Error (MSE)
- Weighted Spherical PSNR (WS-PSNR)
Frame Processing Modules Frame Processing Modules
---------------------------------------------------------------- ----------------------------------------------------------------
- Component filtering - Component filtering
- Frame difference, crop, shift, binarization - Frame difference, crop, shift, binarization and rotation
- Sub-sampling operations - Sub-sampling operations
- Measuring modules - Measuring modules
- Modules based on opencv: - Modules based on opencv:
* Disparity estimation - Disparity estimation
* Motion estimation - Motion estimation
Supported Formats Supported Formats
---------------------------------------------------------------- ----------------------------------------------------------------
@@ -62,35 +64,9 @@ Supported Formats
Developers Developers
---------------------------------------------------------------- ----------------------------------------------------------------
- Joao Carreira (jfmcarreira@gmail.com) - [**Joao Carreira**](https://github.com/jfmcarreira) (Founder, Main Developer)
- Lui­s Lucas (luisfrlucas@gmail.com) - [**Lui­s Lucas** ](https://github.com/lfrlucas) (Founder, Developer)
- [**Joao Santos** ](https://github.com/jpataias) (Contributor)
Builds - [**JNSFilipe** ](https://github.com/JNSFilipe) (Contributor)
----------------------------------------------------------------
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
```
*/ */
+17 -8
View File
@@ -1,6 +1,12 @@
# Calyp # Calyp
## Enhanced YUV video player based on Qt focusing on image/video analysis ## 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 ## Features
- Support for libavformat and libavcodec; - Support for libavformat and libavcodec;
@@ -23,9 +29,10 @@
- CalypTools: High level command line interface - CalypTools: High level command line interface
## Supported Quality Metrics ## Supported Quality Metrics
- PSNR - Peak Signal-to-Noise Ratio (PSNR)
- SSIM - Structural SIMilarity (SSIM)
- MSE - Mean Square Error (MSE)
- Weighted Spherical PSNR (WS-PSNR)
## Frame Processing Modules ## Frame Processing Modules
- Component filtering - Component filtering
@@ -53,14 +60,16 @@
* Windows Bitmap (bmp) * Windows Bitmap (bmp)
* Tagged Image File Format (tiff) * Tagged Image File Format (tiff)
## Developers ## Development Team
- **Joao Carreira** (jfmcarreira@gmail.com) - [**Joao Carreira**](https://github.com/jfmcarreira) (Founder, Main Developer)
- **Lui­s Lucas** (luisfrlucas@gmail.com) - [**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 ### Binaries and Build
* Packages are available for [Debian](https://launchpad.net/~pixlra/+archive/ubuntu/ppa) and [openSUSE](https://software.opensuse.org/package/playuver) * Packages are available for [Debian](https://launchpad.net/~pixlra/+archive/ubuntu/ppa)
* **Daily builds** available for Windows and Linux in our [SourceForge page](https://sourceforge.net/projects/playuver/) * **Daily builds** available for [Windows](https://github.com/pixlra/calyp-releases/blob/master/installers/win/calyp-latest.exe)
* **Dependencies** * **Dependencies**
1. an ordinary C++ development environment (g++, make, C++ libraries and headers, ...) 1. an ordinary C++ development environment (g++, make, C++ libraries and headers, ...)
2. cmake 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} INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}/external ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/external ${CMAKE_CURRENT_SOURCE_DIR}/dialog ${CMAKE_CURRENT_SOURCE_DIR}/docks
${CMAKE_CURRENT_SOURCE_DIR}/dialog ${CMAKE_CURRENT_SOURCE_DIR}/widgets
${CMAKE_CURRENT_SOURCE_DIR}/docks )
${CMAKE_CURRENT_SOURCE_DIR}/widgets )
OPTION( USE_QTDBUS "Build with QtDBus" ON ) OPTION(USE_QTDBUS "Build with QtDBus" ON)
OPTION( USE_FERVOR "Add Fervor support" OFF ) OPTION(USE_FERVOR "Add Fervor support" OFF)
ADD_SUBDIRECTORY( external ) ADD_SUBDIRECTORY(external)
FIND_PACKAGE( Qt5 REQUIRED COMPONENTS 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_LINKER_LIBS Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Concurrent)
LIST(APPEND QT_MODULES Core Gui Widgets Concurrent ) LIST(APPEND QT_MODULES Core Gui Widgets Concurrent)
IF( USE_QTDBUS ) IF(USE_QTDBUS)
FIND_PACKAGE( Qt5DBus ) FIND_PACKAGE(Qt5DBus)
SET_PACKAGE_PROPERTIES(Qt5DBus PROPERTIES DESCRIPTION "Support for Qt5 DBus messages between instances" TYPE OPTIONAL ) SET_PACKAGE_PROPERTIES(
IF( ${Qt5DBus_FOUND} ) Qt5DBus PROPERTIES
SET( USE_QTDBUS ${Qt5DBus_FOUND} ) # TODO: fix this stupid variable DESCRIPTION "Support for Qt5 DBus messages between instances"
SET( USE_QTDBUS ${Qt5DBus_FOUND} PARENT_SCOPE) TYPE OPTIONAL
LIST(APPEND QT_LINKER_LIBS Qt5::DBus ) )
LIST(APPEND QT_MODULES DBus ) 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()
ENDIF() ENDIF()
set(Calyp_App_SRCS SET(Calyp_App_SRCS
# Main # Main
main.cpp main.cpp
MainWindow.cpp MainWindow.cpp
# Module SubWindow # Module SubWindow
SubWindowHandle.cpp SubWindowHandle.cpp
MdiSubWindow.cpp MdiSubWindow.cpp
SubWindowAbstract.cpp SubWindowAbstract.cpp
# Module Video # Module Video
VideoHandle.cpp VideoHandle.cpp
VideoSubWindow.cpp VideoSubWindow.cpp
ViewArea.cpp ViewArea.cpp
GridManager.cpp GridManager.cpp
# Module Quality # Module Quality
QualityHandle.cpp QualityHandle.cpp
PlotSubWindow.cpp PlotSubWindow.cpp
external/qcustomplot/qcustomplot.cpp external/qcustomplot/qcustomplot.cpp
# Module Plugins # Module Plugins
ModulesHandle.cpp ModulesHandle.cpp
CalypAppModuleIf.cpp CalypAppModuleIf.cpp
# Dialogs # Dialogs
dialog/AboutDialog.cpp dialog/AboutDialog.cpp
dialog/ConfigureFormatDialog.cpp dialog/ConfigureFormatDialog.cpp
dialog/SubWindowSelectorDialog.cpp dialog/SubWindowSelectorDialog.cpp
dialog/ProgressBar.cpp dialog/ProgressBar.cpp
dialog/SeekStreamDialog.cpp dialog/SeekStreamDialog.cpp
dialog/ModulesHandleOptDialog.cpp dialog/ModulesHandleOptDialog.cpp
# Widgets # Widgets
widgets/HistogramWidget.cpp widgets/HistogramWidget.cpp
widgets/FrameNumberWidget.cpp widgets/FrameNumberWidget.cpp
# Docks # Docks
docks/FramePropertiesDock.cpp docks/FramePropertiesDock.cpp
docks/ModuleHandleDock.cpp docks/ModuleHandleDock.cpp
docks/QualityMeasurementSidebar.cpp docks/QualityMeasurementSidebar.cpp
) )
IF( USE_QTDBUS ) IF(USE_QTDBUS)
LIST( APPEND Calyp_App_SRCS DBusAppAdaptor.cpp ) LIST(APPEND Calyp_App_SRCS DBusAppAdaptor.cpp)
ENDIF() ENDIF()
SET(Calyp_App_UI "")
set(Calyp_App_UI "" ) SET(Calyp_App_RCC resources/${PROJECT_NAME}.qrc)
set(Calyp_App_RCC IF(USE_FERVOR)
resources/${PROJECT_NAME}.qrc
)
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} ) INCLUDE_DIRECTORIES(${FERVOR_DIR})
SET( FERVOR_APP_VERSION ${CALYP_VERSION_STRING} )
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 APP_LINKER_LIBS ${FERVOR_DEPENDENCIES} )
INCLUDE_DIRECTORIES(${FERVOR_INCLUDE_DIRS})
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} )
SET(QT_USE_QTNETWORK true) SET(QT_USE_QTNETWORK true)
SET(QT_USE_QTWEBKIT true) SET(QT_USE_QTWEBKIT true)
ELSE() ELSE()
MESSAGE( "Fervor lib source code is not find in ${FERVOR_DIR}... Disabling it!" ) MESSAGE("Fervor lib source code is not find in ${FERVOR_DIR}... Disabling it!")
SET( USE_FERVOR False ) SET(USE_FERVOR False)
ENDIF() ENDIF()
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.") ADD_FEATURE_INFO(Fervor USE_FERVOR "Fervor lib includes check for updates feature.")
QT5_WRAP_UI( Calyp_App_UI_Wrap ${Calyp_App_UI} ) QT5_WRAP_UI(Calyp_App_UI_Wrap ${Calyp_App_UI})
QT5_ADD_RESOURCES( Calyp_App_RCC ${Calyp_App_RCC} ) QT5_ADD_RESOURCES(Calyp_App_RCC ${Calyp_App_RCC})
# Instruct CMake to run moc automatically when needed. # Instruct CMake to run moc automatically when needed.
SET( CMAKE_AUTOMOC ON ) SET(CMAKE_AUTOMOC ON)
# Windows application icon # Windows application icon
IF( WIN32 ) IF(WIN32)
set(WINDOWS_RES_FILE ${CMAKE_CURRENT_BINARY_DIR}/resources.obj) SET(WINDOWS_RES_FILE ${CMAKE_CURRENT_BINARY_DIR}/resources.obj)
IF( MSVC ) IF(MSVC)
add_custom_command(OUTPUT ${WINDOWS_RES_FILE} ADD_CUSTOM_COMMAND(
OUTPUT ${WINDOWS_RES_FILE}
COMMAND rc.exe /fo ${WINDOWS_RES_FILE} ${PROJECT_NAME}.rc COMMAND rc.exe /fo ${WINDOWS_RES_FILE} ${PROJECT_NAME}.rc
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/resources WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/resources
COMMENT "Add icon on windows platform"
) )
ELSE() ELSE()
add_custom_command(OUTPUT ${WINDOWS_RES_FILE} ADD_CUSTOM_COMMAND(
OUTPUT ${WINDOWS_RES_FILE}
COMMAND windres.exe ${PROJECT_NAME}.rc ${WINDOWS_RES_FILE} COMMAND windres.exe ${PROJECT_NAME}.rc ${WINDOWS_RES_FILE}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/resources WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/resources
COMMENT "Add icon on windows platform"
) )
ENDIF() ENDIF()
ENDIF() ENDIF()
ADD_EXECUTABLE(${PROJECT_NAME} ${Calyp_App_SRCS} ${HEADERS_MOC_FILES} ${Calyp_App_UI_Wrap} ${Calyp_App_RCC} ${WINDOWS_RES_FILE})
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)
TARGET_LINK_LIBRARIES( ${PROJECT_NAME} ${PROJECT_LIBRARY} CalypModules ${APP_LINKER_LIBS} ${QT_LINKER_LIBS} QCustomPlotLib )
# QT5_USE_MODULES( ${PROJECT_NAME} ${QT_MODULES} ) # QT5_USE_MODULES( ${PROJECT_NAME} ${QT_MODULES} )
INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin ) INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
INSTALL(FILES resources/calyp.desktop DESTINATION share/applications ) INSTALL(FILES resources/calyp.desktop DESTINATION share/applications)
INSTALL(FILES resources/calyp.png DESTINATION share/pixmaps ) INSTALL(FILES resources/calyp.png DESTINATION share/pixmaps)
INSTALL(FILES resources/calyp.xml DESTINATION share/mime/packages ) 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,12 +24,12 @@
#include "CalypAppModuleIf.h" #include "CalypAppModuleIf.h"
#include "VideoSubWindow.h"
#include <QAction> #include <QAction>
#include <QApplication> #include <QApplication>
#include <QDockWidget> #include <QDockWidget>
#include "VideoSubWindow.h"
CalypAppModuleIf::CalypAppModuleIf( QObject* parent, QAction* action, CalypModuleIf* module ) CalypAppModuleIf::CalypAppModuleIf( QObject* parent, QAction* action, CalypModuleIf* module )
: m_bIsRunning( false ) : m_bIsRunning( false )
, m_pcModuleAction( action ) , m_pcModuleAction( action )
@@ -125,7 +125,7 @@ void CalypAppModuleIf::run()
if( m_pcModule->m_iModuleType == CLP_FRAME_PROCESSING_MODULE ) 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 ); m_pcProcessedFrame = m_pcModule->process( apcFrameList );
} }
@@ -136,7 +136,7 @@ void CalypAppModuleIf::run()
} }
else if( m_pcModule->m_iModuleType == CLP_FRAME_MEASUREMENT_MODULE ) 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 ); m_dMeasurementResult = m_pcModule->measure( apcFrameList );
} }
+6 -6
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,6 +25,11 @@
#ifndef __CALYPAPPMODULESIF_H__ #ifndef __CALYPAPPMODULESIF_H__
#define __CALYPAPPMODULESIF_H__ #define __CALYPAPPMODULESIF_H__
#include <QEvent>
#include <QVector>
#include <cstdio>
#include <iostream>
#include "CommonDefs.h" #include "CommonDefs.h"
#include "ModuleHandleDock.h" #include "ModuleHandleDock.h"
#include "config.h" #include "config.h"
@@ -32,11 +37,6 @@
#include "lib/CalypModuleIf.h" #include "lib/CalypModuleIf.h"
#include "lib/CalypStream.h" #include "lib/CalypStream.h"
#include <QEvent>
#include <QVector>
#include <cstdio>
#include <iostream>
class QAction; class QAction;
class QDockWidget; class QDockWidget;
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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 ) : QDBusAbstractAdaptor( app ), m_app( app )
{ {
// application dbus interface // application dbus interface
bool isRegistered = QDBusConnection::sessionBus().registerObject( QStringLiteral( CALYP_DBUS_PATH ), this, bool isRegistered = QDBusConnection::sessionBus().registerObject( QStringLiteral( CALYP_DBUS_PATH ), QStringLiteral( CALYP_DBUS_SESSION_NAME ),
QDBusConnection::ExportAllSlots ); this, QDBusConnection::ExportAllSlots );
Q_ASSERT( isRegistered == true ); Q_ASSERT( isRegistered == true );
} }
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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 ) switch( style )
{ {
case intersectionDot: case intersectionDot:
case intersectionCross: case intersectionCross: {
{
painter->setPen( mainPen ); painter->setPen( mainPen );
// Draw crosses or dots on intersections // Draw crosses or dots on intersections
for( int x = offsetx; x <= area.right(); x += hSpacing ) for( int x = offsetx; x <= area.right(); x += hSpacing )
@@ -99,8 +98,7 @@ void GridManager::drawGrid( QPixmap& image, const QRect& area, QPainter* painter
} }
break; break;
} }
case Dashed: case Dashed: {
{
// Change pen to the dashed line // Change pen to the dashed line
mainPen.setStyle( Qt::DashLine ); mainPen.setStyle( Qt::DashLine );
} }
+2 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -29,6 +29,7 @@
#include <QColor> #include <QColor>
#include <QPen> #include <QPen>
#include <QRect> #include <QRect>
#include "CommonDefs.h" #include "CommonDefs.h"
#include "config.h" #include "config.h"
+12 -12
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* Joao Santos (joaompssantos@gmail.com) * Joao Santos (joaompssantos@gmail.com)
* *
@@ -25,6 +25,15 @@
#include "MainWindow.h" #include "MainWindow.h"
#include <QAction>
#include <QActionGroup>
#include <QCloseEvent>
#include <QDoubleSpinBox>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QSignalMapper>
#include <QtDebug>
#include "AboutDialog.h" #include "AboutDialog.h"
#include "ModulesHandle.h" #include "ModulesHandle.h"
#include "QualityHandle.h" #include "QualityHandle.h"
@@ -34,15 +43,6 @@
#include "VideoHandle.h" #include "VideoHandle.h"
#include "VideoSubWindow.h" #include "VideoSubWindow.h"
#include "lib/CalypOptions.h" #include "lib/CalypOptions.h"
#include <QAction>
#include <QActionGroup>
#include <QCloseEvent>
#include <QDoubleSpinBox>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QSignalMapper>
#include <QtDebug>
#ifdef USE_FERVOR #ifdef USE_FERVOR
#include "fvupdater.h" #include "fvupdater.h"
#endif #endif
@@ -101,7 +101,7 @@ bool MainWindow::parseArgs( int argc, char* argv[] )
( "size,s", strResolution, "size (WxH)" ) /**/ ( "size,s", strResolution, "size (WxH)" ) /**/
( "pel_fmt", strPelFmt, "pixel format" ); ( "pel_fmt", strPelFmt, "pixel format" );
if( !pcCmdParser.parse( argc, argv ) ) if( pcCmdParser.parse( argc, argv ) < 0 )
{ {
bRet |= true; bRet |= true;
} }
@@ -287,7 +287,7 @@ QStringList MainWindow::showFileDialog( bool bRead )
{ {
QString fileName = QFileDialog::getSaveFileName( this, tr( "Save File" ), m_cLastOpenPath, filter.join( ";;" ) ); QString fileName = QFileDialog::getSaveFileName( this, tr( "Save File" ), m_cLastOpenPath, filter.join( ";;" ) );
if( !fileName.isEmpty() ) if( !fileName.isEmpty() )
fileNameList.append( fileName ); fileNameList.append( fileName );
} }
return fileNameList; return fileNameList;
} }
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,10 +24,10 @@
#include "MdiSubWindow.h" #include "MdiSubWindow.h"
#include "SubWindowAbstract.h"
#include <QCloseEvent> #include <QCloseEvent>
#include "SubWindowAbstract.h"
MdiSubWindow::MdiSubWindow( QWidget* parent ) MdiSubWindow::MdiSubWindow( QWidget* parent )
: QMdiSubWindow( parent ) : QMdiSubWindow( parent )
{ {
+2 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -26,6 +26,7 @@
#define __MDISUBWINDOW_H_ #define __MDISUBWINDOW_H_
#include <QMdiSubWindow> #include <QMdiSubWindow>
#include "CommonDefs.h" #include "CommonDefs.h"
#include "config.h" #include "config.h"
+20 -17
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,6 +24,8 @@
#include "ModulesHandle.h" #include "ModulesHandle.h"
#include <cstdio>
#include "MainWindow.h" #include "MainWindow.h"
#include "ModulesHandleOptDialog.h" #include "ModulesHandleOptDialog.h"
#include "SubWindowHandle.h" #include "SubWindowHandle.h"
@@ -32,8 +34,6 @@
#include "VideoSubWindow.h" #include "VideoSubWindow.h"
#include "modules/CalypModulesFactory.h" #include "modules/CalypModulesFactory.h"
#include <cstdio>
ModulesHandle::ModulesHandle( QWidget* parent, SubWindowHandle* windowManager, VideoHandle* moduleVideo ) ModulesHandle::ModulesHandle( QWidget* parent, SubWindowHandle* windowManager, VideoHandle* moduleVideo )
: QWidget( parent ), m_pcParent( parent ), m_pcMainWindowManager( windowManager ), m_appModuleVideo( moduleVideo ) : QWidget( parent ), m_pcParent( parent ), m_pcMainWindowManager( windowManager ), m_appModuleVideo( moduleVideo )
{ {
@@ -112,20 +112,23 @@ void ModulesHandle::buildMenu()
ModuleIfinternalName = QString::fromLocal8Bit( it->first ); ModuleIfinternalName = QString::fromLocal8Bit( it->first );
currSubMenu = NULL; 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 ); if( m_pcModulesSubMenuList.at( j )->title() == QString( pcCurrModuleIf->m_pchModuleCategory ) )
break; {
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 ); pcModuleSubWindow = new VideoSubWindow( VideoSubWindow::MODULE_SUBWINDOW );
windowName.append( QStringLiteral( "Module " ) ); windowName.append( QStringLiteral( "Module " ) );
windowName.append( pcCurrAppModuleIf->m_pcModule->m_pchModuleName ); windowName.append( pcCurrAppModuleIf->m_pcModule->m_pchModuleLongName );
pcCurrAppModuleIf->m_pcDisplaySubWindow = pcModuleSubWindow; pcCurrAppModuleIf->m_pcDisplaySubWindow = pcModuleSubWindow;
// connect( pcModuleSubWindow->getViewArea(), SIGNAL( selectionChanged( QRect ) ), m_appModuleVideo, // connect( pcModuleSubWindow->getViewArea(), SIGNAL( selectionChanged( QRect ) ), m_appModuleVideo,
// SLOT( updateSelectionArea( QRect ) ) ); // SLOT( updateSelectionArea( QRect ) ) );
@@ -422,7 +425,7 @@ void ModulesHandle::activateModule()
// Create Module // Create Module
bool moduleCreated = false; 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; std::vector<CalypFrame*> apcFrameList;
for( int i = 0; i < videoSubWindowList.size(); i++ ) for( int i = 0; i < videoSubWindowList.size(); i++ )
@@ -562,8 +565,8 @@ void ModulesHandle::applyAllModuleIf( CalypAppModuleIf* pcCurrModuleIf )
if( pcCurrModuleIf->m_pcModuleStream ) if( pcCurrModuleIf->m_pcModuleStream )
{ {
unsigned int numberOfWindows = pcCurrModuleIf->m_pcModule->m_uiNumberOfFrames; unsigned int numberOfWindows = pcCurrModuleIf->m_pcModule->m_uiNumberOfFrames;
unsigned long long int currFrames = 0; ClpULong currFrames = 0;
unsigned long long int numberOfFrames = INT_MAX; ClpULong numberOfFrames = -1;
for( unsigned int i = 0; i < numberOfWindows; i++ ) for( unsigned int i = 0; i < numberOfWindows; i++ )
{ {
currFrames = pcCurrModuleIf->m_pcSubWindow[i]->getInputStream()->getFrameNum(); currFrames = pcCurrModuleIf->m_pcSubWindow[i]->getInputStream()->getFrameNum();
+4 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,15 +24,14 @@
#ifndef __MODULESHANDLE_H__ #ifndef __MODULESHANDLE_H__
#define __MODULESHANDLE_H__ #define __MODULESHANDLE_H__
#include "config.h" #include <QtCore>
#include <QtWidgets>
#include <cstdio> #include <cstdio>
#include <iostream> #include <iostream>
#include <QtCore>
#include <QtWidgets>
#include "CalypAppModuleIf.h" #include "CalypAppModuleIf.h"
#include "CommonDefs.h" #include "CommonDefs.h"
#include "config.h"
#include "lib/CalypFrame.h" #include "lib/CalypFrame.h"
class VideoHandle; class VideoHandle;
+37 -16
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,6 +24,10 @@
#include "PlotSubWindow.h" #include "PlotSubWindow.h"
#include <QGuiApplication>
#include <QScreen>
#include <QSize>
#include "qcustomplot.h" #include "qcustomplot.h"
//#include "external/qcustomplot/qcustomplot.h" //#include "external/qcustomplot/qcustomplot.h"
@@ -114,6 +118,11 @@ PlotSubWindow::PlotSubWindow( const QString& windowTitle, QWidget* parent )
m_cPlotPen.setWidthF( 2 ); m_cPlotPen.setWidthF( 2 );
setWidget( m_cPlotArea ); 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() PlotSubWindow::~PlotSubWindow()
@@ -123,8 +132,8 @@ PlotSubWindow::~PlotSubWindow()
void PlotSubWindow::normalSize() void PlotSubWindow::normalSize()
{ {
m_cPlotArea->xAxis->setRange( m_aAxisRange[HORIZONTAL][0], m_aAxisRange[HORIZONTAL][1] ); m_cPlotArea->xAxis->setRange( m_aAxisRange[AXIS_HORIZONTAL][0], m_aAxisRange[AXIS_HORIZONTAL][1] );
m_cPlotArea->yAxis->setRange( m_aAxisRange[VERTICAL][0], m_aAxisRange[VERTICAL][1] ); m_cPlotArea->yAxis->setRange( m_aAxisRange[AXIS_VERTICAL][0], m_aAxisRange[AXIS_VERTICAL][1] );
m_cPlotArea->replot(); m_cPlotArea->replot();
m_dScaleFactor = 1; m_dScaleFactor = 1;
} }
@@ -169,7 +178,7 @@ QSize PlotSubWindow::sizeHint() const
} }
else else
{ {
maxSize = QApplication::desktop()->availableGeometry().size(); maxSize = QGuiApplication::screens()[0]->availableGeometry().size();
} }
return sizeHint( maxSize ); return sizeHint( maxSize );
} }
@@ -187,29 +196,43 @@ void PlotSubWindow::setAxisName( const QString& nameAxisX, const QString& nameAx
void PlotSubWindow::setAxisRange( const QLine& axisLimits ) void PlotSubWindow::setAxisRange( const QLine& axisLimits )
{ {
setAxisRange( HORIZONTAL, axisLimits.x1(), axisLimits.x2() ); setAxisRange( AXIS_HORIZONTAL, axisLimits.x1(), axisLimits.x2() );
setAxisRange( VERTICAL, axisLimits.y1(), axisLimits.y2() ); setAxisRange( AXIS_VERTICAL, axisLimits.y1(), axisLimits.y2() );
} }
void PlotSubWindow::setAxisRange( PlotSubWindow::Axis eAxis, const int& axisStart, const int& axisEnd ) 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 ); m_cPlotArea->xAxis->setRange( axisStart, axisEnd );
// horizontalScrollBar()->setRange( axisStart * 100, axisEnd * 100 ); // horizontalScrollBar()->setRange( axisStart * 100, axisEnd * 100 );
m_aAxisRange[HORIZONTAL][0] = axisStart; m_aAxisRange[AXIS_HORIZONTAL][0] = axisStart;
m_aAxisRange[HORIZONTAL][1] = axisEnd; m_aAxisRange[AXIS_HORIZONTAL][1] = axisEnd;
} }
if( eAxis == VERTICAL ) if( eAxis == AXIS_VERTICAL )
{ {
m_cPlotArea->yAxis->setRange( axisStart, axisEnd ); m_cPlotArea->yAxis->setRange( axisStart, axisEnd );
// verticalScrollBar()->setRange( axisStart * 100, axisEnd * 100 ); // verticalScrollBar()->setRange( axisStart * 100, axisEnd * 100 );
m_aAxisRange[VERTICAL][0] = axisStart; m_aAxisRange[AXIS_VERTICAL][0] = axisStart;
m_aAxisRange[VERTICAL][1] = axisEnd; m_aAxisRange[AXIS_VERTICAL][1] = axisEnd;
} }
m_cPlotArea->replot(); 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 ) void PlotSubWindow::addPlot( const QVector<double>& arrayX, const QVector<double>& arrayY, const QString& key )
{ {
QCPGraph* newPlot = m_cPlotArea->addGraph(); QCPGraph* newPlot = m_cPlotArea->addGraph();
@@ -232,10 +255,8 @@ void PlotSubWindow::addPlot( const QVector<double>& arrayX, const QVector<double
newPlot->setName( key ); newPlot->setName( key );
} }
m_aAxisRange[HORIZONTAL][0] = m_cPlotArea->xAxis->range().lower; appendAxisLimit( AXIS_HORIZONTAL, m_cPlotArea->xAxis->range().lower, m_cPlotArea->xAxis->range().upper );
m_aAxisRange[HORIZONTAL][1] = m_cPlotArea->xAxis->range().upper; appendAxisLimit( AXIS_VERTICAL, m_cPlotArea->yAxis->range().lower, m_cPlotArea->yAxis->range().upper );
m_aAxisRange[VERTICAL][0] = m_cPlotArea->yAxis->range().lower;
m_aAxisRange[VERTICAL][1] = m_cPlotArea->yAxis->range().upper;
m_iNumberPlots++; m_iNumberPlots++;
} }
+6 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,12 +25,12 @@
#ifndef __PLOTWINDOWHANDLE_H__ #ifndef __PLOTWINDOWHANDLE_H__
#define __PLOTWINDOWHANDLE_H__ #define __PLOTWINDOWHANDLE_H__
#include <QtWidgets>
#include "CommonDefs.h" #include "CommonDefs.h"
#include "SubWindowAbstract.h" #include "SubWindowAbstract.h"
#include "config.h" #include "config.h"
#include <QtWidgets>
class QCustomPlot; class QCustomPlot;
class PlotSubWindow : public SubWindowAbstract class PlotSubWindow : public SubWindowAbstract
@@ -45,8 +45,8 @@ private:
enum Axis enum Axis
{ {
HORIZONTAL, AXIS_HORIZONTAL,
VERTICAL, AXIS_VERTICAL,
}; };
double m_aAxisRange[2][2]; double m_aAxisRange[2][2];
double m_dScaleFactor; double m_dScaleFactor;
@@ -78,6 +78,7 @@ public:
void setAxisRange( const QLine& axisLimits ); void setAxisRange( const QLine& axisLimits );
void setAxisRange( PlotSubWindow::Axis eAxis, const int& axisStart, const int& axisEnd ); 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 ); void setKey( const QString& key );
+29 -25
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,16 +24,16 @@
#include "QualityHandle.h" #include "QualityHandle.h"
#include <QtGui>
#include "PlotSubWindow.h" #include "PlotSubWindow.h"
#include "ProgressBar.h" #include "ProgressBar.h"
#include "QtConcurrent/qtconcurrentrun.h"
#include "SubWindowHandle.h" #include "SubWindowHandle.h"
#include "SubWindowSelectorDialog.h" #include "SubWindowSelectorDialog.h"
#include "VideoSubWindow.h" #include "VideoSubWindow.h"
#include "lib/LibMemory.h" #include "lib/LibMemory.h"
#include <QtGui>
#include "QtConcurrent/qtconcurrentrun.h"
QualityHandle::QualityHandle( QWidget* parent, SubWindowHandle* windowManager ) QualityHandle::QualityHandle( QWidget* parent, SubWindowHandle* windowManager )
: m_pcParet( parent ), m_pcMainWindowManager( windowManager ) : m_pcParet( parent ), m_pcMainWindowManager( windowManager )
{ {
@@ -156,13 +156,12 @@ void QualityHandle::update( VideoSubWindow* currSubWindow )
void QualityHandle::measureQuality( QVector<VideoSubWindow*> apcWindowList ) void QualityHandle::measureQuality( QVector<VideoSubWindow*> apcWindowList )
{ {
QVector<double>* padQualityValues; unsigned numberOfWindows = apcWindowList.size();
unsigned int numberOfWindows = apcWindowList.size(); ClpULong currFrames = 0;
unsigned long long int currFrames = 0; ClpULong numberOfFrames = -1;
unsigned long long int numberOfFrames = INT_MAX;
//! Check reference window //! Check reference window
for( unsigned int i = 0; i < numberOfWindows; i++ ) for( unsigned i = 0; i < numberOfWindows; i++ )
{ {
if( !apcWindowList.at( i )->getRefSubWindow() ) if( !apcWindowList.at( i )->getRefSubWindow() )
{ {
@@ -172,7 +171,7 @@ void QualityHandle::measureQuality( QVector<VideoSubWindow*> apcWindowList )
VideoSubWindow* pcReferenceWindow = apcWindowList.at( 0 )->getRefSubWindow(); VideoSubWindow* pcReferenceWindow = apcWindowList.at( 0 )->getRefSubWindow();
numberOfFrames = pcReferenceWindow->getInputStream()->getFrameNum(); 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(); currFrames = apcWindowList.at( i )->getInputStream()->getFrameNum();
if( currFrames < numberOfFrames ) if( currFrames < numberOfFrames )
@@ -183,7 +182,14 @@ void QualityHandle::measureQuality( QVector<VideoSubWindow*> apcWindowList )
ProgressBar* pcProgressBar = new ProgressBar( m_pcParet, numberOfFrames ); 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* pcReferenceFrame;
CalypFrame* pcCurrFrame; CalypFrame* pcCurrFrame;
@@ -194,7 +200,9 @@ void QualityHandle::measureQuality( QVector<VideoSubWindow*> apcWindowList )
for( unsigned int i = 0; i < numberOfWindows; i++ ) for( unsigned int i = 0; i < numberOfWindows; i++ )
{ {
pcCurrFrame = apcWindowList.at( i )->getCurrFrame(); 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 ); apcWindowList.at( i )->seekRelativeEvent( true );
} }
pcReferenceWindow->seekRelativeEvent( true ); pcReferenceWindow->seekRelativeEvent( true );
@@ -206,27 +214,23 @@ void QualityHandle::measureQuality( QVector<VideoSubWindow*> apcWindowList )
} }
pcReferenceWindow->stop(); pcReferenceWindow->stop();
QString qualityName = QString::fromStdString( CalypFrame::supportedQualityMetricsList()[m_iQualityMetricIdx] );
QString qualityUnits = QString::fromStdString( CalypFrame::supportedQualityMetricsUnitsList()[m_iQualityMetricIdx] );
QString plotWindowTitle( QStringLiteral( "Quality" ) ); QString plotWindowTitle( QStringLiteral( "Quality" ) );
if( apcWindowList.size() == 1 ) if( apcWindowList.size() == 1 )
{ {
plotWindowTitle += " - " + apcWindowList.at( 0 )->getWindowName(); plotWindowTitle += " - " + apcWindowList.at( 0 )->getWindowName();
} }
PlotSubWindow* pcPlotWindow = new PlotSubWindow( plotWindowTitle ); PlotSubWindow* pcPlotWindow = new PlotSubWindow( plotWindowTitle );
pcPlotWindow->setAxisName( pcPlotWindow->setAxisName( "Frame Number", QString( "%1 [%2]" ).arg( qualityName ).arg( qualityUnits ) );
"Frame Number", QString::fromStdString( CalypFrame::supportedQualityMetricsList()[m_iQualityMetricIdx] ) );
if( apcWindowList.size() > 1 ) QString key;
for( unsigned int i = 0; i < numberOfWindows; i++ )
{ {
QString key; key = apcWindowList.at( i )->getWindowName();
for( unsigned int i = 0; i < numberOfWindows; i++ ) key = QString( "[%1 %2] " ).arg( padAverageQuality[i + 1] ).arg( qualityUnits ) + key;
{ pcPlotWindow->addPlot( padQualityValues[0], padQualityValues[i + 1], key );
key = apcWindowList.at( i )->getWindowName();
pcPlotWindow->addPlot( padQualityValues[0], padQualityValues[i + 1], key );
}
}
else
{
pcPlotWindow->addPlot( padQualityValues[0], padQualityValues[1] );
} }
m_pcMainWindowManager->addSubWindow( pcPlotWindow ); m_pcMainWindowManager->addSubWindow( pcPlotWindow );
+2 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -27,6 +27,7 @@
#include <QtCore> #include <QtCore>
#include <QtWidgets> #include <QtWidgets>
#include "CommonDefs.h" #include "CommonDefs.h"
#include "QFuture" #include "QFuture"
#include "QualityMeasurementSidebar.h" #include "QualityMeasurementSidebar.h"
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,14 +24,14 @@
#include "SubWindowAbstract.h" #include "SubWindowAbstract.h"
#include "MdiSubWindow.h"
#include <QCloseEvent> #include <QCloseEvent>
#include <QFocusEvent> #include <QFocusEvent>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QIcon> #include <QIcon>
#include <QScrollBar> #include <QScrollBar>
#include "MdiSubWindow.h"
SubWindowAbstract::SubWindowAbstract( QWidget* parent, unsigned int category ) SubWindowAbstract::SubWindowAbstract( QWidget* parent, unsigned int category )
: QWidget( parent ), m_cSubWindow( NULL ) : QWidget( parent ), m_cSubWindow( NULL )
{ {
+2 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -41,6 +41,7 @@
#include <QSize> #include <QSize>
#include <QString> #include <QString>
#include <QWidget> #include <QWidget>
#include "CommonDefs.h" #include "CommonDefs.h"
#include "config.h" #include "config.h"
+14 -10
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* Joao Santos (joaompssantos@gmail.com) * Joao Santos (joaompssantos@gmail.com)
* *
@@ -25,22 +25,24 @@
#include "SubWindowHandle.h" #include "SubWindowHandle.h"
#include "MainWindow.h"
#include "MdiSubWindow.h"
#include "SubWindowAbstract.h"
#include <QAction> #include <QAction>
#include <QActionGroup> #include <QActionGroup>
#include <QApplication> #include <QApplication>
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QGuiApplication>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QMdiArea> #include <QMdiArea>
#include <QMenu> #include <QMenu>
#include <QPainter> #include <QPainter>
#include <QScreen>
#include <QSettings> #include <QSettings>
#include <QSignalMapper> #include <QSignalMapper>
#include <QStyle> #include <QStyle>
#include "MainWindow.h"
#include "MdiSubWindow.h"
#include "SubWindowAbstract.h"
class MdiArea : public QMdiArea class MdiArea : public QMdiArea
{ {
public: public:
@@ -154,7 +156,7 @@ void SubWindowHandle::setWindowMode( int iWindowMode )
parentWidget()->update(); parentWidget()->update();
m_pcApp->showNormal(); m_pcApp->showNormal();
qApp->processEvents(); qApp->processEvents();
QSize screenSize = QApplication::desktop()->availableGeometry().size(); QSize screenSize = QGuiApplication::screens()[0]->availableGeometry().size();
m_pcApp->move( 0, 0 ); m_pcApp->move( 0, 0 );
m_pcApp->resize( screenSize.width(), 5 ); m_pcApp->resize( screenSize.width(), 5 );
m_pcApp->setWindowTitle( QApplication::applicationName() ); m_pcApp->setWindowTitle( QApplication::applicationName() );
@@ -230,12 +232,14 @@ void SubWindowHandle::addMdiSubWindow( SubWindowAbstract* window )
SLOT( removeMdiSubWindow( MdiSubWindow* ) ) ); SLOT( removeMdiSubWindow( MdiSubWindow* ) ) );
} }
void SubWindowHandle::addSubWindow( SubWindowAbstract* window, Qt::WindowFlags flags ) void SubWindowHandle::addSubWindow( SubWindowAbstract* window )
{ {
if( window ) if( window )
{ {
connect( window, SIGNAL( updateStatusBar( const QString& ) ), m_pcApp, SLOT( printMessage( const QString& ) ) ); connect( window, SIGNAL( updateStatusBar( const QString& ) ), m_pcApp,
connect( window, SIGNAL( zoomFactorChanged( const double, const QPoint ) ), m_pcApp, SLOT( updateZoomFactorSBox() ) ); SLOT( printMessage( const QString& ) ) );
connect( window, SIGNAL( zoomFactorChanged( const double, const QPoint ) ), m_pcApp,
SLOT( updateZoomFactorSBox() ) );
if( m_iWindowMode == DETACHEDSUBWINDOWMODE ) if( m_iWindowMode == DETACHEDSUBWINDOWMODE )
{ {
connect( window, SIGNAL( aboutToActivate( SubWindowAbstract* ) ), this, connect( window, SIGNAL( aboutToActivate( SubWindowAbstract* ) ), this,
@@ -378,7 +382,7 @@ void SubWindowHandle::tileSubWindows()
if( m_iWindowMode == DETACHEDSUBWINDOWMODE ) if( m_iWindowMode == DETACHEDSUBWINDOWMODE )
{ {
QSize screenSize = QApplication::desktop()->availableGeometry().size(); QSize screenSize = QGuiApplication::screens()[0]->availableGeometry().size();
unsigned int minWindowsInRow = 1; unsigned int minWindowsInRow = 1;
while( ( screenSize.width() / minWindowsInRow ) > 500 ) while( ( screenSize.width() / minWindowsInRow ) > 500 )
{ {
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,12 +25,12 @@
#ifndef __SUBWINDOWHANDLE_H__ #ifndef __SUBWINDOWHANDLE_H__
#define __SUBWINDOWHANDLE_H__ #define __SUBWINDOWHANDLE_H__
#include "CommonDefs.h"
#include <QString> #include <QString>
#include <QVector> #include <QVector>
#include <QWidget> #include <QWidget>
#include "CommonDefs.h"
class QAction; class QAction;
class QActionGroup; class QActionGroup;
class QHBoxLayout; class QHBoxLayout;
@@ -51,7 +51,7 @@ public:
void processLogMsg( const QString& msg ); void processLogMsg( const QString& msg );
void addSubWindow( SubWindowAbstract* widget, Qt::WindowFlags flags = 0 ); void addSubWindow( SubWindowAbstract* widget );
SubWindowAbstract* activeSubWindow() const; SubWindowAbstract* activeSubWindow() const;
+14 -14
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,14 +24,6 @@
#include "VideoHandle.h" #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 <QDockWidget>
#include <QElapsedTimer> #include <QElapsedTimer>
#include <QLabel> #include <QLabel>
@@ -39,6 +31,14 @@
#include <QSlider> #include <QSlider>
#include <QToolBar> #include <QToolBar>
#include <QtGui> #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 ) #if( _CONTROL_PLAYING_TIME_ == 1 )
#include <QElapsedTimer> #include <QElapsedTimer>
#endif #endif
@@ -320,8 +320,8 @@ void VideoHandle::update()
CalypStream* pcStream = m_pcCurrentVideoSubWindow->getInputStream(); CalypStream* pcStream = m_pcCurrentVideoSubWindow->getInputStream();
CalypFrame* pcFrame = m_pcCurrentVideoSubWindow->getCurrFrame(); CalypFrame* pcFrame = m_pcCurrentVideoSubWindow->getCurrFrame();
int frame_num = 0; unsigned long frame_num = 0;
unsigned long long int total_frame_num = 1; unsigned long total_frame_num = 1;
m_pcVideoFormatLabel->setText( m_pcCurrentVideoSubWindow->getStreamInformation() ); m_pcVideoFormatLabel->setText( m_pcCurrentVideoSubWindow->getStreamInformation() );
@@ -519,10 +519,10 @@ void VideoHandle::moveAllScrollBars( const double& horRatio, const double& verRa
} }
#endif #endif
unsigned long long int VideoHandle::getMaxFrameNumber() unsigned long VideoHandle::getMaxFrameNumber()
{ {
unsigned int currFrames; unsigned long currFrames;
unsigned long long int maxFrames = INT_MAX; unsigned long maxFrames = INT_MAX;
if( m_pcCurrentVideoSubWindow ) if( m_pcCurrentVideoSubWindow )
{ {
if( m_acPlayingSubWindows.contains( m_pcCurrentVideoSubWindow ) ) if( m_acPlayingSubWindows.contains( m_pcCurrentVideoSubWindow ) )
+6 -6
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,16 +25,16 @@
#ifndef __VIDEOHANDLE_H__ #ifndef __VIDEOHANDLE_H__
#define __VIDEOHANDLE_H__ #define __VIDEOHANDLE_H__
#include "CommonDefs.h"
#include "config.h"
#include <QMenu> #include <QMenu>
#include <QPoint> #include <QPoint>
#include <QThread> #include <QThread>
#include <QVector> #include <QVector>
#include <QWidget> #include <QWidget>
#define _CONTROL_PLAYING_TIME_ 1 #include "CommonDefs.h"
#include "config.h"
//#define _CONTROL_PLAYING_TIME_ 1
class QToolBar; class QToolBar;
class QDockWidget; class QDockWidget;
@@ -128,7 +128,7 @@ private:
QElapsedTimer* m_pcPlayControlTimer; QElapsedTimer* m_pcPlayControlTimer;
#endif #endif
unsigned long long int getMaxFrameNumber(); unsigned long getMaxFrameNumber();
void setTimerStatus(); void setTimerStatus();
Q_SIGNALS: Q_SIGNALS:
+73 -16
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -23,15 +23,17 @@
*/ */
#include "VideoSubWindow.h" #include "VideoSubWindow.h"
#include <QScrollArea> #include <QScrollArea>
#include <QSettings>
#include <QStaticText> #include <QStaticText>
#include <cassert>
#include "ConfigureFormatDialog.h" #include "ConfigureFormatDialog.h"
#include "ModulesHandle.h" #include "ModulesHandle.h"
#include "QtConcurrent/qtconcurrentrun.h" #include "QtConcurrent/qtconcurrentrun.h"
#include "SubWindowAbstract.h" #include "SubWindowAbstract.h"
#include <cassert>
#define QT_NO_CONCURRENT #define QT_NO_CONCURRENT
/** /**
@@ -257,7 +259,7 @@ QSize VideoSubWindow::sizeHint() const
} }
else else
{ {
maxSize = QApplication::desktop()->availableGeometry().size(); maxSize = QGuiApplication::screens()[0]->availableGeometry().size();
} }
return sizeHint( maxSize ); return sizeHint( maxSize );
} }
@@ -311,8 +313,9 @@ bool VideoSubWindow::loadFile( QString cFilename, bool bForceDialog )
{ {
ConfigureFormatDialog formatDialog( this ); ConfigureFormatDialog formatDialog( this );
unsigned int Width = 0, Height = 0, BitsPel = 8, FrameRate = 30; unsigned int Width = 0, Height = 0, BitsPel = 8, FrameRate = 30;
int Endianness = CLP_BIG_ENDIAN; int Endianness = CLP_LITTLE_ENDIAN;
int InputFormat = CLP_YUV420P; int InputFormat = CLP_YUV420P;
QSettings appSettings;
if( m_pCurrStream ) if( m_pCurrStream )
m_pCurrStream->getFormat( Width, Height, InputFormat, BitsPel, Endianness, FrameRate ); m_pCurrStream->getFormat( Width, Height, InputFormat, BitsPel, Endianness, FrameRate );
@@ -321,8 +324,18 @@ bool VideoSubWindow::loadFile( QString cFilename, bool bForceDialog )
{ {
m_pCurrStream = new CalypStream; m_pCurrStream = new CalypStream;
} }
bool bConfig = true;
bool bConfig = guessFormat( cFilename, Width, Height, InputFormat, BitsPel, Endianness ) || bForceDialog; 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; bool bRet = false;
for( int iPass = 0; iPass < 2 && !bRet; iPass++ ) for( int iPass = 0; iPass < 2 && !bRet; iPass++ )
{ {
@@ -334,8 +347,15 @@ bool VideoSubWindow::loadFile( QString cFilename, bool bForceDialog )
return false; return false;
} }
} }
bRet = m_pCurrStream->open( cFilename.toStdString(), Width, Height, InputFormat, BitsPel, Endianness, FrameRate, try
true ); {
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; m_sStreamInfo.m_cFilename = cFilename;
@@ -347,6 +367,14 @@ bool VideoSubWindow::loadFile( QString cFilename, bool bForceDialog )
m_sStreamInfo.m_uiFrameRate = FrameRate; m_sStreamInfo.m_uiFrameRate = FrameRate;
m_sStreamInfo.m_uiFileSize = QFileInfo( cFilename ).size(); 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(); QApplication::restoreOverrideCursor();
refreshFrame(); refreshFrame();
@@ -404,7 +432,8 @@ void VideoSubWindow::updateVideoWindowInfo()
} }
if( m_pcCurrentDisplayModule->getModuleRequirements() & CLP_MODULES_HAS_INFO ) 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; // qDebug( ) << sourceWindowList;
if( windowInfoList.size() > 0 ) 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, 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(); std::vector<CalypStandardResolution> stdResList = CalypStream::stdResolutionSizes();
bool bGuessed = true; bool bGuessed = true;
@@ -480,10 +509,11 @@ bool VideoSubWindow::guessFormat( QString filename, unsigned int& rWidth, unsign
} }
// Guess resolution - match %dx%d // 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() ) if( resolutionMatch.hasMatch() )
{ {
QString resolutionString = resolutionMatch.captured( 0 ); QString resolutionString = resolutionMatch.captured( resolutionMatch.lastCapturedIndex() );
if( resolutionString.startsWith( "_" ) || resolutionString.endsWith( "_" ) ) if( resolutionString.startsWith( "_" ) || resolutionString.endsWith( "_" ) )
{ {
resolutionString.remove( "_" ); resolutionString.remove( "_" );
@@ -528,11 +558,12 @@ bool VideoSubWindow::guessFormat( QString filename, unsigned int& rWidth, unsign
} }
} }
// [.|_]
// Guess bits per pixel - match %dbpp // Guess bits per pixel - match %dbpp
QRegularExpressionMatch BppMatch = QRegularExpression( "_\\d*bpp" ).match( FilenameShort ); QRegularExpressionMatch BppMatch = QRegularExpression( "_[0-9]+bpp" ).match( FilenameShort );
if( BppMatch.hasMatch() ) if( BppMatch.hasMatch() )
{ {
QString matchString = BppMatch.captured( 0 ); QString matchString = BppMatch.captured( BppMatch.lastCapturedIndex() );
matchString.remove( "_" ); matchString.remove( "_" );
matchString.remove( "bpp" ); matchString.remove( "bpp" );
rBitsPerPixel = matchString.toUInt(); rBitsPerPixel = matchString.toUInt();
@@ -541,6 +572,32 @@ bool VideoSubWindow::guessFormat( QString filename, unsigned int& rWidth, unsign
rBitsPerPixel = -1; 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 // Guess Endianness
if( FilenameShort.contains( QStringLiteral( "be" ), Qt::CaseInsensitive ) ) if( FilenameShort.contains( QStringLiteral( "be" ), Qt::CaseInsensitive ) )
@@ -611,7 +668,7 @@ void VideoSubWindow::disableModule( CalypAppModuleIf* pcModule )
if( m_pcCurrentDisplayModule ) if( m_pcCurrentDisplayModule )
{ {
pcModule = m_pcCurrentDisplayModule; pcModule = m_pcCurrentDisplayModule;
m_pcCurrentDisplayModule = 0; m_pcCurrentDisplayModule = NULL;
ModulesHandle::destroyModuleIf( pcModule ); ModulesHandle::destroyModuleIf( pcModule );
setWindowName( QFileInfo( m_cFilename ).fileName() ); setWindowName( QFileInfo( m_cFilename ).fileName() );
bRefresh |= true; bRefresh |= true;
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -30,6 +30,7 @@
#include <QRect> #include <QRect>
#include <QString> #include <QString>
#include <QVector> #include <QVector>
#include "CommonDefs.h" #include "CommonDefs.h"
#include "SubWindowAbstract.h" #include "SubWindowAbstract.h"
#include "ViewArea.h" #include "ViewArea.h"
@@ -181,7 +182,6 @@ public:
QSize sizeHint( const QSize& ) const; QSize sizeHint( const QSize& ) const;
QString getCurrentFileName() { return m_cFilename; } QString getCurrentFileName() { return m_cFilename; }
bool getIsModule() { return getCategory() | SubWindowAbstract::MODULE_SUBWINDOW; }
void clearWindowBusy() { m_bWindowBusy = false; } void clearWindowBusy() { m_bWindowBusy = false; }
void setFillWindow( bool bFlag ); void setFillWindow( bool bFlag );
@@ -192,7 +192,7 @@ private:
bool goToNextFrame( bool bThreaded = false ); bool goToNextFrame( bool bThreaded = false );
static bool guessFormat( QString filename, unsigned int& rWidth, unsigned int& rHeight, int& rInputFormat, unsigned int& rBitsPerPixel, 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(); bool hasRunningModule();
+8 -13
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,8 +25,6 @@
#include "ViewArea.h" #include "ViewArea.h"
#include "GridManager.h"
#include <QColor> #include <QColor>
#include <QCoreApplication> #include <QCoreApplication>
#include <QDebug> #include <QDebug>
@@ -38,9 +36,10 @@
#include <QRectF> #include <QRectF>
#include <QString> #include <QString>
#include <QWidget> #include <QWidget>
#include <cmath> #include <cmath>
#include "GridManager.h"
static const QColor selectionColor = Qt::cyan; static const QColor selectionColor = Qt::cyan;
static const QColor imageMaskColor = Qt::green; static const QColor imageMaskColor = Qt::green;
static const QColor eraserColor = Qt::red; static const QColor eraserColor = Qt::red;
@@ -688,8 +687,7 @@ void ViewArea::paintEvent( QPaintEvent* event )
{ {
switch( tool() ) switch( tool() )
{ {
case MaskTool: case MaskTool: {
{
if( m_maskColor.isValid() ) if( m_maskColor.isValid() )
color = m_maskColor; color = m_maskColor;
else else
@@ -697,8 +695,7 @@ void ViewArea::paintEvent( QPaintEvent* event )
break; break;
} }
case EraserTool: case EraserTool: {
{
color = eraserColor; color = eraserColor;
break; break;
} }
@@ -733,7 +730,7 @@ void ViewArea::wheelEvent( QWheelEvent* event )
if( event->modifiers() & Qt::ControlModifier ) if( event->modifiers() & Qt::ControlModifier )
{ {
scale = 0.001 * event->delta(); scale = 0.001 * event->angleDelta().y();
if( scale > 0 ) if( scale > 0 )
scale = 1.25; scale = 1.25;
else else
@@ -1075,8 +1072,7 @@ void ViewArea::updateMask( const QRect& rect )
{ {
switch( tool() ) switch( tool() )
{ {
case MaskTool: case MaskTool: {
{
// Add rect to the mask // Add rect to the mask
QPainter painter( &m_mask ); QPainter painter( &m_mask );
painter.setBrush( Qt::color1 ); painter.setBrush( Qt::color1 );
@@ -1085,8 +1081,7 @@ void ViewArea::updateMask( const QRect& rect )
painter.end(); painter.end();
break; break;
} }
case EraserTool: case EraserTool: {
{
// Clears rect area in the mask // Clears rect area in the mask
QPainter painter( &m_mask ); QPainter painter( &m_mask );
painter.setBrush( Qt::color0 ); painter.setBrush( Qt::color0 );
+6 -6
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -26,17 +26,17 @@
#ifndef __VIEWAREA_H__ #ifndef __VIEWAREA_H__
#define __VIEWAREA_H__ #define __VIEWAREA_H__
#include "CommonDefs.h"
#include "GridManager.h"
#include "config.h"
#include "lib/CalypFrame.h"
#include <QBitmap> #include <QBitmap>
#include <QColor> #include <QColor>
#include <QPixmap> #include <QPixmap>
#include <QTimer> #include <QTimer>
#include <QWidget> #include <QWidget>
#include "CommonDefs.h"
#include "GridManager.h"
#include "config.h"
#include "lib/CalypFrame.h"
class CalypStream; class CalypStream;
/** /**
+13 -6
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* Joao Santos (joaompssantos@gmail.com) * Joao Santos (joaompssantos@gmail.com)
* *
@@ -27,14 +27,14 @@
#include "AboutDialog.h" #include "AboutDialog.h"
#include "config.h"
#include <QApplication> #include <QApplication>
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QLabel> #include <QLabel>
#include <QTextEdit> #include <QTextEdit>
#include <QVBoxLayout> #include <QVBoxLayout>
#include "config.h"
#define TAB_FROM_SPACES "&nbsp;&nbsp;&nbsp;" #define TAB_FROM_SPACES "&nbsp;&nbsp;&nbsp;"
AboutDialog::AboutDialog( QWidget* parent ) AboutDialog::AboutDialog( QWidget* parent )
@@ -49,7 +49,7 @@ AboutDialog::AboutDialog( QWidget* parent )
.arg( QApplication::applicationVersion() ) ); .arg( QApplication::applicationVersion() ) );
label->setWordWrap( false ); 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 #ifdef USE_QTDBUS
featuresList.append( QStringLiteral( "<li>Support for Qt DBus messages" ) ); featuresList.append( QStringLiteral( "<li>Support for Qt DBus messages" ) );
@@ -63,14 +63,21 @@ AboutDialog::AboutDialog( QWidget* parent )
featuresList.append( QStringLiteral( "</ul></p>" ) ); featuresList.append( QStringLiteral( "</ul></p>" ) );
QLabel* labelFeatures = new QLabel( featuresList ); 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; QWidget* topWidget = new QWidget;
QVBoxLayout* topLayout = new QVBoxLayout; QVBoxLayout* topLayout = new QVBoxLayout;
topLayout->addWidget( pixmapLabel, 0, Qt::AlignHCenter ); topLayout->addWidget( pixmapLabel, 0, Qt::AlignHCenter );
topLayout->addWidget( label ); topLayout->addWidget( label );
topLayout->addWidget( labelFeatures );
topLayout->addWidget( labelCopyright ); topLayout->addWidget( labelCopyright );
topLayout->addWidget( labelFeatures );
topLayout->addWidget( labelContributors );
topWidget->setLayout( topLayout ); topWidget->setLayout( topLayout );
// QTextEdit *textEdit = new QTextEdit(tr("<p>This program is free " // 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,8 +24,6 @@
#include "ConfigureFormatDialog.h" #include "ConfigureFormatDialog.h"
#include "lib/CalypFrame.h"
#include <QComboBox> #include <QComboBox>
#include <QDebug> #include <QDebug>
#include <QDialogButtonBox> #include <QDialogButtonBox>
@@ -39,6 +37,8 @@
#include <QString> #include <QString>
#include <QWidget> #include <QWidget>
#include "lib/CalypFrame.h"
#define MAX_SUPPORTED_RESOLUTION 99999 #define MAX_SUPPORTED_RESOLUTION 99999
QDataStream& operator<<( QDataStream& out, const CalypStandardResolutionVector& array ) QDataStream& operator<<( QDataStream& out, const CalypStandardResolutionVector& array )
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,8 +24,6 @@
#include "ModulesHandleOptDialog.h" #include "ModulesHandleOptDialog.h"
#include "lib/CalypOptions.h"
#include <QCheckBox> #include <QCheckBox>
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QLabel> #include <QLabel>
@@ -34,6 +32,8 @@
#include <QVector> #include <QVector>
#include <QWidget> #include <QWidget>
#include "lib/CalypOptions.h"
class QLineEdit; class QLineEdit;
class OpionConfiguration : public QWidget class OpionConfiguration : public QWidget
@@ -44,7 +44,8 @@ public:
m_pcChecked = NULL; m_pcChecked = NULL;
m_cName = option->opt_string; m_cName = option->opt_string;
m_pcDescription = new QLabel; 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; QHBoxLayout* layout = new QHBoxLayout;
layout->addWidget( m_pcDescription, 0, Qt::AlignLeft ); layout->addWidget( m_pcDescription, 0, Qt::AlignLeft );
if( !option->isBinary() ) if( !option->isBinary() )
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,13 +25,13 @@
#ifndef __MODULEHANDLEOPTDIALOG_H__ #ifndef __MODULEHANDLEOPTDIALOG_H__
#define __MODULEHANDLEOPTDIALOG_H__ #define __MODULEHANDLEOPTDIALOG_H__
#include <QDialog>
#include <QVector>
#include "CalypAppModuleIf.h" #include "CalypAppModuleIf.h"
#include "CommonDefs.h" #include "CommonDefs.h"
#include "config.h" #include "config.h"
#include <QDialog>
#include <QVector>
class OpionConfiguration; class OpionConfiguration;
/** /**
+2 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -30,7 +30,7 @@
#include <QProgressBar> #include <QProgressBar>
#include <QVBoxLayout> #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 ) : QWidget( parent ), m_uiTotalProgress( maxValue ), m_uiProgress( 0 )
{ {
QVBoxLayout* mainLayout = new QVBoxLayout( this ); QVBoxLayout* mainLayout = new QVBoxLayout( this );
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,11 +25,11 @@
#ifndef __PROGRESSBAR_H__ #ifndef __PROGRESSBAR_H__
#define __PROGRESSBAR_H__ #define __PROGRESSBAR_H__
#include "CommonDefs.h"
#include <QDialog> #include <QDialog>
#include <QWidget> #include <QWidget>
#include "CommonDefs.h"
class QProgressBar; class QProgressBar;
class ProgressBar : public QWidget class ProgressBar : public QWidget
@@ -37,7 +37,7 @@ class ProgressBar : public QWidget
Q_OBJECT Q_OBJECT
public: public:
ProgressBar( QWidget* parent, unsigned int maxValue ); ProgressBar( QWidget* parent, unsigned long long int maxValue );
void incrementProgress( unsigned int ); void incrementProgress( unsigned int );
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,8 +24,6 @@
#include "SeekStreamDialog.h" #include "SeekStreamDialog.h"
#include "lib/CalypStream.h"
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QGridLayout> #include <QGridLayout>
#include <QLabel> #include <QLabel>
@@ -33,6 +31,8 @@
#include <QVector> #include <QVector>
#include <QWidget> #include <QWidget>
#include "lib/CalypStream.h"
SeekStreamDialog::SeekStreamDialog( CalypStream* pcCurrStream, QWidget* parent ) SeekStreamDialog::SeekStreamDialog( CalypStream* pcCurrStream, QWidget* parent )
: QDialog( parent, Qt::Dialog | Qt::WindowTitleHint ), m_iSelectedFrameNum() : QDialog( parent, Qt::Dialog | Qt::WindowTitleHint ), m_iSelectedFrameNum()
{ {
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,13 +25,13 @@
#ifndef __SEEKSTREAMDIALOG_H__ #ifndef __SEEKSTREAMDIALOG_H__
#define __SEEKSTREAMDIALOG_H__ #define __SEEKSTREAMDIALOG_H__
#include <QDialog>
#include <QVector>
#include "CalypAppModuleIf.h" #include "CalypAppModuleIf.h"
#include "CommonDefs.h" #include "CommonDefs.h"
#include "config.h" #include "config.h"
#include <QDialog>
#include <QVector>
class QSpinBox; class QSpinBox;
/** /**
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,12 +24,12 @@
#include "SubWindowSelectorDialog.h" #include "SubWindowSelectorDialog.h"
#include "SubWindowHandle.h"
#include "VideoSubWindow.h"
#include <QCheckBox> #include <QCheckBox>
#include <QGroupBox> #include <QGroupBox>
#include "SubWindowHandle.h"
#include "VideoSubWindow.h"
SubWindowSelectorDialog::SubWindowSelectorDialog( QWidget* parent, SubWindowHandle* windowManager, SubWindowSelectorDialog::SubWindowSelectorDialog( QWidget* parent, SubWindowHandle* windowManager,
unsigned int uiCategory, int minWindowsSelected, int maxWindowsSelected ) unsigned int uiCategory, int minWindowsSelected, int maxWindowsSelected )
: QDialog( parent ) : QDialog( parent )
+4 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,13 +25,12 @@
#ifndef __DIALOGSUBWINDOWSELECTOR_H__ #ifndef __DIALOGSUBWINDOWSELECTOR_H__
#define __DIALOGSUBWINDOWSELECTOR_H__ #define __DIALOGSUBWINDOWSELECTOR_H__
#include "CommonDefs.h" #include <QVector>
#include "config.h"
#include <QtCore> #include <QtCore>
#include <QtWidgets> #include <QtWidgets>
#include <QVector> #include "CommonDefs.h"
#include "config.h"
class QPixmap; class QPixmap;
class QColor; class QColor;
+23 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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 = new QLabel;
labelRangeValue->setAlignment( Qt::AlignRight | Qt::AlignVCenter ); 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:" ) ); QLabel* meanLabel = new QLabel( tr( "Mean:" ) );
meanLabel->setAlignment( Qt::AlignLeft | Qt::AlignVCenter ); meanLabel->setAlignment( Qt::AlignLeft | Qt::AlignVCenter );
labelMeanValue = new QLabel; labelMeanValue = new QLabel;
@@ -199,6 +204,11 @@ FramePropertiesDock::FramePropertiesDock( QWidget* parent, bool* pbMainPlaySwitc
labelMedianValue = new QLabel; labelMedianValue = new QLabel;
labelMedianValue->setAlignment( Qt::AlignRight | Qt::AlignVCenter ); 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:" ) ); QLabel* percentileLabel = new QLabel( tr( "Percentile:" ) );
percentileLabel->setAlignment( Qt::AlignLeft | Qt::AlignVCenter ); percentileLabel->setAlignment( Qt::AlignLeft | Qt::AlignVCenter );
labelPercentileValue = new QLabel; labelPercentileValue = new QLabel;
@@ -212,12 +222,16 @@ FramePropertiesDock::FramePropertiesDock( QWidget* parent, bool* pbMainPlaySwitc
statisticsLayout->addWidget( labelCountValue, gridRow++, 1 ); statisticsLayout->addWidget( labelCountValue, gridRow++, 1 );
statisticsLayout->addWidget( rangeLabel, gridRow, 0 ); statisticsLayout->addWidget( rangeLabel, gridRow, 0 );
statisticsLayout->addWidget( labelRangeValue, gridRow++, 1 ); statisticsLayout->addWidget( labelRangeValue, gridRow++, 1 );
statisticsLayout->addWidget( nEBinsLabel, gridRow, 0 );
statisticsLayout->addWidget( labelNEBinsValue, gridRow++, 1 );
statisticsLayout->addWidget( meanLabel, gridRow, 0 ); statisticsLayout->addWidget( meanLabel, gridRow, 0 );
statisticsLayout->addWidget( labelMeanValue, gridRow++, 1 ); statisticsLayout->addWidget( labelMeanValue, gridRow++, 1 );
statisticsLayout->addWidget( stdDevLabel, gridRow, 0 ); statisticsLayout->addWidget( stdDevLabel, gridRow, 0 );
statisticsLayout->addWidget( labelStdDevValue, gridRow++, 1 ); statisticsLayout->addWidget( labelStdDevValue, gridRow++, 1 );
statisticsLayout->addWidget( medianLabel, gridRow, 0 ); statisticsLayout->addWidget( medianLabel, gridRow, 0 );
statisticsLayout->addWidget( labelMedianValue, gridRow++, 1 ); statisticsLayout->addWidget( labelMedianValue, gridRow++, 1 );
statisticsLayout->addWidget( entropyLabel, gridRow, 0 );
statisticsLayout->addWidget( labelEntropyValue, gridRow++, 1 );
QGroupBox* statisticsGroup = new QGroupBox( tr( "Statistics" ) ); QGroupBox* statisticsGroup = new QGroupBox( tr( "Statistics" ) );
statisticsGroup->setLayout( statisticsLayout ); statisticsGroup->setLayout( statisticsLayout );
@@ -274,6 +288,7 @@ void FramePropertiesDock::reset()
m_iLastFrameType = -1; m_iLastFrameType = -1;
labelNEBinsValue->clear();
labelMeanValue->clear(); labelMeanValue->clear();
labelPixelsValue->clear(); labelPixelsValue->clear();
labelStdDevValue->clear(); labelStdDevValue->clear();
@@ -444,6 +459,9 @@ void FramePropertiesDock::updateStatistiques()
if( frame ) if( frame )
{ {
double numBins = frame->getNEBins( channel );
labelNEBinsValue->setText( value.setNum( (float)numBins, 'f', 0 ) );
QString rangeText = QString rangeText =
"[" + QString::number( frame->getMinimumPelValue( channel ) ) + ":" + QString::number( frame->getMaximumPelValue( channel ) ) + "]"; "[" + QString::number( frame->getMinimumPelValue( channel ) ) + ":" + QString::number( frame->getMaximumPelValue( channel ) ) + "]";
labelRangeValue->setText( rangeText ); labelRangeValue->setText( rangeText );
@@ -461,7 +479,10 @@ void FramePropertiesDock::updateStatistiques()
labelCountValue->setText( value.setNum( (float)counts, 'f', 0 ) ); labelCountValue->setText( value.setNum( (float)counts, 'f', 0 ) );
double median = frame->getMedian( channel, min, max ); 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 ); double percentile = ( pixels > 0 ? ( 100.0 * counts / pixels ) : 0.0 );
labelPercentileValue->setText( value.setNum( percentile, 'f', 1 ) ); labelPercentileValue->setText( value.setNum( percentile, 'f', 1 ) );
+5 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,14 +25,14 @@
#ifndef __FRAMEPROPERTIESDOCK_H__ #ifndef __FRAMEPROPERTIESDOCK_H__
#define __FRAMEPROPERTIESDOCK_H__ #define __FRAMEPROPERTIESDOCK_H__
#include <QtWidgets>
#include "CommonDefs.h" #include "CommonDefs.h"
#include "HistogramWidget.h" #include "HistogramWidget.h"
#include "config.h" #include "config.h"
#include "lib/CalypFrame.h" #include "lib/CalypFrame.h"
#include "lib/CalypStream.h" #include "lib/CalypStream.h"
#include <QtWidgets>
class FramePropertiesDock : public QWidget class FramePropertiesDock : public QWidget
{ {
Q_OBJECT Q_OBJECT
@@ -72,9 +72,11 @@ private:
QLabel* labelPixelsValue; QLabel* labelPixelsValue;
QLabel* labelCountValue; QLabel* labelCountValue;
QLabel* labelRangeValue; QLabel* labelRangeValue;
QLabel* labelNEBinsValue;
QLabel* labelMeanValue; QLabel* labelMeanValue;
QLabel* labelStdDevValue; QLabel* labelStdDevValue;
QLabel* labelMedianValue; QLabel* labelMedianValue;
QLabel* labelEntropyValue;
QLabel* labelPercentileValue; QLabel* labelPercentileValue;
QLabel* colorsLabel; QLabel* colorsLabel;
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,14 +24,14 @@
#include "ModuleHandleDock.h" #include "ModuleHandleDock.h"
#include "CalypAppModuleIf.h"
#include "ModulesHandle.h"
#include <QGridLayout> #include <QGridLayout>
#include <QLabel> #include <QLabel>
#include <QString> #include <QString>
#include <QtGui> #include <QtGui>
#include "CalypAppModuleIf.h"
#include "ModulesHandle.h"
ModuleHandleDock::ModuleHandleDock( QWidget* parent, CalypAppModuleIf* moduleIf ) ModuleHandleDock::ModuleHandleDock( QWidget* parent, CalypAppModuleIf* moduleIf )
: QWidget( parent ), m_pcCurrModuleIf( moduleIf ) : QWidget( parent ), m_pcCurrModuleIf( moduleIf )
{ {
+4 -4
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,12 +25,12 @@
#ifndef __MODULEHANDLEDOCK_H__ #ifndef __MODULEHANDLEDOCK_H__
#define __MODULEHANDLEDOCK_H__ #define __MODULEHANDLEDOCK_H__
#include "CommonDefs.h"
#include "config.h"
#include <QSize> #include <QSize>
#include <QWidget> #include <QWidget>
#include "CommonDefs.h"
#include "config.h"
class QLabel; class QLabel;
class CalypAppModuleIf; class CalypAppModuleIf;
+6 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,11 +24,11 @@
#include "QualityMeasurementSidebar.h" #include "QualityMeasurementSidebar.h"
#include <QtGui>
#include "SubWindowHandle.h" #include "SubWindowHandle.h"
#include "VideoSubWindow.h" #include "VideoSubWindow.h"
#include <QtGui>
QualityMeasurementSidebar::QualityMeasurementSidebar( QWidget* parent, SubWindowHandle* windowManager ) QualityMeasurementSidebar::QualityMeasurementSidebar( QWidget* parent, SubWindowHandle* windowManager )
: QWidget( parent ), m_pcMainWindowManager( windowManager ), m_pcCurrentVideoSubWindow( NULL ) : QWidget( parent ), m_pcMainWindowManager( windowManager ), m_pcCurrentVideoSubWindow( NULL )
{ {
@@ -185,6 +185,8 @@ void QualityMeasurementSidebar::updateSidebarData()
VideoSubWindow* refSubWindow = m_pcCurrentVideoSubWindow->getRefSubWindow(); VideoSubWindow* refSubWindow = m_pcCurrentVideoSubWindow->getRefSubWindow();
if( refSubWindow ) if( refSubWindow )
{ {
QApplication::setOverrideCursor( Qt::WaitCursor );
CalypFrame* currFrame = m_pcCurrentVideoSubWindow->getCurrFrame(); CalypFrame* currFrame = m_pcCurrentVideoSubWindow->getCurrFrame();
CalypFrame* refFrame = refSubWindow->getCurrFrame(); CalypFrame* refFrame = refSubWindow->getCurrFrame();
double quality; double quality;
@@ -199,6 +201,7 @@ void QualityMeasurementSidebar::updateSidebarData()
{ {
m_ppcLabelQualityValue[component]->setText( zeroValue ); m_ppcLabelQualityValue[component]->setText( zeroValue );
} }
QApplication::restoreOverrideCursor();
return; return;
} }
else else
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,14 +25,14 @@
#ifndef __QUALITYMEASUREMENTSIDEBAR_H__ #ifndef __QUALITYMEASUREMENTSIDEBAR_H__
#define __QUALITYMEASUREMENTSIDEBAR_H__ #define __QUALITYMEASUREMENTSIDEBAR_H__
#include <QtWidgets>
#include "CommonDefs.h" #include "CommonDefs.h"
#include "HistogramWidget.h" #include "HistogramWidget.h"
#include "config.h" #include "config.h"
#include "lib/CalypFrame.h" #include "lib/CalypFrame.h"
#include "lib/CalypStream.h" #include "lib/CalypStream.h"
#include <QtWidgets>
class SubWindowHandle; class SubWindowHandle;
class VideoSubWindow; 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 SET(qcustomplot_SRCS qcustomplot.cpp qcustomplot.h)
qcustomplot.cpp
qcustomplot.h
)
ADD_LIBRARY( QCustomPlotLib STATIC ${qcustomplot_SRCS} ) ADD_LIBRARY(QCustomPlotLib STATIC ${qcustomplot_SRCS})
TARGET_LINK_LIBRARIES( QCustomPlotLib TARGET_LINK_LIBRARIES(QCustomPlotLib Qt5::Core Qt5::Gui Qt5::Widgets Qt5::PrintSupport)
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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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::setApplicationVersion( QStringLiteral( CALYP_VERSION_STRING ) );
QApplication::setOrganizationName( QStringLiteral( "PixLRA" ) ); QApplication::setOrganizationName( QStringLiteral( "PixLRA" ) );
#if _WIN32
application.setStyle( QStyleFactory::create( "Fusion" ) );
#endif
#ifdef USE_QTDBUS #ifdef USE_QTDBUS
/** /**
* use dbus, if available * use dbus, if available
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,11 +25,11 @@
#ifndef __WIDGETFRAMENUMBER_H__ #ifndef __WIDGETFRAMENUMBER_H__
#define __WIDGETFRAMENUMBER_H__ #define __WIDGETFRAMENUMBER_H__
#include <QWidget>
#include "CommonDefs.h" #include "CommonDefs.h"
#include "config.h" #include "config.h"
#include <QWidget>
class QLabel; class QLabel;
class FrameNumberWidget : public QWidget class FrameNumberWidget : public QWidget
+6 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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; tipText += cellBeg + tr( "Median:" ) + cellMid;
double median = frame->getMedian( m_channelType, 0, frame->getNumHistogramSegment() - 1 ); 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; tipText += cellBeg + tr( "Percent:" ) + cellMid;
double percentile = ( pixels > 0 ? ( 100.0 * counts / pixels ) : 0.0 ); 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -26,13 +26,13 @@
#ifndef __HISTOGRAMWIDGET_H__ #ifndef __HISTOGRAMWIDGET_H__
#define __HISTOGRAMWIDGET_H__ #define __HISTOGRAMWIDGET_H__
#include <QColor>
#include <QWidget>
#include "CommonDefs.h" #include "CommonDefs.h"
#include "config.h" #include "config.h"
#include "lib/CalypFrame.h" #include "lib/CalypFrame.h"
#include <QColor>
#include <QWidget>
class QEvent; class QEvent;
class HistogramWorker; 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 # Once done this will define FFMPEG_FOUND - System has the all required components. FFMPEG_INCLUDE_DIRS - Include directory necessary for
# FFMPEG_FOUND - System has the all required components. # using the required components headers. FFMPEG_LIBRARIES - Link these to use the required ffmpeg components. FFMPEG_DEFINITIONS - Compiler
# FFMPEG_INCLUDE_DIRS - Include directory necessary for using the required components headers. # switches required for using the required ffmpeg components.
# 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. # For each of the components it will additionally set. - AVCODEC - AVDEVICE - AVFORMAT - AVUTIL - POSTPROCESS - SWSCALE the following variables will
# - AVCODEC # be defined <component>_FOUND - System has <component> <component>_INCLUDE_DIRS - Include directory necessary for using the <component>
# - AVDEVICE # headers <component>_LIBRARIES - Link these to use <component> <component>_DEFINITIONS - Compiler switches required for using <component>
# - AVFORMAT # <component>_VERSION - The components version
# - 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) 2006, Matthias Kretz, <kretz@kde.org> Copyright (c) 2008, Alexander Neundorf, <neundorf@kde.org> Copyright (c) 2011, Michael Jansen,
# Copyright (c) 2008, Alexander Neundorf, <neundorf@kde.org> # <kde@michael-jansen.biz>
# Copyright (c) 2011, Michael Jansen, <kde@michael-jansen.biz>
# #
# Redistribution and use is allowed according to the terms of the BSD license. # Redistribution and use is allowed according to the terms of the BSD license. For details see the accompanying COPYING-CMAKE-SCRIPTS file.
# 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 # The default components were taken from a survey over other FindFFMPEG.cmake files
if (NOT FFmpeg_FIND_COMPONENTS) IF(NOT FFmpeg_FIND_COMPONENTS)
set(FFmpeg_FIND_COMPONENTS AVCODEC AVFORMAT AVUTIL) SET(FFmpeg_FIND_COMPONENTS AVCODEC AVFORMAT AVUTIL)
endif () ENDIF()
# #
### Macro: set_component_found # Macro: set_component_found
# #
# Marks the given component as found if both *_LIBRARIES AND *_INCLUDE_DIRS is present. # Marks the given component as found if both *_LIBRARIES AND *_INCLUDE_DIRS is present.
# #
macro(set_component_found _component ) MACRO(set_component_found _component)
if (${_component}_LIBRARIES AND ${_component}_INCLUDE_DIRS) IF(${_component}_LIBRARIES AND ${_component}_INCLUDE_DIRS)
# message(STATUS " - ${_component} found.") # message(STATUS " - ${_component} found.")
set(${_component}_FOUND TRUE) SET(${_component}_FOUND TRUE)
else () ELSE()
# message(STATUS " - ${_component} not found.") # message(STATUS " - ${_component} not found.")
endif () ENDIF()
endmacro() ENDMACRO()
# #
### Macro: find_component # Macro: find_component
# #
# Checks for the given component by invoking pkgconfig and then looking up the libraries and # Checks for the given component by invoking pkgconfig and then looking up the libraries and include directories.
# include directories.
# #
macro(find_component _component _pkgconfig _library _header) MACRO(find_component _component _pkgconfig _library _header)
if (NOT WIN32) IF(NOT WIN32)
# use pkg-config to get the directories and then use these values # use pkg-config to get the directories and then use these values in the FIND_PATH() and FIND_LIBRARY() calls
# in the FIND_PATH() and FIND_LIBRARY() calls FIND_PACKAGE(PkgConfig)
find_package(PkgConfig) IF(PKG_CONFIG_FOUND)
if (PKG_CONFIG_FOUND) PKG_CHECK_MODULES(PC_${_component} ${_pkgconfig})
pkg_check_modules(PC_${_component} ${_pkgconfig}) ENDIF()
endif () ENDIF(NOT WIN32)
endif (NOT WIN32)
find_path(${_component}_INCLUDE_DIRS ${_header} FIND_PATH(
HINTS ${_component}_INCLUDE_DIRS ${_header}
${PC_LIB${_component}_INCLUDEDIR} HINTS ${PC_LIB${_component}_INCLUDEDIR} ${PC_LIB${_component}_INCLUDE_DIRS}
${PC_LIB${_component}_INCLUDE_DIRS} PATH_SUFFIXES ffmpeg
PATH_SUFFIXES
ffmpeg
) )
find_library(${_component}_LIBRARIES NAMES ${_library} FIND_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
${_component}_LIBRARIES ${_component}_LIBRARIES
${_component}_DEFINITIONS NAMES ${_library}
${_component}_VERSION) 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. # Check for cached results. If there are skip the costly part.
if (NOT FFMPEG_LIBRARIES) IF(NOT FFMPEG_LIBRARIES)
# Check for all possible component. # Check for all possible component.
find_component(AVCODEC libavcodec avcodec libavcodec/avcodec.h) FIND_COMPONENT(AVCODEC libavcodec avcodec libavcodec/avcodec.h)
find_component(AVFORMAT libavformat avformat libavformat/avformat.h) FIND_COMPONENT(AVFORMAT libavformat avformat libavformat/avformat.h)
find_component(AVDEVICE libavdevice avdevice libavdevice/avdevice.h) FIND_COMPONENT(AVDEVICE libavdevice avdevice libavdevice/avdevice.h)
find_component(AVUTIL libavutil avutil libavutil/avutil.h) FIND_COMPONENT(AVUTIL libavutil avutil libavutil/avutil.h)
find_component(SWSCALE libswscale swscale libswscale/swscale.h) FIND_COMPONENT(SWSCALE libswscale swscale libswscale/swscale.h)
find_component(POSTPROC libpostproc postproc libpostproc/postprocess.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. # Check if the required components were found and add their stuff to the FFMPEG_* vars.
foreach (_component ${FFmpeg_FIND_COMPONENTS}) FOREACH(_component ${FFmpeg_FIND_COMPONENTS})
if (${_component}_FOUND) IF(${_component}_FOUND)
# message(STATUS "Required component ${_component} present.") # message(STATUS "Required component ${_component} present.")
set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} ${${_component}_LIBRARIES}) SET(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} ${${_component}_LIBRARIES})
set(FFMPEG_DEFINITIONS ${FFMPEG_DEFINITIONS} ${${_component}_DEFINITIONS}) SET(FFMPEG_DEFINITIONS ${FFMPEG_DEFINITIONS} ${${_component}_DEFINITIONS})
list(APPEND FFMPEG_INCLUDE_DIRS ${${_component}_INCLUDE_DIRS}) LIST(APPEND FFMPEG_INCLUDE_DIRS ${${_component}_INCLUDE_DIRS})
else () ELSE()
# message(STATUS "Required component ${_component} missing.") # message(STATUS "Required component ${_component} missing.")
endif () ENDIF()
endforeach () ENDFOREACH()
# Build the include path with duplicates removed. # Build the include path with duplicates removed.
if (FFMPEG_INCLUDE_DIRS) IF(FFMPEG_INCLUDE_DIRS)
list(REMOVE_DUPLICATES FFMPEG_INCLUDE_DIRS) LIST(REMOVE_DUPLICATES FFMPEG_INCLUDE_DIRS)
endif () ENDIF()
# cache the vars. # cache the vars.
set(FFMPEG_INCLUDE_DIRS ${FFMPEG_INCLUDE_DIRS} CACHE STRING "The FFmpeg include directories." FORCE) SET(FFMPEG_INCLUDE_DIRS
set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} CACHE STRING "The FFmpeg libraries." FORCE) ${FFMPEG_INCLUDE_DIRS}
set(FFMPEG_DEFINITIONS ${FFMPEG_DEFINITIONS} CACHE STRING "The FFmpeg cflags." FORCE) 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 MARK_AS_ADVANCED(FFMPEG_INCLUDE_DIRS FFMPEG_LIBRARIES FFMPEG_DEFINITIONS)
FFMPEG_LIBRARIES
FFMPEG_DEFINITIONS)
endif () ENDIF()
# Now set the noncached _FOUND vars for the components. # Now set the noncached _FOUND vars for the components.
foreach (_component AVCODEC AVDEVICE AVFORMAT AVUTIL POSTPROCESS SWSCALE) FOREACH(_component AVCODEC AVDEVICE AVFORMAT AVUTIL POSTPROCESS SWSCALE)
set_component_found(${_component}) SET_COMPONENT_FOUND(${_component})
endforeach () ENDFOREACH()
# Compile the list of required vars # Compile the list of required vars
set(_FFmpeg_REQUIRED_VARS FFMPEG_LIBRARIES FFMPEG_INCLUDE_DIRS) SET(_FFmpeg_REQUIRED_VARS FFMPEG_LIBRARIES FFMPEG_INCLUDE_DIRS)
foreach (_component ${FFmpeg_FIND_COMPONENTS}) FOREACH(_component ${FFmpeg_FIND_COMPONENTS})
list(APPEND _FFmpeg_REQUIRED_VARS ${_component}_LIBRARIES ${_component}_INCLUDE_DIRS) LIST(APPEND _FFmpeg_REQUIRED_VARS ${_component}_LIBRARIES ${_component}_INCLUDE_DIRS)
endforeach () ENDFOREACH()
# Give a nice error message if some of the required vars are missing. # 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 @@
# 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)
MACRO(ADD_MODULE name file ) SET(__modulename "Module${name}")
set(__modulename "Module${name}") OPTION(MODULE_${name} "Use module ${name}" ON)
OPTION(MODULE_${name} "Use module ${name}" ON ) ADD_FEATURE_INFO(${name} MODULE_${name} "Module ${name}")
ADD_FEATURE_INFO(${name} MODULE_${name} "Module ${name}" ) IF(MODULE_${name})
if( MODULE_${name} ) LIST(APPEND Calyp_Mod_SRCS ${MODULE_LOCATION}${file}.cpp)
list(APPEND Calyp_Mod_SRCS ${file} ) LIST(APPEND MODULES_LIST_NAME ${name})
LIST(APPEND MODULES_LIST_NAME ${name} ) LIST(APPEND MODULES_LIST_FILES ${file})
LIST(APPEND MODULES_LIST_FILES ${file} ) SET(Calyp_Mod_SRCS
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "#include \"${file}.h\"\n") "${Calyp_Mod_SRCS}"
endif() PARENT_SCOPE
unset(__modulename) )
SET(MODULES_LIST_NAME
"${MODULES_LIST_NAME}"
PARENT_SCOPE
)
SET(MODULES_LIST_FILES
"${MODULES_LIST_FILES}"
PARENT_SCOPE
)
ENDIF()
UNSET(__modulename)
ENDMACRO() ENDMACRO()
# 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
MACRO(ADD_MODULE_USE_OPENCV name file ) # (OpenCV modules required) Used in modules/CMakeLists.txt
IF( USE_OPENCV ) MACRO(ADD_MODULE_USE_OPENCV name file)
SET( ADD_MODULE_USE_OPENCV_VERSION "2.4" ) IF(USE_OPENCV)
CMAKE_PARSE_ARGUMENTS(ADD_MODULE_USE_OPENCV "" "VERSION" "MODULES" ${ARGN} ) SET(ADD_MODULE_USE_OPENCV_VERSION "2.4")
IF( NOT ( ${OpenCV_VERSION} VERSION_LESS ${ADD_MODULE_USE_OPENCV_VERSION} ) ) CMAKE_PARSE_ARGUMENTS(ADD_MODULE_USE_OPENCV "" "VERSION" "MODULES" ${ARGN})
SET( _HAS_MODULES TRUE ) IF(NOT (${OpenCV_VERSION} VERSION_LESS ${ADD_MODULE_USE_OPENCV_VERSION}))
FOREACH(opencv_module IN LISTS ADD_MODULE_USE_OPENCV_MODULES ) SET(_HAS_MODULES TRUE)
string(TOUPPER "${opencv_module}" opencv_moduleUP) FOREACH(opencv_module IN LISTS ADD_MODULE_USE_OPENCV_MODULES)
FIND_PACKAGE( OpenCV QUIET COMPONENTS ${opencv_module} ) STRING(TOUPPER "${opencv_module}" opencv_moduleUP)
IF( NOT ${OPENCV_${opencv_moduleUP}_FOUND} EQUAL "1" ) FIND_PACKAGE(OpenCV QUIET COMPONENTS ${opencv_module})
SET( _HAS_MODULES FALSE ) IF(NOT ${OPENCV_${opencv_moduleUP}_FOUND} EQUAL "1")
SET(_HAS_MODULES FALSE)
ELSE() ELSE()
LIST(APPEND OPENCV_MODULES ${opencv_module} ) LIST(APPEND OPENCV_MODULES ${opencv_module})
ENDIF() ENDIF()
ENDFOREACH() ENDFOREACH()
IF( _HAS_MODULES ) IF(_HAS_MODULES)
ADD_MODULE( ${name} ${file} ) ADD_MODULE(${name} ${file})
ENDIF() ENDIF()
UNSET( OPENCV_${opencv_moduleUP}_FOUND ) UNSET(OPENCV_${opencv_moduleUP}_FOUND)
UNSET( _HAS_MODULES ) UNSET(_HAS_MODULES)
ENDIF() ENDIF()
UNSET( ADD_MODULE_USE_OPENCV_VERSION ) UNSET(ADD_MODULE_USE_OPENCV_VERSION)
ENDIF() ENDIF()
ENDMACRO() ENDMACRO()
#
# Create header # 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(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "#define REGISTER_ALL_MODULES \\\n")
FOREACH(module ${MODULES_LIST_NAME})
file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "// This files add the header files of each module\n" FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "Register( \"${module}\", &(${module}::Create) ); \\\n")
ENDFOREACH(module ${MODULES_LIST_NAME})
"#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 "\n#endif // __MODULESLISTHEADER_H__\n")
ENDMACRO() ENDMACRO()
+67 -49
View File
@@ -1,63 +1,81 @@
##################################################################################### # ####################################################################################################################################################
# DLLs and Win32 specific code # DLLs and Win32 specific code
###################################################################################### # ####################################################################################################################################################
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} ) FOREACH(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG ) STRING(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "." ) SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ".")
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "." ) SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ".")
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "." ) SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ".")
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES ) ENDFOREACH(OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES)
SET(MSVC_DLL_DIR "MSVC_DLL_DIR" CACHE PATH "Where to find MSVC dlls") SET(MSVC_DLL_DIR
#INSTALL(FILES ${MSVC_DLL_DIR}/msvcr120.dll DESTINATION bin ) "MSVC_DLL_DIR"
#INSTALL(FILES ${MSVC_DLL_DIR}/msvcp120.dll DESTINATION bin ) 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_DIR
SET(QT_ICU_VERSION "" CACHE STRING "Qt ICU version of dll's" ) "QT-Dir"
SET(QT_DLL_POSTFIX "" CACHE STRING "Postfix to dll's name for debug" ) CACHE PATH "Where to find QT Lib on Windows"
SET(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH} ${QT_DIR}" ) )
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 ) IF(USE_FERVOR)
INSTALL(FILES ${QT_DIR}/bin/Qt5Core${QT_DLL_POSTFIX}.dll DESTINATION bin ) INSTALL(FILES ${QT_DIR}/bin/Qt5Network${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5Gui${QT_DLL_POSTFIX}.dll DESTINATION bin ) INSTALL(FILES ${QT_DIR}/bin/Qt5WebKit${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5Widgets${QT_DLL_POSTFIX}.dll DESTINATION bin ) INSTALL(FILES ${QT_DIR}/bin/Qt5WebKitWidgets${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5PrintSupport${QT_DLL_POSTFIX}.dll DESTINATION bin ) INSTALL(FILES ${QT_DIR}/bin/Qt5Quick${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/plugins/platforms/qwindows${QT_DLL_POSTFIX}.dll DESTINATION bin/platforms ) INSTALL(FILES ${QT_DIR}/bin/Qt5Qml${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/plugins/platforms/qminimal${QT_DLL_POSTFIX}.dll DESTINATION bin/platforms ) INSTALL(FILES ${QT_DIR}/bin/Qt5Multimedia${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/plugins/platforms/qoffscreen${QT_DLL_POSTFIX}.dll DESTINATION bin/platforms ) INSTALL(FILES ${QT_DIR}/bin/Qt5Sql${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5Positioning${QT_DLL_POSTFIX}.dll DESTINATION bin)
IF( USE_FERVOR ) INSTALL(FILES ${QT_DIR}/bin/Qt5Sensors${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5Network${QT_DLL_POSTFIX}.dll DESTINATION bin ) INSTALL(FILES ${QT_DIR}/bin/Qt5MultimediaWidgets${QT_DLL_POSTFIX}.dll DESTINATION bin)
INSTALL(FILES ${QT_DIR}/bin/Qt5WebKit${QT_DLL_POSTFIX}.dll DESTINATION bin ) INSTALL(FILES ${QT_DIR}/bin/Qt5OpenGL${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()
ENDIF() ENDIF()
IF( USE_OPENCV ) IF(USE_OPENCV)
SET(OpenCV_DLL_DIR "${OpenCV_DIR}/bin" CACHE PATH "Where to find OpenCV dlls") SET(OpenCV_DLL_DIR
SET(OpenCV_INSTALL_MODULES ${OPENCV_MODULES} CACHE STRING "List of OpenCV modules") "${OpenCV_DIR}/bin"
FOREACH(opencv_module IN LISTS OpenCV_INSTALL_MODULES ) CACHE PATH "Where to find OpenCV dlls"
INSTALL(FILES ${OpenCV_DLL_DIR}/opencv_${opencv_module}${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}.dll DESTINATION bin ) )
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() ENDFOREACH()
ENDIF() ENDIF()
IF( USE_FFMPEG ) IF(USE_FFMPEG)
SET(FFMPEG_DIR "FFmpeg-Dir" CACHE PATH "Where to find FFmpeg Lib on Windows") SET(FFMPEG_DIR
INSTALL(FILES ${FFMPEG_DIR}/bin/avcodec-${AVCODEC_VERSION}.dll DESTINATION bin ) "FFmpeg-Dir"
INSTALL(FILES ${FFMPEG_DIR}/bin/avformat-${AVFORMAT_VERSION}.dll DESTINATION bin ) CACHE PATH "Where to find FFmpeg Lib on Windows"
INSTALL(FILES ${FFMPEG_DIR}/bin/avutil-${AVUTIL_VERSION}.dll DESTINATION bin ) )
INSTALL(FILES ${FFMPEG_DIR}/bin/swscale-${SWSCALE_VERSION}.dll DESTINATION bin ) INSTALL(DIRECTORY ${FFMPEG_DIR}/bin/ DESTINATION bin)
INSTALL(FILES ${FFMPEG_DIR}/bin/swresample-${SWRESAMPLE_VERSION}.dll DESTINATION bin )
ENDIF() ENDIF()
+5 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -26,10 +26,10 @@
#define __CONFIG_CALYP_H__ #define __CONFIG_CALYP_H__
/* Version definition */ /* Version definition */
#define CALYP_VERSION_MAJOR @CALYP_VERSION_MAJOR@ #define CALYP_VERSION_MAJOR @CALYP_VERSION_MAJOR @
#define CALYP_VERSION_MINOR @CALYP_VERSION_MINOR@ #define CALYP_VERSION_MINOR @CALYP_VERSION_MINOR @
#define CALYP_VERSION_PATCH @CALYP_VERSION_PATCH@ #define CALYP_VERSION_PATCH @CALYP_VERSION_PATCH @
#define CALYP_VERSION @CALYP_VERSION@ #define CALYP_VERSION @CALYP_VERSION @
#define CALYP_VERSION_STRING "@CALYP_VERSION_STRING@" #define CALYP_VERSION_STRING "@CALYP_VERSION_STRING@"
#define UPDATE_CHANNEL "@UPDATE_CHANNEL@" #define UPDATE_CHANNEL "@UPDATE_CHANNEL@"
+4 -6
View File
@@ -1,7 +1,5 @@
### #
### CMakeLists for examples # CMakeLists for examples
### #
ADD_SUBDIRECTORY( modules )
ADD_SUBDIRECTORY(modules)
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -23,6 +23,7 @@
*/ */
#include "AbsoluteFrameDifferenceExample.h" #include "AbsoluteFrameDifferenceExample.h"
#include <cstdlib> #include <cstdlib>
REGISTER_CLASS_MAKER( AbsoluteFrameDifferenceExample ) REGISTER_CLASS_MAKER( AbsoluteFrameDifferenceExample )
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,10 +25,10 @@
#ifndef __ABSOLUTEFRAMEDIFFERENCEEXAMPLE_H__ #ifndef __ABSOLUTEFRAMEDIFFERENCEEXAMPLE_H__
#define __ABSOLUTEFRAMEDIFFERENCEEXAMPLE_H__ #define __ABSOLUTEFRAMEDIFFERENCEEXAMPLE_H__
#include "CalypModuleIf.h"
#include <cassert> #include <cassert>
#include "CalypModuleIf.h"
class AbsoluteFrameDifferenceExample : public CalypModuleIf class AbsoluteFrameDifferenceExample : public CalypModuleIf
{ {
REGISTER_CLASS_FACTORY( AbsoluteFrameDifferenceExample ) 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) 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) 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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 LC_ALL=en_GB.utf8
export LANG=C export LANG=C
@@ -8,7 +8,7 @@ MY_NAME="$(basename "$0")"
SET_VERBOSE=0 SET_VERBOSE=0
ALL_FILES=0 ALL_FILES=0
function parsearguments { function parsearguments() {
local ARGS=$(getopt -o "h" -l "verbose,all,help" -n "${MY_NAME}" -- "$@") local ARGS=$(getopt -o "h" -l "verbose,all,help" -n "${MY_NAME}" -- "$@")
local PRINT_HELP=0 local PRINT_HELP=0
@@ -123,5 +123,5 @@ while read filename ; do
# only change/touch original file if it has been changed # 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}\"" ; } 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 done
+58 -68
View File
@@ -1,22 +1,14 @@
### #
### CMakeLists for calyp lib component # CMakeLists for calyp lib component
### #
INCLUDE(GNUInstallDirs) INCLUDE(GNUInstallDirs)
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
set(Calyp_Lib_SRCS SET(Calyp_Lib_Frame_SRCS CalypPixel.cpp PixelFormats.h PixelFormats.cpp CalypFrame.h CalypFrame.cpp)
LibMemory.h
CalypLib.h SET(Calyp_Lib_Stream_SRCS
CalypDefs.h
# Frame
CalypFrame.h
CalypFrame.cpp
CalypPixel.cpp
PixelFormats.h
PixelFormats.cpp
# Stream
CalypStream.h CalypStream.h
CalypStream.cpp CalypStream.cpp
CalypStreamHandlerIf.h CalypStreamHandlerIf.h
@@ -24,78 +16,76 @@ set(Calyp_Lib_SRCS
StreamHandlerRaw.cpp StreamHandlerRaw.cpp
StreamHandlerPortableMap.h StreamHandlerPortableMap.h
StreamHandlerPortableMap.cpp StreamHandlerPortableMap.cpp
# Options Parser
CalypOptions.h
CalypOptions.cpp
# Modules
CalypModuleIf.h
) )
LIST(APPEND CMAKE_CFG_LINKER_LIBSS ${PROJECT_LIBRARY} ) SET(Calyp_Lib_OptionParser_SRCS CalypOptions.h CalypOptions.cpp)
LIST(APPEND CMAKE_CFG_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR} )
SET(Calyp_Lib_Modules_SRCS CalypOptions.h CalypOptions.cpp)
IF( USE_FFMPEG ) SET(Calyp_Lib_SRCS
LIST( APPEND Calyp_Lib_SRCS StreamHandlerLibav.h ) LibMemory.h
LIST( APPEND Calyp_Lib_SRCS StreamHandlerLibav.cpp ) CalypLib.h
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
CalypDefs.h CalypDefs.h
CalypFrame.h ${Calyp_Lib_Frame_SRCS}
CalypStream.h ${Calyp_Lib_Stream_SRCS}
CalypOptions.h ${Calyp_Lib_OptionParser_SRCS}
CalypModuleIf.h ${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 ) LIST(APPEND CMAKE_CFG_LINKER_LIBSS ${FFMPEG_LIBRARIES})
ADD_LIBRARY( ${PROJECT_LIBRARY} STATIC ${Calyp_Lib_SRCS} ) LIST(APPEND CMAKE_CFG_INCLUDE_DIRS ${FFMPEG_INCLUDE_DIRS})
ELSE()
ADD_LIBRARY( ${PROJECT_LIBRARY} SHARED ${Calyp_Lib_SRCS} )
ENDIF() ENDIF()
IF(USE_OPENCV)
LIST(APPEND Calyp_Lib_SRCS StreamHandlerOpenCV.h)
LIST(APPEND Calyp_Lib_SRCS StreamHandlerOpenCV.cpp)
TARGET_LINK_LIBRARIES( ${PROJECT_LIBRARY} LIST(APPEND Calyp_Lib_SRCS CalypOpenCVModuleIf.cpp)
${FFMPEG_LIBRARIES}
${OpenCV_LIBRARIES}
)
TARGET_INCLUDE_DIRECTORIES(${PROJECT_LIBRARY} LIST(APPEND CMAKE_CFG_LINKER_LIBSS ${OpenCV_LIBRARIES})
PUBLIC LIST(APPEND CMAKE_CFG_INCLUDE_DIRS ${OpenCV_INCLUDE_DIRS})
$<INSTALL_INTERFACE:include> ENDIF()
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
)
SET_TARGET_PROPERTIES( ${PROJECT_LIBRARY} SET(Calyp_Lib_HEADERS CalypDefs.h CalypFrame.h CalypStream.h CalypOptions.h CalypModuleIf.h CalypOpenCVModuleIf.h)
PROPERTIES VERSION ${CALYP_VERSION}
SOVERSION ${CALYP_VERSION_MAJOR}
)
IF( NOT USE_STATIC ) CONFIGURE_FILE(CalypConfig.cmake.in CalypConfig.cmake @ONLY)
INSTALL( TARGETS ${PROJECT_LIBRARY}
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 RUNTIME DESTINATION bin
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
) )
INSTALL(FILES ${Calyp_Lib_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" ) INSTALL(FILES ${Calyp_Lib_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/CalypConfig.cmake DESTINATION share/calyp ) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/CalypConfig.cmake DESTINATION share/calyp)
ENDIF() ENDIF()
IF( BUILD_TESTS ) IF(BUILD_TESTS)
ADD_SUBDIRECTORY( tests ) ADD_SUBDIRECTORY(tests)
ENDIF() 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -27,11 +27,13 @@
#define __CALYPDEFS_H__ #define __CALYPDEFS_H__
#include <algorithm> #include <algorithm>
#include <iterator>
#include <string> #include <string>
#include <vector> #include <vector>
typedef unsigned short ClpPel; ///< 16-bit pixel type typedef unsigned short ClpPel; ///< 16-bit pixel type
typedef unsigned char ClpByte; typedef unsigned char ClpByte;
typedef unsigned long long ClpULong;
typedef std::string ClpString; typedef std::string ClpString;
@@ -100,6 +102,9 @@ enum CLP_Endianness
CLP_LITTLE_ENDIAN = 1, 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 ) inline ClpString clpLowercase( const ClpString& in )
{ {
ClpString out; ClpString out;
+334 -122
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,15 +24,17 @@
#include "CalypFrame.h" #include "CalypFrame.h"
#include <cassert>
#include <cmath>
#include "LibMemory.h" #include "LibMemory.h"
#include "PixelFormats.h" #include "PixelFormats.h"
#include "config.h" #include "config.h"
#include <cassert>
#include <cmath>
#ifdef USE_OPENCV #ifdef USE_OPENCV
#include <opencv2/core/core.hpp> #include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#endif #endif
std::vector<ClpString> CalypFrame::supportedColorSpacesListNames() std::vector<ClpString> CalypFrame::supportedColorSpacesListNames()
@@ -81,6 +83,11 @@ int CalypFrame::findPixelFormat( const ClpString& name )
return -1; return -1;
} }
int CalypFrame::pelformatColorSpace( const int idx )
{
return g_CalypPixFmtDescriptorsMap.at( idx ).colorSpace;
}
struct CalypFramePrivate struct CalypFramePrivate
{ {
public: public:
@@ -95,6 +102,7 @@ public:
int m_iPixelFormat; //!< Pixel format number (it follows the list of supported pixel formats) 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_uiBitsPel; //!< Bits per pixel/channel
unsigned int m_uiHalfPelValue; //!< 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; ClpPel*** m_pppcInputPel;
@@ -111,15 +119,12 @@ public:
/** Numbers of histogram segments depending of image bytes depth*/ /** Numbers of histogram segments depending of image bytes depth*/
unsigned int m_uiHistoSegments; unsigned int m_uiHistoSegments;
/** void init( unsigned int width, unsigned int height, int pel_format, unsigned bitsPixel )
* Common constructor function of a frame {
* init( width, height, pel_format, bitsPixel, false );
* @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, unsigned bitsPixel, bool has_negative_values )
*
*/
void init( unsigned int width, unsigned int height, int pel_format, int bitsPixel )
{ {
m_bInit = false; m_bInit = false;
m_bHasRGBPel = false; m_bHasRGBPel = false;
@@ -130,6 +135,7 @@ public:
m_iPixelFormat = pel_format; m_iPixelFormat = pel_format;
m_uiBitsPel = bitsPixel < 8 ? 8 : bitsPixel; m_uiBitsPel = bitsPixel < 8 ? 8 : bitsPixel;
m_uiHalfPelValue = 1 << ( m_uiBitsPel - 1 ); m_uiHalfPelValue = 1 << ( m_uiBitsPel - 1 );
m_bHasNegativeValues = has_negative_values;
if( m_uiWidth == 0 || m_uiHeight == 0 || m_iPixelFormat == -1 || bitsPixel > 16 ) if( m_uiWidth == 0 || m_uiHeight == 0 || m_iPixelFormat == -1 || bitsPixel > 16 )
{ {
@@ -252,16 +258,22 @@ public:
* \brief Constructors * \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( new CalypFramePrivate )
{ {
d->init( width, height, pelFormat, bitsPixel ); 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 ) CalypFrame::CalypFrame( const CalypFrame& other )
: d( new CalypFramePrivate ) : 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 ); copyFrom( &other );
} }
@@ -270,7 +282,7 @@ CalypFrame::CalypFrame( const CalypFrame* other )
{ {
if( 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 ); copyFrom( other );
} }
} }
@@ -346,6 +358,8 @@ bool CalypFrame::haveSameFmt( const CalypFrame& other, unsigned int match ) cons
bRet &= ( getBitsPel() == other.getBitsPel() ); bRet &= ( getBitsPel() == other.getBitsPel() );
if( match & MATCH_COLOR_SPACE_IGNORE_GRAY ) if( match & MATCH_COLOR_SPACE_IGNORE_GRAY )
bRet &= ( getColorSpace() == CLP_COLOR_GRAY || getColorSpace() == other.getColorSpace() ); bRet &= ( getColorSpace() == CLP_COLOR_GRAY || getColorSpace() == other.getColorSpace() );
if( match & MATCH_BYTES_PER_FRAME )
bRet &= ( getBytesPerFrame() == other.getBytesPerFrame() );
return bRet; return bRet;
} }
@@ -379,31 +393,46 @@ unsigned int CalypFrame::getNumberChannels() const
return d->m_pcPelFormat->numberChannels; 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 ); 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 ); 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; return d->m_pcPelFormat->log2ChromaWidth;
} }
unsigned char CalypFrame::getChromaHeightRatio() const unsigned CalypFrame::getChromaHeightRatio() const
{ {
return d->m_pcPelFormat->log2ChromaHeight; return d->m_pcPelFormat->log2ChromaHeight;
} }
unsigned int CalypFrame::getChromaLength() const ClpULong CalypFrame::getChromaLength() const
{ {
return getWidth( 1 ) * getHeight( 1 ); return getWidth( 1 ) * getHeight( 1 );
} }
@@ -413,19 +442,19 @@ unsigned int CalypFrame::getBitsPel() const
return d->m_uiBitsPel; 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 ); 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 ) ); const CalypPixelFormatDescriptor* pcPelFormat = &( g_CalypPixFmtDescriptorsMap.at( iPixelFormat ) );
unsigned int bytesPerPixel = ( bitsPixel - 1 ) / 8 + 1; unsigned int bytesPerPixel = ( bitsPixel - 1 ) / 8 + 1;
unsigned long long int numberBytes = uiWidth * uiHeight; ClpULong numberBytes = uiWidth * uiHeight;
if( pcPelFormat->numberChannels > 1 ) if( pcPelFormat->numberChannels > 1 )
{ {
unsigned long long int numberBytesChroma = ClpULong numberBytesChroma =
CHROMASHIFT( uiWidth, pcPelFormat->log2ChromaWidth ) * CHROMASHIFT( uiHeight, pcPelFormat->log2ChromaHeight ); CHROMASHIFT( uiWidth, pcPelFormat->log2ChromaWidth ) * CHROMASHIFT( uiHeight, pcPelFormat->log2ChromaHeight );
numberBytes += ( pcPelFormat->numberChannels - 1 ) * numberBytesChroma; numberBytes += ( pcPelFormat->numberChannels - 1 ) * numberBytesChroma;
} }
@@ -471,19 +500,24 @@ unsigned char* CalypFrame::getRGBBuffer() const
return NULL; 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 ) 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 ); 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 ); CalypPixel PixelValue( d->m_pcPelFormat->colorSpace );
for( unsigned int ch = 0; ch < d->m_pcPelFormat->numberChannels; ch++ ) 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 ) void CalypFrame::copyFrom( const CalypFrame& other )
{ {
if( haveSameFmt( other, MATCH_ALL ) ) if( !haveSameFmt( other, MATCH_COLOR_SPACE | MATCH_BYTES_PER_FRAME | MATCH_BITS ) )
return; return;
d->m_bHasRGBPel = false; d->m_bHasRGBPel = false;
d->m_bHasHistogram = 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 ) void CalypFrame::copyFrom( const CalypFrame* other )
@@ -527,10 +561,11 @@ void CalypFrame::copyFrom( const CalypFrame* other )
copyFrom( *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; return;
// TODO: Protect width and height
ClpPel*** pInput = other.getPelBufferYUV(); ClpPel*** pInput = other.getPelBufferYUV();
for( unsigned int ch = 0; ch < d->m_pcPelFormat->numberChannels; ch++ ) 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; int ratioW = ch > 0 ? d->m_pcPelFormat->log2ChromaHeight : 0;
for( unsigned int i = 0; i < CHROMASHIFT( d->m_uiHeight, ratioH ); i++ ) 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 ) ); ( d->m_uiWidth >> ratioW ) * sizeof( ClpPel ) );
} }
} }
@@ -546,12 +581,39 @@ void CalypFrame::copyFrom( const CalypFrame& other, unsigned int xPos, unsigned
d->m_bHasHistogram = false; 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 ) if( other )
copyFrom( *other, x, y ); 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 ) void CalypFrame::frameFromBuffer( ClpByte* Buff, int iEndianness, unsigned long uiBuffSize )
{ {
if( uiBuffSize != getBytesPerFrame() ) if( uiBuffSize != getBytesPerFrame() )
@@ -574,7 +636,7 @@ void CalypFrame::frameFromBuffer( ClpByte* Buff, int iEndianness )
int b; int b;
int maxval = pow( 2, d->m_uiBitsPel ) - 1; int maxval = pow( 2, d->m_uiBitsPel ) - 1;
if( iEndianness == 0 ) if( iEndianness == CLP_BIG_ENDIAN )
{ {
startByte = bytesPixel - 1; startByte = bytesPixel - 1;
endByte = -1; endByte = -1;
@@ -593,10 +655,10 @@ void CalypFrame::frameFromBuffer( ClpByte* Buff, int iEndianness )
{ {
ratioW = ch > 0 ? d->m_pcPelFormat->log2ChromaWidth : 0; ratioW = ch > 0 ? d->m_pcPelFormat->log2ChromaWidth : 0;
ratioH = ch > 0 ? d->m_pcPelFormat->log2ChromaHeight : 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]; 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++ ) 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 incByte = 1;
int b; int b;
if( iEndianness == 0 ) if( iEndianness == CLP_BIG_ENDIAN )
{ {
startByte = bytesPixel - 1; startByte = bytesPixel - 1;
endByte = -1; endByte = -1;
@@ -651,10 +713,10 @@ void CalypFrame::frameToBuffer( ClpByte* output_buffer, int iEndianness )
{ {
ratioW = ch > 0 ? d->m_pcPelFormat->log2ChromaWidth : 0; ratioW = ch > 0 ? d->m_pcPelFormat->log2ChromaWidth : 0;
ratioH = ch > 0 ? d->m_pcPelFormat->log2ChromaHeight : 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]; 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++ ) 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() void CalypFrame::fillRGBBuffer()
{ {
#define PEL_ARGB( a, r, g, b ) ( ( a & 0xff ) << 24 ) | ( ( r & 0xff ) << 16 ) | ( ( g & 0xff ) << 8 ) | ( b & 0xff ) #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 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 ) \ #define YUV2RGB( iY, iU, iV, iR, iG, iB ) \
iR = iY + ( ( 1436 * ( iV - 128 ) ) >> 10 ); \ iR = iY + ( ( 1436 * ( iV - 128 ) ) >> 10 ); \
iG = iY - ( ( 352 * ( iU - 128 ) + 731 * ( iV - 128 ) ) >> 10 ); \ iG = iY - ( ( 352 * ( iU - 128 ) + 731 * ( iV - 128 ) ) >> 10 ); \
@@ -809,7 +871,7 @@ int CalypFrame::getNumHistogramSegment()
return d->m_uiHistoSegments; return d->m_uiHistoSegments;
} }
unsigned int CalypFrame::getMinimumPelValue( int channel ) unsigned int CalypFrame::getMinimumPelValue( unsigned channel )
{ {
if( !d->m_bHasHistogram ) if( !d->m_bHasHistogram )
return 0; return 0;
@@ -841,7 +903,7 @@ unsigned int CalypFrame::getMinimumPelValue( int channel )
return 0; return 0;
} }
unsigned int CalypFrame::getMaximumPelValue( int channel ) unsigned int CalypFrame::getMaximumPelValue( unsigned channel )
{ {
if( !d->m_bHasHistogram ) if( !d->m_bHasHistogram )
return 0; return 0;
@@ -867,13 +929,46 @@ unsigned int CalypFrame::getMaximumPelValue( int channel )
{ {
if( d->m_puiHistogram[i] > 0 ) if( d->m_puiHistogram[i] > 0 )
{ {
return i - indexEnd + 1; return i - indexEnd - 1;
} }
} }
return 0; 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 ) if( !d->m_bHasHistogram )
return 0; return 0;
@@ -906,7 +1001,7 @@ unsigned int CalypFrame::getMaximum( int channel )
return maxValue; 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 ) 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; 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 ) 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; 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 ) 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; 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 ) 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 /*------------ original
for ( i = start ; i <= end ; i++ ) for ( i = start ; i <= end ; i++ )
{ {
dev += ( i - mean ) * ( i - mean ) * d->m_puiHistogram[indexStart +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++ ) 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 ) ); 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 ) if( !d->m_bHasHistogram || bin < 0 || bin > d->m_uiHistoSegments - 1 )
return 0.0; return 0.0;
@@ -1038,13 +1133,39 @@ double CalypFrame::getHistogramValue( int channel, unsigned int bin )
return d->m_puiHistogram[indexStart + 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 * 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; bool bRet = false;
#ifdef USE_OPENCV #ifdef USE_OPENCV
@@ -1053,46 +1174,78 @@ bool CalypFrame::toMat( cv::Mat& cvMat, bool convertToGray )
{ {
return bRet; return bRet;
} }
int cvType = CV_MAKETYPE( CV_8U, convertToGray ? 1 : d->m_pcPelFormat->numberChannels ); unsigned int cvPrecision = getBitsPel() > 8 ? CV_16U : CV_8U;
cvMat.create( d->m_uiHeight, d->m_uiWidth, cvType ); unsigned numBytes = getBitsPel() > 8 ? 2 : 1;
unsigned char* pCvPel = cvMat.data; unsigned numChannels = getNumberChannels();
if( !convertToGray && ( d->m_pcPelFormat->colorSpace == CLP_COLOR_YUV || unsigned scaleFactor = 1 << ( numBytes * 8 - getBitsPel() );
d->m_pcPelFormat->colorSpace == CLP_COLOR_RGB ) ) if( !scale )
scaleFactor = 1;
if( convertToGray )
{ {
fillRGBBuffer(); channel = channel >= numChannels ? 0 : channel;
unsigned char* pARGB = d->m_pcARGB32; numChannels = 1;
for( unsigned int i = 0; i < d->m_uiWidth * d->m_uiHeight; i++ )
{
*pCvPel++ = *pARGB++;
*pCvPel++ = *pARGB++;
*pCvPel++ = *pARGB++;
pARGB++;
}
bRet = true;
} }
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]; cv::Mat tmpMat( imgHeight, imgWidth, CV_MAKETYPE( cvPrecision, numChannels ) );
for( unsigned int i = 0; i < d->m_uiWidth * d->m_uiHeight; i++ )
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 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 #endif
return bRet; return bRet;
} }
bool CalypFrame::fromMat( cv::Mat& cvMat ) bool CalypFrame::fromMat( cv::Mat& cvMat, int channel )
{ {
bool bRet = false; bool bRet = false;
#ifdef USE_OPENCV #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 ) if( !d->m_bInit )
{ {
uchar depth = cvMat.type() & CV_MAT_DEPTH_MASK;
if( d->m_iPixelFormat == CLP_INVALID_FMT ) if( d->m_iPixelFormat == CLP_INVALID_FMT )
{ {
switch( cvMat.channels() ) switch( cvMat.channels() )
@@ -1107,35 +1260,69 @@ bool CalypFrame::fromMat( cv::Mat& cvMat )
return false; 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_bHasRGBPel = false;
d->m_bHasHistogram = false; d->m_bHasHistogram = false;
unsigned char* pCvPel = cvMat.data; if( channel >= 0 )
if( d->m_iPixelFormat != CLP_GRAY ) numChannels = 1;
else
channel = 0;
if( cvMat.channels() != int( numChannels ) )
{ {
ClpPel* pInputPelR = d->m_pppcInputPel[CLP_COLOR_R][0]; return false;
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++ ) unsigned imgWidth = getWidth( channel );
unsigned imgHeight = getHeight( channel );
if( numChannels > 1 )
{
cv::Mat tmpMat( imgHeight, imgWidth, CV_MAKETYPE( cvPrecision, numChannels ) );
switch( getColorSpace() )
{ {
*pInputPelB++ = *pCvPel++; case CLP_COLOR_YUV:
*pInputPelG++ = *pCvPel++; cv::cvtColor( tmpMat, cvMat, cv::COLOR_RGB2YCrCb );
*pInputPelR++ = *pCvPel++; 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 else
{ {
ClpPel* pPel = d->m_pppcInputPel[CLP_LUMA][0]; unsigned char* cv_data = cvMat.data;
for( unsigned int i = 0; i < d->m_uiWidth * d->m_uiHeight; i++ ) 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 #endif
return bRet; return bRet;
} }
@@ -1152,6 +1339,17 @@ std::vector<ClpString> CalypFrame::supportedQualityMetricsList()
"PSNR", "PSNR",
"MSE", "MSE",
"SSIM", "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: case SSIM_METRIC:
return getSSIM( Org, component ); return getSSIM( Org, component );
break; break;
case WSPSNR_METRIC:
return getWSPNR( Org, component );
break;
default: default:
assert( 0 ); assert( 0 );
}; };
@@ -1182,43 +1383,27 @@ double CalypFrame::getMSE( CalypFrame* Org, unsigned int component )
{ {
ClpPel* pPelYUV = getPelBufferYUV()[component][0]; ClpPel* pPelYUV = getPelBufferYUV()[component][0];
ClpPel* pOrgPelYUV = Org->getPelBufferYUV()[component][0]; ClpPel* pOrgPelYUV = Org->getPelBufferYUV()[component][0];
ClpULong numberOfPixels = Org->getHeight( component ) * Org->getWidth( component );
int aux_pel_1, aux_pel_2; ClpULong ssd = 0;
int diff = 0;
double ssd = 0;
unsigned int numberOfPixels = 0;
if( component == CLP_LUMA )
{
numberOfPixels = Org->getHeight() * Org->getWidth();
}
else
{
numberOfPixels = getChromaLength();
}
for( unsigned int i = 0; i < numberOfPixels; i++ ) for( unsigned int i = 0; i < numberOfPixels; i++ )
{ {
aux_pel_1 = *pPelYUV++; int diff = int( *pPelYUV++ ) - int( *pOrgPelYUV++ );
aux_pel_2 = *pOrgPelYUV++; ssd += diff * diff;
diff = aux_pel_1 - aux_pel_2;
ssd += (double)( diff * diff );
} }
if( ssd == 0.0 ) if( ssd == 0.0 )
{ {
return 0.0; return 0.0;
} }
return ssd / double( numberOfPixels ); return double( ssd ) / double( numberOfPixels );
} }
double CalypFrame::getPSNR( CalypFrame* Org, unsigned int component ) double CalypFrame::getPSNR( CalypFrame* Org, unsigned int component )
{ {
unsigned int uiMaxValue = ( 1 << Org->getBitsPel() ) - 1; ClpULong uiMaxValue = ( 1 << Org->getBitsPel() ) - 1;
double uiMaxValueSquare = uiMaxValue * uiMaxValue;
double dPSNR = 100; double dPSNR = 100;
double dMSE = getMSE( Org, component ); double dMSE = getMSE( Org, component );
if( dMSE != 0 ) if( dMSE != 0 )
dPSNR = 10 * log10( uiMaxValueSquare / dMSE ); dPSNR = 10 * log10( double( uiMaxValue * uiMaxValue ) / dMSE );
return dPSNR; return dPSNR;
} }
@@ -1304,3 +1489,30 @@ double CalypFrame::getSSIM( CalypFrame* Org, unsigned int component )
} }
return dSSIM; 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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 std::vector<ClpString> supportedPixelFormatListNames( int colorSpace );
static int numberOfFormats(); static int numberOfFormats();
static int findPixelFormat( const ClpString& name ); static int findPixelFormat( const ClpString& name );
static int pelformatColorSpace( const int idx );
/** /**
* Creates a new frame using the following configuration * 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 * @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 * Copy contructor
@@ -145,6 +157,7 @@ public:
MATCH_PEL_FMT = 4, MATCH_PEL_FMT = 4,
MATCH_BITS = 8, MATCH_BITS = 8,
MATCH_COLOR_SPACE_IGNORE_GRAY = 16, MATCH_COLOR_SPACE_IGNORE_GRAY = 16,
MATCH_BYTES_PER_FRAME = 32,
MATCH_ALL = 0xFFFF, MATCH_ALL = 0xFFFF,
}; };
@@ -179,46 +192,58 @@ public:
* Get the number of channels * Get the number of channels
* @return number of channels * @return number of channels
*/ */
unsigned int getNumberChannels() const; unsigned getNumberChannels() const;
/** /**
* Get width of the frame * Get width of the frame
* @param channel/component * @param channel/component
* @return number of pixels * @return number of pixels
*/ */
unsigned int getWidth( int channel = 0 ) const; unsigned int getWidth( unsigned channel = 0 ) const;
/** /**
* Get height of the frame * Get height of the frame
* @param channel/component * @param channel/component
* @return number of pixels * @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 * Get number of pixels of the frame
* @param channel/component * @param channel/component
* @return number of pixels * @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 * Get chroma width ratio
* @return ratio multiple of 2 * @return ratio multiple of 2
*/ */
unsigned char getChromaWidthRatio() const; unsigned getChromaWidthRatio() const;
/** /**
* Get chroma height ratio * Get chroma height ratio
* @return ratio multiple of 2 * @return ratio multiple of 2
*/ */
unsigned char getChromaHeightRatio() const; unsigned getChromaHeightRatio() const;
/** /**
* Get number of pixels in each chroma channel * Get number of pixels in each chroma channel
* @return number of pixels * @return number of pixels
*/ */
unsigned int getChromaLength() const; ClpULong getChromaLength() const;
/** /**
* Get number of bits per pixel * Get number of bits per pixel
@@ -230,13 +255,13 @@ public:
* Get number of bytes per frame of an existing frame * Get number of bytes per frame of an existing frame
* @return number of bytes per frame * @return number of bytes per frame
*/ */
unsigned long getBytesPerFrame(); ClpULong getBytesPerFrame() const;
/** /**
* Get number of bytes per frame of a specific pixel format * Get number of bytes per frame of a specific pixel format
* @return number of bytes per frame * @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 * Reset frame pixels to zero
@@ -249,13 +274,14 @@ public:
unsigned char* getRGBBuffer() const; unsigned char* getRGBBuffer() const;
/** /**
* Get pixel value at coordinates * Get pixel value at coordinates
* @param ch frame channel * @param ch frame channel
* @param xPos position in X axis * @param xPos position in X axis
* @param yPos position in Y axis * @param yPos position in Y axis
* @param absolute whether it should return positive/negative values
* @return pixel value * @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 * Get pixel value at coordinates
@@ -263,7 +289,7 @@ public:
* @param yPos position in Y axis * @param yPos position in Y axis
* @return pixel value * @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 * Get pixel value at coordinates
@@ -271,7 +297,7 @@ public:
* @param yPos position in Y axis * @param yPos position in Y axis
* @return pixel value * @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 * Get pixel value at coordinates
@@ -290,10 +316,32 @@ public:
*/ */
void setPixel( unsigned int xPos, unsigned int yPos, CalypPixel pixel ); void setPixel( unsigned int xPos, unsigned int yPos, CalypPixel pixel );
void copyFrom( const CalypFrame& ); /**
void copyFrom( const CalypFrame* ); * Copy a frame into the current buffer
void copyFrom( const CalypFrame&, unsigned int, unsigned int ); * @param other frame to be copied
void copyFrom( const CalypFrame*, unsigned int, unsigned int ); */
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, unsigned long );
void frameFromBuffer( ClpByte*, int ); void frameFromBuffer( ClpByte*, int );
@@ -322,22 +370,24 @@ public:
}; };
void calcHistogram(); void calcHistogram();
unsigned int getMinimumPelValue( int channel ); unsigned int getMinimumPelValue( unsigned channel );
unsigned int getMaximumPelValue( int channel ); unsigned int getMaximumPelValue( unsigned channel );
unsigned int getMaximum( int channel ); unsigned int getMaximum( unsigned channel );
unsigned int getNumPixelsRange( int channel, unsigned int start, unsigned int end ); unsigned int getNumPixelsRange( unsigned channel, unsigned int start, unsigned int end );
double getMean( int channel, unsigned int start, unsigned int end ); double getMean( unsigned channel, unsigned int start, unsigned int end );
int getMedian( int channel, unsigned int start, unsigned int end ); int getMedian( unsigned channel, unsigned int start, unsigned int end );
double getStdDev( int channel, unsigned int start, unsigned int end ); double getStdDev( unsigned channel, unsigned int start, unsigned int end );
double getHistogramValue( int channel, unsigned int bin ); double getHistogramValue( unsigned channel, unsigned int bin );
unsigned int getNEBins( unsigned channel );
int getNumHistogramSegment(); int getNumHistogramSegment();
double getEntropy( unsigned channel, unsigned int start, unsigned int end );
/** /**
* interface with OpenCV lib * interface with OpenCV lib
*/ */
bool toMat( cv::Mat& cvMat, bool convertToGray = false ); bool toMat( cv::Mat& cvMat, bool convertToGray = false, bool scale = true, unsigned channel = 0 );
bool fromMat( cv::Mat& cvMat ); bool fromMat( cv::Mat& cvMat, int iChannel = -1 );
/** /**
* \ingroup CalypFrameGrp * \ingroup CalypFrameGrp
@@ -353,15 +403,17 @@ public:
PSNR_METRIC = 0, PSNR_METRIC = 0,
MSE_METRIC, MSE_METRIC,
SSIM_METRIC, SSIM_METRIC,
WSPSNR_METRIC,
NUMBER_METRICS, NUMBER_METRICS,
}; };
static std::vector<ClpString> supportedQualityMetricsList(); static std::vector<ClpString> supportedQualityMetricsList();
static std::vector<ClpString> supportedQualityMetricsUnitsList();
double getQuality( int Metric, CalypFrame* Org, unsigned int component ); double getQuality( int Metric, CalypFrame* Org, unsigned int component );
double getMSE( CalypFrame* Org, unsigned int component ); double getMSE( CalypFrame* Org, unsigned int component );
double getPSNR( CalypFrame* Org, unsigned int component ); double getPSNR( CalypFrame* Org, unsigned int component );
double getSSIM( CalypFrame* Org, unsigned int component ); double getSSIM( CalypFrame* Org, unsigned int component );
double getWSPNR( CalypFrame* Org, unsigned int component );
/** @} */ /** @} */
private: private:
+1 -1
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -50,6 +50,11 @@ public: \
if( !apcFrameList[i] ) \ if( !apcFrameList[i] ) \
return false; return false;
#define _BASIC_MODULE_API_3_BREAK_CONDITION_ \
if( m_iFrameBufferCount == 0 ) \
if( apcFrameList.size() <= 0 ) \
return NULL;
/** Module_API_Version Enum /** Module_API_Version Enum
* \ingroup Calyp_Modules * \ingroup Calyp_Modules
* Version of the modules API required * Version of the modules API required
@@ -59,6 +64,7 @@ enum Module_API_Version
{ {
CLP_MODULE_API_1, CLP_MODULE_API_1,
CLP_MODULE_API_2, CLP_MODULE_API_2,
CLP_MODULE_API_3,
}; };
/** Module_Type Enum /** Module_Type Enum
@@ -118,6 +124,9 @@ public:
//! Features/Requirements //! Features/Requirements
unsigned int m_uiModuleRequirements; unsigned int m_uiModuleRequirements;
unsigned int m_iFrameBufferCount;
CalypFrame* m_pcOutputFrame;
CalypOptions m_cModuleOptions; CalypOptions m_cModuleOptions;
CalypModuleIf() CalypModuleIf()
@@ -125,6 +134,8 @@ public:
m_iModuleAPI = CLP_MODULE_API_1; m_iModuleAPI = CLP_MODULE_API_1;
m_uiModuleRequirements = CLP_MODULE_REQUIRES_NOTHING; m_uiModuleRequirements = CLP_MODULE_REQUIRES_NOTHING;
m_pchModuleLongName = NULL; m_pchModuleLongName = NULL;
m_pcOutputFrame = NULL;
m_iFrameBufferCount = 0;
} }
virtual ~CalypModuleIf() {} virtual ~CalypModuleIf() {}
virtual void Delete() = 0; virtual void Delete() = 0;
@@ -149,6 +160,16 @@ public:
virtual double measure( std::vector<CalypFrame*> ) { return 0; } virtual double measure( std::vector<CalypFrame*> ) { return 0; }
virtual bool keyPressed( enum Module_Key_Supported ) { return false; } virtual bool keyPressed( enum Module_Key_Supported ) { return false; }
virtual ClpString moduleInfo() { return ClpString(); } 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__ #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 "CalypOptions.h"
#include "config.h"
#include "lib/CalypModuleIf.h"
#include <cstring> #include <cstring>
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
#include "config.h"
#include "lib/CalypModuleIf.h"
using namespace std; using namespace std;
struct ParseFailure : public std::exception struct ParseFailure : public std::exception
@@ -62,7 +62,7 @@ class boolOption : public OptionBase
{ {
public: public:
boolOption( const ClpString& name, const ClpString& desc ) 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++; } void parse( const ClpString& arg ) { arg_count++; }
}; };
@@ -71,8 +71,8 @@ template <typename T>
class StandardOption : public OptionBase class StandardOption : public OptionBase
{ {
public: public:
StandardOption( const ClpString& name, T& storage, const ClpString& desc ) StandardOption( const ClpString& name, T& storage, const ClpString& desc, const ClpString& def )
: OptionBase( name, desc ), opt_storage( storage ) : OptionBase( name, desc, def ), opt_storage( storage )
{ {
is_binary = false; is_binary = false;
} }
@@ -160,8 +160,8 @@ struct FunctionOption : public OptionBase
public: public:
typedef void( Func )( CalypOptions&, const ClpString& ); typedef void( Func )( CalypOptions&, const ClpString& );
FunctionOption( const ClpString& name, CalypOptions& parent_, Func* func_, const ClpString& desc ) FunctionOption( const ClpString& name, CalypOptions& parent_, Func* func_, const ClpString& desc, const ClpString& def )
: OptionBase( name, desc ), parent( parent_ ), func( func_ ) : OptionBase( name, desc, def ), parent( parent_ ), func( func_ )
{ {
is_binary = false; is_binary = false;
} }
@@ -198,6 +198,13 @@ CalypOptions& CalypOptions::operator()( const ClpString& name, const ClpString&
*/ */
template <typename T> template <typename T>
CalypOptions& CalypOptions::operator()( const ClpString& name, T& storage, const ClpString& desc ) 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 ) ); addOption( new StandardOption<T>( name, storage, desc ) );
return *this; return *this;
@@ -277,7 +284,7 @@ bool CalypOptions::hasOpt( const ClpString& optName )
void CalypOptions::addDefaultOptions() void CalypOptions::addDefaultOptions()
{ {
addOptions() /**/ addOptions() /**/
( "help,h", "produce help message" ) /**/ ( "help", "produce help message" ) /**/
( "version", "show version and exit" ) /**/ ( "version", "show version and exit" ) /**/
( "pel_fmts", "list pixel formats" ) /**/ ( "pel_fmts", "list pixel formats" ) /**/
( "quality_metrics", "list supported quality metrics" ) /**/ ( "quality_metrics", "list supported quality metrics" ) /**/
@@ -470,27 +477,26 @@ unsigned int CalypOptions::parseSHORT( unsigned int argc, char* argv[] )
return 1; return 1;
} }
bool CalypOptions::parse( unsigned int argc, char* argv[] ) int CalypOptions::parse( unsigned int argc, char* argv[] )
{ {
try try
{ {
m_aUnhandledArgs = scanArgv( argc, argv ); m_aUnhandledArgs = scanArgv( argc, argv );
if( checkListingOpts() ) if( checkListingOpts() )
{ {
return false; return 1;
} }
} }
catch( std::exception& e ) catch( std::exception& e )
{ {
std::cerr << "error: " << e.what() << "\n"; std::cerr << "error: " << e.what() << "\n";
return false; return -1;
} }
catch( ... ) catch( ... )
{ {
std::cerr << "Exception of unknown type!\n"; std::cerr << "Exception of unknown type!\n";
} }
return true; return 0;
} }
list<const char*> CalypOptions::scanArgv( unsigned int argc, char* argv[] ) list<const char*> CalypOptions::scanArgv( unsigned int argc, char* argv[] )
+10 -6
View File
@@ -40,11 +40,11 @@
#ifndef __CALYPOPTIONS_H__ #ifndef __CALYPOPTIONS_H__
#define __CALYPOPTIONS_H__ #define __CALYPOPTIONS_H__
#include "CalypDefs.h"
#include <list> #include <list>
#include <map> #include <map>
#include "CalypDefs.h"
/** /**
* \class OptionBase * \class OptionBase
* \ingroup CalypLibGrp * \ingroup CalypLibGrp
@@ -55,8 +55,8 @@
class OptionBase class OptionBase
{ {
public: public:
OptionBase( const ClpString& name, const ClpString& desc ) OptionBase( const ClpString& name, const ClpString& desc, const ClpString& def )
: arg_count( 0 ), opt_string( name ), opt_desc( desc ) {} : arg_count( 0 ), opt_string( name ), opt_desc( desc ), opt_defaults( def ) {}
virtual ~OptionBase() {} virtual ~OptionBase() {}
/* parse argument arg, to obtain a value for the option */ /* parse argument arg, to obtain a value for the option */
virtual void parse( const ClpString& arg ) = 0; virtual void parse( const ClpString& arg ) = 0;
@@ -65,6 +65,7 @@ public:
int arg_count; int arg_count;
ClpString opt_string; ClpString opt_string;
ClpString opt_desc; ClpString opt_desc;
ClpString opt_defaults;
bool is_binary; bool is_binary;
}; };
@@ -89,7 +90,7 @@ public:
CalypOptions( const ClpString& name = "" ); CalypOptions( const ClpString& name = "" );
~CalypOptions(); ~CalypOptions();
bool parse( unsigned int argc, char* argv[] ); int parse( unsigned int argc, char* argv[] );
void parse( std::vector<ClpString> args_array ); void parse( std::vector<ClpString> args_array );
std::list<const char*>& getUnhandledArgs() { return m_aUnhandledArgs; } std::list<const char*>& getUnhandledArgs() { return m_aUnhandledArgs; }
@@ -117,11 +118,14 @@ public:
* Add option described by name to the parent Options list, * Add option described by name to the parent Options list,
* with storage for the option's value * with storage for the option's value
* with default_val as the default 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> template <typename T>
CalypOptions& operator()( const ClpString& name, T& storage, const ClpString& desc ); 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(); bool checkListingOpts();
private: private:
+7 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -23,7 +23,6 @@
*/ */
#include "CalypFrame.h" #include "CalypFrame.h"
#include "PixelFormats.h" #include "PixelFormats.h"
#include "config.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 ); iR = iY + ( ( 1436 * ( iV - 128 ) ) >> 10 );
iG = iY - ( ( 352 * ( iU - 128 ) + 731 * ( iV - 128 ) ) >> 10 ); iG = iY - ( ( 352 * ( iU - 128 ) + 731 * ( iV - 128 ) ) >> 10 );
iB = iY + ( ( 1812 * ( iU - 128 ) ) >> 10 ); iB = iY + ( ( 1812 * ( iU - 128 ) ) >> 10 );
iR = iR < 0 ? 0 : iR > 255 ? 255 : iR; iR = iR < 0 ? 0 : iR > 255 ? 255 :
iG = iG < 0 ? 0 : iG > 255 ? 255 : iG; iR;
iB = iB < 0 ? 0 : iB > 255 ? 255 : iB; 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 ) 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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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; std::vector<CalypStandardResolution> stdResList;
CalypStandardResolution stdResElement; CalypStandardResolution stdResElement;
REGIST_CALYP_STANDARD_RESOLUTION( "QCIF", 176, 144 );
REGIST_CALYP_STANDARD_RESOLUTION( "CIF", 352, 288 ); REGIST_CALYP_STANDARD_RESOLUTION( "CIF", 352, 288 );
REGIST_CALYP_STANDARD_RESOLUTION( "VGA", 640, 480 ); REGIST_CALYP_STANDARD_RESOLUTION( "VGA", 640, 480 );
REGIST_CALYP_STANDARD_RESOLUTION( "WVGA", 832, 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( "FullHD", 1920, 1080 );
REGIST_CALYP_STANDARD_RESOLUTION( "WQXGA", 2560, 1600 ); REGIST_CALYP_STANDARD_RESOLUTION( "WQXGA", 2560, 1600 );
REGIST_CALYP_STANDARD_RESOLUTION( "UltraHD", 3840, 2160 ); 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; return stdResList;
} }
@@ -100,11 +103,11 @@ private:
unsigned int m_uiIndex; unsigned int m_uiIndex;
public: 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++ ) 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_apcFrameBuffer.push_back( pFrame );
} }
m_uiIndex = 0; m_uiIndex = 0;
@@ -226,16 +229,16 @@ CalypStream::~CalypStream()
close(); close();
} }
ClpString CalypStream::getFormatName() ClpString CalypStream::getFormatName() const
{ {
return !d->handler ? "" : d->handler->getFormatName(); return !d->handler ? "" : d->handler->getFormatName();
} }
ClpString CalypStream::getCodecName() ClpString CalypStream::getCodecName() const
{ {
return !d->handler ? "" : d->handler->getCodecName(); 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 frame_rate, bool bInput )
{ {
unsigned int width = 0; unsigned int width = 0;
@@ -258,11 +261,17 @@ bool CalypStream::open( ClpString filename, ClpString resolution, ClpString inpu
break; 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, 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 ) 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 ) if( d->isInit )
{ {
@@ -311,7 +320,7 @@ bool CalypStream::open( ClpString filename, unsigned int width, unsigned int hei
try try
{ {
d->frameBuffer = new CalypStreamBufferPrivate( d->isInput ? 3 : 1, d->handler->m_uiWidth, d->handler->m_uiHeight, 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 ) catch( CalypFailure& e )
{ {
@@ -389,17 +398,17 @@ void CalypStream::close()
d->isInit = false; d->isInit = false;
} }
ClpString CalypStream::getFileName() ClpString CalypStream::getFileName() const
{ {
return d->cFilename; return d->cFilename;
} }
bool CalypStream::isNative() bool CalypStream::isNative() const
{ {
return d->handler->m_bNative; return d->handler->m_bNative;
} }
unsigned int CalypStream::getFrameNum() ClpULong CalypStream::getFrameNum() const
{ {
return d->handler->m_uiTotalNumberFrames; return d->handler->m_uiTotalNumberFrames;
} }
@@ -411,22 +420,26 @@ unsigned int CalypStream::getHeight() const
{ {
return d->handler->m_uiHeight; return d->handler->m_uiHeight;
} }
unsigned int CalypStream::getBitsPerPixel() const
{
return d->handler->m_uiBitsPerPixel;
}
int CalypStream::getEndianess() const int CalypStream::getEndianess() const
{ {
return d->handler->m_iEndianness; return d->handler->m_iEndianness;
} }
double CalypStream::getFrameRate() double CalypStream::getFrameRate() const
{ {
return d->handler->m_dFrameRate; return d->handler->m_dFrameRate;
} }
int CalypStream::getCurrFrameNum() long CalypStream::getCurrFrameNum() const
{ {
return d->iCurrFrameNum; return d->iCurrFrameNum;
} }
void CalypStream::getFormat( unsigned int& rWidth, unsigned int& rHeight, int& rInputFormat, unsigned int& rBitsPerPel, int& rEndianness, 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 ) if( d->isInit )
{ {
@@ -472,7 +485,7 @@ void CalypStream::loadAll()
d->iCurrFrameNum = 0; d->iCurrFrameNum = 0;
} }
void CalypStream::getDuration( int* duration_array ) void CalypStream::getDuration( int* duration_array ) const
{ {
// int hours, mins, secs = 0; // int hours, mins, secs = 0;
// #ifdef USE_FFMPEG // #ifdef USE_FFMPEG
@@ -571,7 +584,7 @@ void CalypStream::readNextFrameFillRGBBuffer()
return; return;
} }
CalypFrame* CalypStream::getCurrFrame( CalypFrame* pyuv_image ) CalypFrame* CalypStream::getCurrFrame( CalypFrame* pyuv_image ) const
{ {
if( pyuv_image == NULL ) if( pyuv_image == NULL )
pyuv_image = new CalypFrame( d->frameBuffer->current() ); pyuv_image = new CalypFrame( d->frameBuffer->current() );
@@ -580,7 +593,7 @@ CalypFrame* CalypStream::getCurrFrame( CalypFrame* pyuv_image )
return pyuv_image; return pyuv_image;
} }
CalypFrame* CalypStream::getCurrFrame() CalypFrame* CalypStream::getCurrFrame() const
{ {
return d->frameBuffer->current(); return d->frameBuffer->current();
} }
+19 -13
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -67,26 +67,32 @@ public:
CalypStream(); CalypStream();
~CalypStream(); ~CalypStream();
ClpString getFormatName(); ClpString getFormatName() const;
ClpString getCodecName(); ;
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 bInput );
bool open( ClpString filename, unsigned int width, unsigned int height, int input_format, unsigned int bitsPel, int endianness, unsigned int frame_rate, 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 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(); bool reload();
void close(); void close();
bool isNative(); bool isNative() const;
ClpString getFileName(); ClpString getFileName() const;
unsigned int getFrameNum(); ClpULong getFrameNum() const;
unsigned int getWidth() const; unsigned int getWidth() const;
unsigned int getHeight() const; unsigned int getHeight() const;
unsigned int getBitsPerPixel() const;
int getEndianess() const; int getEndianess() const;
int getCurrFrameNum(); long getCurrFrameNum() const;
double getFrameRate(); double getFrameRate() const;
void getFormat( unsigned int& rWidth, unsigned int& rHeight, int& rInputFormat, unsigned int& rBitsPerPel, int& rEndianness, void getFormat( unsigned int& rWidth, unsigned int& rHeight, int& rInputFormat, unsigned int& rBitsPerPel, int& rEndianness,
unsigned int& rFrameRate ); unsigned int& rFrameRate ) const;
void loadAll(); void loadAll();
@@ -96,18 +102,18 @@ public:
bool saveFrame( const ClpString& filename ); bool saveFrame( const ClpString& filename );
static bool saveFrame( const ClpString& filename, CalypFrame* saveFrame ); static bool saveFrame( const ClpString& filename, CalypFrame* saveFrame );
CalypFrame* getCurrFrame( CalypFrame* ); CalypFrame* getCurrFrame( CalypFrame* ) const;
// continuous read control // continuous read control
bool setNextFrame(); bool setNextFrame();
void readNextFrame(); void readNextFrame();
void readNextFrameFillRGBBuffer(); void readNextFrameFillRGBBuffer();
CalypFrame* getCurrFrame(); CalypFrame* getCurrFrame() const;
bool seekInputRelative( bool bIsFoward ); bool seekInputRelative( bool bIsFoward );
bool seekInput( unsigned long new_frame_num ); bool seekInput( unsigned long new_frame_num );
void getDuration( int* duration_array ); void getDuration( int* duration_array ) const;
private: private:
bool readFrame( CalypFrame* frame ); bool readFrame( CalypFrame* frame );
+7 -7
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -37,7 +37,7 @@
formatElem.formatName = name; \ formatElem.formatName = name; \
formatElem.formatExt = clpLowercase( ext ); \ formatElem.formatExt = clpLowercase( ext ); \
formatElem.formatFct = handler; \ formatElem.formatFct = handler; \
formatsList.push_back( formatElem ); formatsList.push_back( formatElem )
#define REGIST_CALYP_SUPPORTED_ABSTRACT_FMT( handler, name, pattern ) \ #define REGIST_CALYP_SUPPORTED_ABSTRACT_FMT( handler, name, pattern ) \
formatElem.formatPattern = pattern; \ formatElem.formatPattern = pattern; \
@@ -70,13 +70,13 @@ public:
CalypStreamHandlerIf() CalypStreamHandlerIf()
: m_bIsInput( true ) : m_bIsInput( true )
, m_bNative( true ) , m_bNative( true )
, m_uiCurrFrameFileIdx( 0 )
, m_uiWidth( 0 ) , m_uiWidth( 0 )
, m_uiHeight( 0 ) , m_uiHeight( 0 )
, m_iPixelFormat( -1 ) , m_iPixelFormat( -1 )
, m_uiBitsPerPixel( 8 ) , m_uiBitsPerPixel( 8 )
, m_iEndianness( -1 ) , m_iEndianness( -1 )
, m_dFrameRate( 30 ) , m_dFrameRate( 30 )
, m_uiCurrFrameFileIdx( 0 )
, m_uiTotalNumberFrames( 0 ) , m_uiTotalNumberFrames( 0 )
, m_pStreamBuffer( NULL ) , m_pStreamBuffer( NULL )
, m_uiNBytesPerFrame( 0 ) , m_uiNBytesPerFrame( 0 )
@@ -89,7 +89,7 @@ public:
virtual bool openHandler( ClpString strFilename, bool bInput ) = 0; virtual bool openHandler( ClpString strFilename, bool bInput ) = 0;
virtual void closeHandler() = 0; virtual void closeHandler() = 0;
virtual bool configureBuffer( CalypFrame* pcFrame ) = 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 read( CalypFrame* pcFrame ) = 0;
virtual bool write( CalypFrame* pcFrame ) = 0; virtual bool write( CalypFrame* pcFrame ) = 0;
@@ -105,7 +105,6 @@ protected:
ClpString m_strCodecName; ClpString m_strCodecName;
bool m_bIsInput; bool m_bIsInput;
bool m_bNative; bool m_bNative;
unsigned long m_uiCurrFrameFileIdx;
ClpString m_cFilename; ClpString m_cFilename;
unsigned int m_uiWidth; unsigned int m_uiWidth;
unsigned int m_uiHeight; unsigned int m_uiHeight;
@@ -113,9 +112,10 @@ protected:
unsigned int m_uiBitsPerPixel; unsigned int m_uiBitsPerPixel;
int m_iEndianness; int m_iEndianness;
double m_dFrameRate; double m_dFrameRate;
unsigned long m_uiTotalNumberFrames; ClpULong m_uiCurrFrameFileIdx;
ClpULong m_uiTotalNumberFrames;
ClpByte* m_pStreamBuffer; ClpByte* m_pStreamBuffer;
unsigned long m_uiNBytesPerFrame; ClpULong m_uiNBytesPerFrame;
bool m_isEOF; bool m_isEOF;
}; };
+3 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * 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; size_t padded_size = nitems * size;
void* d = xMallocMem( padded_size ); void* d = xMallocMem( padded_size );
memset( d, 0, (int)padded_size ); if( d )
memset( d, 0, (int)padded_size );
return d; return d;
} }
+31 -48
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -56,9 +56,9 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
1, 1,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_YUV420P ), ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_YUV420P ),
{ {
{0, 0, 1}, /* Y */ { 0, 0, 1 }, /* Y */
{1, 0, 1}, /* U */ { 1, 0, 1 }, /* U */
{2, 0, 1}, /* V */ { 2, 0, 1 }, /* V */
}, },
}, },
}, },
@@ -73,9 +73,9 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0, 0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_YUV422P ), ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_YUV422P ),
{ {
{0, 0, 1}, /* Y */ { 0, 0, 1 }, /* Y */
{1, 0, 1}, /* U */ { 1, 0, 1 }, /* U */
{2, 0, 1}, /* V */ { 2, 0, 1 }, /* V */
}, },
}, },
}, },
@@ -90,9 +90,9 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0, 0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_YUV444P ), ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_YUV444P ),
{ {
{0, 0, 1}, /* Y */ { 0, 0, 1 }, /* Y */
{1, 0, 1}, /* U */ { 1, 0, 1 }, /* U */
{2, 0, 1}, /* V */ { 2, 0, 1 }, /* V */
}, },
}, },
}, },
@@ -107,9 +107,9 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0, 0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_YUYV422 ), ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_YUYV422 ),
{ {
{0, 1, 1}, /* Y */ { 0, 1, 1 }, /* Y */
{0, 3, 2}, /* U */ { 0, 3, 2 }, /* U */
{0, 3, 4}, /* V */ { 0, 3, 4 }, /* V */
}, },
}, },
}, },
@@ -123,7 +123,7 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0, 0,
0, 0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_GRAY8 ), 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, 0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_NONE ), ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_NONE ),
{ {
{0, 0, 1}, /* R */ { 0, 0, 1 }, /* R */
{1, 0, 1}, /* G */ { 1, 0, 1 }, /* G */
{2, 0, 1}, /* B */ { 2, 0, 1 }, /* B */
}, },
}, },
}, },
@@ -154,9 +154,9 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0, 0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_RGB24 ), ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_RGB24 ),
{ {
{0, 2, 1}, /* R */ { 0, 2, 1 }, /* R */
{0, 2, 2}, /* G */ { 0, 2, 2 }, /* G */
{0, 2, 3}, /* B */ { 0, 2, 3 }, /* B */
}, },
}, },
}, },
@@ -171,26 +171,9 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0, 0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_BGR24 ), ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_BGR24 ),
{ {
{0, 2, 3}, /* R */ { 0, 2, 3 }, /* R */
{0, 2, 2}, /* G */ { 0, 2, 2 }, /* G */
{0, 2, 1}, /* B */ { 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 */
}, },
}, },
}, },
@@ -205,10 +188,10 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0, 0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_RGBA ), ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_RGBA ),
{ {
{0, 3, 1}, /* R */ { 0, 3, 1 }, /* R */
{0, 3, 2}, /* G */ { 0, 3, 2 }, /* G */
{0, 3, 3}, /* B */ { 0, 3, 3 }, /* B */
{0, 3, 4}, /* A */ { 0, 3, 4 }, /* A */
}, },
}, },
}, },
@@ -223,10 +206,10 @@ const std::map<int, CalypPixelFormatDescriptor> g_CalypPixFmtDescriptorsMap = {
0, 0,
ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_BGRA ), ADD_FFMPEG_PEL_FMT( AV_PIX_FMT_BGRA ),
{ {
{0, 3, 3}, /* R */ { 0, 3, 3 }, /* R */
{0, 3, 2}, /* G */ { 0, 3, 2 }, /* G */
{0, 3, 1}, /* B */ { 0, 3, 1 }, /* B */
{0, 3, 4}, /* A */ { 0, 3, 4 }, /* A */
}, },
}, },
}, },
+3 -3
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -25,10 +25,10 @@
#ifndef __PIXELFORMATS_H__ #ifndef __PIXELFORMATS_H__
#define __PIXELFORMATS_H__ #define __PIXELFORMATS_H__
#include "CalypFrame.h"
#include <map> #include <map>
#include "CalypFrame.h"
#define CHROMA_RESAMPLING( X ) ( ( ( X + 1 ) >> 1 ) << 1 ) #define CHROMA_RESAMPLING( X ) ( ( ( X + 1 ) >> 1 ) << 1 )
#define CHROMARATIO( SIZE, RATIO ) ( RATIO > 1 ? ( ( SIZE + 1 ) / RATIO ) : SIZE ) #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 /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,14 +24,14 @@
#include "StreamHandlerLibav.h" #include "StreamHandlerLibav.h"
#include <cstdio>
#include <iostream>
#include "CalypFrame.h" #include "CalypFrame.h"
#include "LibMemory.h" #include "LibMemory.h"
#include "PixelFormats.h" #include "PixelFormats.h"
#include <cstdio> #if( ( LIBAVCODEC_VERSION_MAJOR > 57 ) || ( LIBAVCODEC_VERSION_MAJOR == 57 ) && ( LIBAVCODEC_VERSION_MINOR >= 37 ) )
#include <iostream>
#if( ( LIBAVCODEC_VERSION_MAJOR >= 57 ) && ( LIBAVCODEC_VERSION_MINOR >= 37 ) )
#define FF_SEND_RECEIVE_API #define FF_SEND_RECEIVE_API
#define FF_USER_CODEC_PARAM #define FF_USER_CODEC_PARAM
#endif #endif
@@ -91,7 +91,7 @@ bool StreamHandlerLibav::openHandler( ClpString strFilename, bool bInput )
// } // }
// Register all components of FFmpeg // Register all components of FFmpeg
av_register_all(); //av_register_all();
/* open input file, and allocate format context */ /* open input file, and allocate format context */
if( avformat_open_input( &m_cFmtCtx, filename, NULL, NULL ) < 0 ) if( avformat_open_input( &m_cFmtCtx, filename, NULL, NULL ) < 0 )
@@ -335,7 +335,7 @@ bool StreamHandlerLibav::configureBuffer( CalypFrame* pcFrame )
void StreamHandlerLibav::calculateFrameNumber() void StreamHandlerLibav::calculateFrameNumber()
{ {
unsigned long long int num_frames; ClpULong num_frames;
/*if( m_cStream->nb_frames ) /*if( m_cStream->nb_frames )
{ {
num_frames = m_cStream->nb_frames; num_frames = m_cStream->nb_frames;
@@ -442,7 +442,7 @@ bool StreamHandlerLibav::write( CalypFrame* pcFrame )
return false; return false;
} }
bool StreamHandlerLibav::seek( unsigned long long int iFrameNum ) bool StreamHandlerLibav::seek( ClpULong iFrameNum )
{ {
if( m_uiTotalNumberFrames == 1 ) if( m_uiTotalNumberFrames == 1 )
return true; return true;
+3 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -27,6 +27,7 @@
#define __STREAMHANDLERLIBAV_H__ #define __STREAMHANDLERLIBAV_H__
#include <inttypes.h> #include <inttypes.h>
#include <string> #include <string>
#include <vector> #include <vector>
@@ -66,7 +67,7 @@ public:
void closeHandler(); void closeHandler();
bool configureBuffer( CalypFrame* pcFrame ); bool configureBuffer( CalypFrame* pcFrame );
void calculateFrameNumber(); void calculateFrameNumber();
bool seek( unsigned long long int iFrameNum ); bool seek( ClpULong iFrameNum );
bool read( CalypFrame* pcFrame ); bool read( CalypFrame* pcFrame );
bool write( CalypFrame* pcFrame ); bool write( CalypFrame* pcFrame );
+27 -16
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,12 +24,15 @@
#include "StreamHandlerOpenCV.h" #include "StreamHandlerOpenCV.h"
#include "CalypFrame.h"
#include "LibMemory.h"
#include <cstdio> #include <cstdio>
#include <opencv2/opencv.hpp> #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::Mat;
using cv::VideoCapture; using cv::VideoCapture;
@@ -37,7 +40,8 @@ std::vector<CalypStreamFormat> StreamHandlerOpenCV::supportedReadFormats()
{ {
INI_REGIST_CALYP_SUPPORTED_FMT; INI_REGIST_CALYP_SUPPORTED_FMT;
#if( CV_MAJOR_VERSION >= 3 ) #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 #endif
END_REGIST_CALYP_SUPPORTED_FMT; END_REGIST_CALYP_SUPPORTED_FMT;
} }
@@ -45,10 +49,12 @@ std::vector<CalypStreamFormat> StreamHandlerOpenCV::supportedReadFormats()
std::vector<CalypStreamFormat> StreamHandlerOpenCV::supportedWriteFormats() std::vector<CalypStreamFormat> StreamHandlerOpenCV::supportedWriteFormats()
{ {
INI_REGIST_CALYP_SUPPORTED_FMT; INI_REGIST_CALYP_SUPPORTED_FMT;
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create, "Portable PixMap ", "ppm" ); REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create,
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create, "Portable Network Graphics", "png" ); "Portable Network Graphics", "png" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create, "Joint Photographic Experts Group", "jpg" ); REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create,
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create, "Windows Bitmap", "bmp" ); "Joint Photographic Experts Group", "jpg" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerOpenCV::Create, "Windows Bitmap",
"bmp" );
END_REGIST_CALYP_SUPPORTED_FMT; END_REGIST_CALYP_SUPPORTED_FMT;
} }
@@ -78,14 +84,20 @@ bool StreamHandlerOpenCV::openHandler( ClpString strFilename, bool bInput )
m_strFormatName = "DEV"; m_strFormatName = "DEV";
m_strCodecName = "Raw Video"; m_strCodecName = "Raw Video";
pcVideoCapture = new VideoCapture( iDeviceId ); 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_uiWidth = pcVideoCapture->get( CV_CAP_PROP_FRAME_WIDTH );
m_uiHeight = pcVideoCapture->get( CV_CAP_PROP_FRAME_HEIGHT ); m_uiHeight = pcVideoCapture->get( CV_CAP_PROP_FRAME_HEIGHT );
#endif
m_dFrameRate = 25; m_dFrameRate = 25;
} }
else else
#endif #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 ); Mat cvMat = cv::imread( m_cFilename );
m_uiWidth = cvMat.cols; m_uiWidth = cvMat.cols;
m_uiHeight = cvMat.rows; m_uiHeight = cvMat.rows;
@@ -119,7 +131,7 @@ bool StreamHandlerOpenCV::configureBuffer( CalypFrame* pcFrame )
return true; return true;
} }
bool StreamHandlerOpenCV::seek( unsigned long long int iFrameNum ) bool StreamHandlerOpenCV::seek( ClpULong iFrameNum )
{ {
// m_uiCurrFrameFileIdx = // m_uiCurrFrameFileIdx =
return true; return true;
@@ -149,10 +161,9 @@ bool StreamHandlerOpenCV::write( CalypFrame* pcFrame )
{ {
bool bRet = false; bool bRet = false;
Mat cvFrame; Mat cvFrame;
bRet = pcFrame->toMat( cvFrame ); bRet = pcFrame->toMat( cvFrame, false, true );
if( bRet ) if( !bRet )
{ return bRet;
bRet = cv::imwrite( m_cFilename, cvFrame ); bRet = cv::imwrite( m_cFilename, cvFrame );
}
return bRet; return bRet;
} }
+2 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -43,7 +43,7 @@ public:
bool openHandler( ClpString strFilename, bool bInput ); bool openHandler( ClpString strFilename, bool bInput );
void closeHandler(); void closeHandler();
bool configureBuffer( CalypFrame* pcFrame ); bool configureBuffer( CalypFrame* pcFrame );
bool seek( unsigned long long int iFrameNum ); bool seek( ClpULong iFrameNum );
bool read( CalypFrame* pcFrame ); bool read( CalypFrame* pcFrame );
bool write( CalypFrame* pcFrame ); bool write( CalypFrame* pcFrame );
+44 -30
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,16 +24,16 @@
#include "StreamHandlerPortableMap.h" #include "StreamHandlerPortableMap.h"
#include "CalypFrame.h"
#include "LibMemory.h"
#include <cmath> #include <cmath>
#include <cstdio> #include <cstdio>
#include "CalypFrame.h"
#include "LibMemory.h"
std::vector<CalypStreamFormat> StreamHandlerPortableMap::supportedReadFormats() std::vector<CalypStreamFormat> StreamHandlerPortableMap::supportedReadFormats()
{ {
INI_REGIST_CALYP_SUPPORTED_FMT; 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 GrayMap ", "pgm" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerPortableMap::Create, "Portable PixMap ", "ppm" ); REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerPortableMap::Create, "Portable PixMap ", "ppm" );
END_REGIST_CALYP_SUPPORTED_FMT; END_REGIST_CALYP_SUPPORTED_FMT;
@@ -42,7 +42,9 @@ std::vector<CalypStreamFormat> StreamHandlerPortableMap::supportedReadFormats()
std::vector<CalypStreamFormat> StreamHandlerPortableMap::supportedWriteFormats() std::vector<CalypStreamFormat> StreamHandlerPortableMap::supportedWriteFormats()
{ {
INI_REGIST_CALYP_SUPPORTED_FMT; 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 GrayMap ", "pgm" );
REGIST_CALYP_SUPPORTED_FMT( &StreamHandlerPortableMap::Create, "Portable PixMap ", "ppm" );
END_REGIST_CALYP_SUPPORTED_FMT; END_REGIST_CALYP_SUPPORTED_FMT;
} }
@@ -50,62 +52,71 @@ bool StreamHandlerPortableMap::openHandler( ClpString strFilename, bool bInput )
{ {
m_bIsInput = bInput; m_bIsInput = bInput;
m_pFile = NULL; m_pFile = NULL;
m_pFile = fopen( strFilename.c_str(), bInput ? "rb" : "wb" );
if( m_pFile == NULL )
{
return false;
}
m_strFormatName = "PGM"; m_strFormatName = "PGM";
m_strCodecName = "Raw Video"; m_strCodecName = "Raw Video";
if( m_bIsInput ) if( m_bIsInput )
{ {
m_pFile = fopen( strFilename.c_str(), "rb" );
char line[101]; char line[101];
while( fgets( line, 100, m_pFile ) && line[0] == '#' ) 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 ) if( sscanf( line, "P%d %u %u %d", &m_iMagicNumber, &m_uiWidth, &m_uiHeight, &m_iMaxValue ) != 4 )
{
m_uiBitsPerPixel = 1;
m_iMaxValue = 1;
m_iPixelFormat = CLP_GRAY;
}
else
{ {
sscanf( line, "P%d", &m_iMagicNumber );
while( fgets( line, 100, m_pFile ) && line[0] == '#' ) while( fgets( line, 100, m_pFile ) && line[0] == '#' )
; ;
sscanf( line, "%d", &m_iMaxValue ); sscanf( line, "%u %u", &m_uiWidth, &m_uiHeight );
m_uiBitsPerPixel = log( m_iMaxValue + 1 ) / log( 2 );
m_iPixelFormat = m_iMagicNumber == 2 || m_iMagicNumber == 5 ? CLP_GRAY : CLP_RGB24; 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 else
{ {
int colorSpace = CalypFrame::pelformatColorSpace( m_iPixelFormat );
m_iMaxValue = ( 1 << m_uiBitsPerPixel ) - 1; m_iMaxValue = ( 1 << m_uiBitsPerPixel ) - 1;
if( 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_iMagicNumber = 5;
m_iPixelFormat = CalypFrame::findPixelFormat( "GRAY" );
} }
else if( m_iPixelFormat == CLP_RGB24 ) else if( colorSpace == CLP_COLOR_RGB )
{ {
m_iMagicNumber = 6; m_iMagicNumber = 6;
m_iPixelFormat = CalypFrame::findPixelFormat( "RGB" );
} }
else else
{ {
closeHandler(); closeHandler();
throw CalypFailure( "CalypStream", "Invalid format for portable map" );
return false; return false;
} }
m_pFile = fopen( strFilename.c_str(), "wb" );
} }
m_iEndianness = 0; m_iEndianness = CLP_BIG_ENDIAN;
m_dFrameRate = 1; m_dFrameRate = 1;
m_uiTotalNumberFrames = 1; m_uiTotalNumberFrames = 1;
if( m_pFile == NULL )
{
closeHandler();
return false;
}
return true; return true;
} }
@@ -123,7 +134,7 @@ bool StreamHandlerPortableMap::configureBuffer( CalypFrame* pcFrame )
return getMem1D<ClpByte>( &m_pStreamBuffer, pcFrame->getBytesPerFrame() ); return getMem1D<ClpByte>( &m_pStreamBuffer, pcFrame->getBytesPerFrame() );
} }
bool StreamHandlerPortableMap::seek( unsigned long long int iFrameNum ) bool StreamHandlerPortableMap::seek( ClpULong iFrameNum )
{ {
// m_uiCurrFrameFileIdx = // m_uiCurrFrameFileIdx =
return true; return true;
@@ -141,13 +152,16 @@ bool StreamHandlerPortableMap::read( CalypFrame* pcFrame )
bool StreamHandlerPortableMap::write( 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 ); fseek( m_pFile, 0, SEEK_SET );
fprintf( m_pFile, "P%d\n%d %d\n", m_iMagicNumber, m_uiWidth, m_uiHeight ); fprintf( m_pFile, "P%d\n%d %d\n", m_iMagicNumber, m_uiWidth, m_uiHeight );
if( m_iMagicNumber > 4 ) if( m_iMagicNumber > 4 )
{ {
fprintf( m_pFile, "%d\n", m_iMaxValue ); 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 ); unsigned long long int processed_bytes = fwrite( m_pStreamBuffer, sizeof( ClpByte ), m_uiNBytesPerFrame, m_pFile );
if( processed_bytes != m_uiNBytesPerFrame ) if( processed_bytes != m_uiNBytesPerFrame )
return false; return false;
+2 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -38,7 +38,7 @@ public:
bool openHandler( ClpString strFilename, bool bInput ); bool openHandler( ClpString strFilename, bool bInput );
void closeHandler(); void closeHandler();
bool configureBuffer( CalypFrame* pcFrame ); bool configureBuffer( CalypFrame* pcFrame );
bool seek( unsigned long long int iFrameNum ); bool seek( ClpULong iFrameNum );
bool read( CalypFrame* pcFrame ); bool read( CalypFrame* pcFrame );
bool write( CalypFrame* pcFrame ); bool write( CalypFrame* pcFrame );
+6 -5
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -24,11 +24,11 @@
#include "StreamHandlerRaw.h" #include "StreamHandlerRaw.h"
#include <cstdio>
#include "CalypFrame.h" #include "CalypFrame.h"
#include "LibMemory.h" #include "LibMemory.h"
#include <cstdio>
std::vector<CalypStreamFormat> StreamHandlerRaw::supportedReadFormats() std::vector<CalypStreamFormat> StreamHandlerRaw::supportedReadFormats()
{ {
INI_REGIST_CALYP_SUPPORTED_FMT; INI_REGIST_CALYP_SUPPORTED_FMT;
@@ -57,6 +57,7 @@ bool StreamHandlerRaw::openHandler( ClpString strFilename, bool bInput )
calculateFrameNumber(); calculateFrameNumber();
m_strFormatName = "YUV"; m_strFormatName = "YUV";
m_strCodecName = "Raw Video"; m_strCodecName = "Raw Video";
m_dFrameRate = 30;
return true; return true;
} }
@@ -78,13 +79,13 @@ void StreamHandlerRaw::calculateFrameNumber()
if( m_pFile && m_uiNBytesPerFrame > 0 ) if( m_pFile && m_uiNBytesPerFrame > 0 )
{ {
fseek( m_pFile, 0, SEEK_END ); 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 ); fseek( m_pFile, 0, SEEK_SET );
m_uiTotalNumberFrames = fileSize / m_uiNBytesPerFrame; m_uiTotalNumberFrames = fileSize / m_uiNBytesPerFrame;
} }
} }
bool StreamHandlerRaw::seek( unsigned long long int iFrameNum ) bool StreamHandlerRaw::seek( ClpULong iFrameNum )
{ {
if( m_bIsInput && m_pFile ) if( m_bIsInput && m_pFile )
{ {
+2 -2
View File
@@ -1,5 +1,5 @@
/* This file is a part of Calyp project /* 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) * Luis Lucas (luisfrlucas@gmail.com)
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@@ -46,7 +46,7 @@ public:
void closeHandler(); void closeHandler();
bool configureBuffer( CalypFrame* pcFrame ); bool configureBuffer( CalypFrame* pcFrame );
void calculateFrameNumber(); void calculateFrameNumber();
bool seek( unsigned long long int iFrameNum ); bool seek( ClpULong iFrameNum );
bool read( CalypFrame* pcFrame ); bool read( CalypFrame* pcFrame );
bool write( 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