Skip to content

WIP: Supporting GTK4 highgui#25958

Closed
mqcmd196 wants to merge 9 commits intoopencv:4.xfrom
mqcmd196:PR/gtk4
Closed

WIP: Supporting GTK4 highgui#25958
mqcmd196 wants to merge 9 commits intoopencv:4.xfrom
mqcmd196:PR/gtk4

Conversation

@mqcmd196
Copy link
Copy Markdown
Contributor

Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

  • I agree to contribute to the project under Apache 2 License.
  • To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
  • The PR is proposed to the proper branch
  • There is a reference to the original bug report and related work
  • There is accuracy test, performance test and test data in opencv_extra repository, if applicable
    Patch to opencv_extra has the same branch name.
  • The feature is well documented and sample code can be built with the project CMake

@asmorkalov
Copy link
Copy Markdown
Contributor

asmorkalov commented Jul 26, 2024

Build errors for GTK4 (ubuntu 24.04):

Details
[ 96%] Building CXX object modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_gtk.cpp.o
In file included from /home/vlad/Projects/opencv/modules/highgui/src/backend.cpp:18:
/home/vlad/Projects/opencv/modules/highgui/src/registry.impl.hpp:39:2: warning: #warning "HAVE_GTK definition issue. Register new GTK backend" [-Wcpp]
   39 | #warning "HAVE_GTK definition issue. Register new GTK backend"
      |  ^~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp: In function ‘void cvImageWidget_measure(GtkWidget*, GtkOrientation, int, int*, int*, int*, int*)’:
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:532:40: warning: unused parameter ‘for_size’ [-Wunused-parameter]
  532 |                                    int for_size,
      |                                    ~~~~^~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp: In function ‘int cvInitSystem(int, char**)’:
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:741:31: warning: unused parameter ‘argc’ [-Wunused-parameter]
  741 | CV_IMPL int cvInitSystem( int argc, char** argv )
      |                           ~~~~^~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:741:44: warning: unused parameter ‘argv’ [-Wunused-parameter]
  741 | CV_IMPL int cvInitSystem( int argc, char** argv )
      |                                     ~~~~~~~^~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp: In function ‘std::shared_ptr<CvWindow> namedWindow_(const std::string&, int)’:
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1246:21: error: ‘gtk_vbox_new’ was not declared in this scope; did you mean ‘gtk_box_new’?
 1246 |     window->paned = gtk_vbox_new( FALSE, 0 );
      |                     ^~~~~~~~~~~~
      |                     gtk_box_new
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1247:5: error: ‘gtk_box_pack_end’ was not declared in this scope; did you mean ‘gtk_box_prepend’?
 1247 |     gtk_box_pack_end( GTK_BOX(window->paned), window->widget, TRUE, TRUE, 0 );
      |     ^~~~~~~~~~~~~~~~
      |     gtk_box_prepend
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1249:24: error: ‘GTK_CONTAINER’ was not declared in this scope; did you mean ‘GTK_CONSTRAINT’?
 1249 |     gtk_container_add( GTK_CONTAINER(window->frame), window->paned );
      |                        ^~~~~~~~~~~~~
      |                        GTK_CONSTRAINT
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1249:5: error: ‘gtk_container_add’ was not declared in this scope
 1249 |     gtk_container_add( GTK_CONTAINER(window->frame), window->paned );
      |     ^~~~~~~~~~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp: In function ‘void cvMoveWindow(const char*, int, int)’:
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1586:50: warning: unused parameter ‘x’ [-Wunused-parameter]
 1586 | CV_IMPL void cvMoveWindow( const char* name, int x, int y )
      |                                              ~~~~^
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1586:57: warning: unused parameter ‘y’ [-Wunused-parameter]
 1586 | CV_IMPL void cvMoveWindow( const char* name, int x, int y )
      |                                                     ~~~~^
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp: In function ‘void icvShowSaveAsDialog(GtkWidget*, CvWindow*)’:
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1936:23: error: ‘GTK_STOCK_CANCEL’ was not declared in this scope; did you mean ‘GDK_TOUCH_CANCEL’?
 1936 |                       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
      |                       ^~~~~~~~~~~~~~~~
      |                       GDK_TOUCH_CANCEL
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1937:23: error: ‘GTK_STOCK_SAVE’ was not declared in this scope; did you mean ‘GTK_STACK_PAGE’?
 1937 |                       GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
      |                       ^~~~~~~~~~~~~~
      |                       GTK_STACK_PAGE
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1939:5: error: ‘gtk_file_chooser_set_do_overwrite_confirmation’ was not declared in this scope
 1939 |     gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1972:9: error: ‘gtk_dialog_run’ was not declared in this scope; did you mean ‘gtk_dialog_new’?
 1972 |     if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
      |         ^~~~~~~~~~~~~~
      |         gtk_dialog_new
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1974:23: error: ‘gtk_file_chooser_get_filename’ was not declared in this scope; did you mean ‘gtk_file_chooser_get_files’?
 1974 |         char* fname = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                       gtk_file_chooser_get_files
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1978:5: error: ‘gtk_widget_destroy’ was not declared in this scope; did you mean ‘gtk_window_destroy’?
 1978 |     gtk_widget_destroy(dialog);
      |     ^~~~~~~~~~~~~~~~~~
      |     gtk_window_destroy
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp: At global scope:
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1997:50: error: ‘GdkEventKey’ has not been declared
 1997 | static gboolean icvOnKeyPress(GtkWidget* widget, GdkEventKey* event, gpointer user_data)
      |                                                  ^~~~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp: In function ‘gboolean icvOnKeyPress(GtkWidget*, int*, gpointer)’:
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2001:27: error: request for member ‘state’ in ‘* event’, which is of non-class type ‘int’
 2001 |     if ( BIT_ALLIN(event->state, GDK_CONTROL_MASK) && (event->keyval == GDK_KEY_s || event->keyval == GDK_KEY_S))
      |                           ^~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:86:32: note: in definition of macro ‘BIT_ALLIN’
   86 |     #define BIT_ALLIN(x,y) ( ((x)&(y)) == (y) )
      |                                ^
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2001:63: error: request for member ‘keyval’ in ‘* event’, which is of non-class type ‘int’
 2001 |     if ( BIT_ALLIN(event->state, GDK_CONTROL_MASK) && (event->keyval == GDK_KEY_s || event->keyval == GDK_KEY_S))
      |                                                               ^~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2001:93: error: request for member ‘keyval’ in ‘* event’, which is of non-class type ‘int’
 2001 |     if ( BIT_ALLIN(event->state, GDK_CONTROL_MASK) && (event->keyval == GDK_KEY_s || event->keyval == GDK_KEY_S))
      |                                                                                             ^~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2013:20: error: request for member ‘keyval’ in ‘* event’, which is of non-class type ‘int’
 2013 |     switch( event->keyval )
      |                    ^~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2026:23: error: request for member ‘keyval’ in ‘* event’, which is of non-class type ‘int’
 2026 |         code = event->keyval;
      |                       ^~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2029:20: error: request for member ‘state’ in ‘* event’, which is of non-class type ‘int’
 2029 |     code |= event->state << 16;
      |                    ^~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp: In function ‘gboolean icvOnMouse(GtkWidget*, GdkEvent*, gpointer)’:
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2105:14: error: invalid use of incomplete type ‘GdkEvent’
 2105 |     if( event->type == GDK_MOTION_NOTIFY )
      |              ^~
In file included from /usr/include/gtk-4.0/gdk/gdkdisplay.h:29,
                 from /usr/include/gtk-4.0/gdk/gdk.h:43,
                 from /usr/include/gtk-4.0/gtk/gtk.h:30,
                 from /home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:47:
/usr/include/gtk-4.0/gdk/gdkevents.h:101:16: note: forward declaration of ‘GdkEvent’
  101 | typedef struct _GdkEvent                GdkEvent;
      |                ^~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2107:9: error: ‘GdkEventMotion’ was not declared in this scope
 2107 |         GdkEventMotion* event_motion = (GdkEventMotion*)event;
      |         ^~~~~~~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2107:25: error: ‘event_motion’ was not declared in this scope
 2107 |         GdkEventMotion* event_motion = (GdkEventMotion*)event;
      |                         ^~~~~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2107:56: error: expected primary-expression before ‘)’ token
 2107 |         GdkEventMotion* event_motion = (GdkEventMotion*)event;
      |                                                        ^
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2114:19: error: invalid use of incomplete type ‘GdkEvent’
 2114 |     else if( event->type == GDK_BUTTON_PRESS ||
      |                   ^~
/usr/include/gtk-4.0/gdk/gdkevents.h:101:16: note: forward declaration of ‘GdkEvent’
  101 | typedef struct _GdkEvent                GdkEvent;
      |                ^~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2115:19: error: invalid use of incomplete type ‘GdkEvent’
 2115 |              event->type == GDK_BUTTON_RELEASE ||
      |                   ^~
/usr/include/gtk-4.0/gdk/gdkevents.h:101:16: note: forward declaration of ‘GdkEvent’
  101 | typedef struct _GdkEvent                GdkEvent;
      |                ^~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2116:19: error: invalid use of incomplete type ‘GdkEvent’
 2116 |              event->type == GDK_2BUTTON_PRESS )
      |                   ^~
/usr/include/gtk-4.0/gdk/gdkevents.h:101:16: note: forward declaration of ‘GdkEvent’
  101 | typedef struct _GdkEvent                GdkEvent;
      |                ^~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2116:29: error: ‘GDK_2BUTTON_PRESS’ was not declared in this scope; did you mean ‘GDK_BUTTON_PRESS’?
 2116 |              event->type == GDK_2BUTTON_PRESS )
      |                             ^~~~~~~~~~~~~~~~~
      |                             GDK_BUTTON_PRESS
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2118:9: error: ‘GdkEventButton’ was not declared in this scope; did you mean ‘GtkMenuButton’?
 2118 |         GdkEventButton* event_button = (GdkEventButton*)event;
      |         ^~~~~~~~~~~~~~
      |         GtkMenuButton
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2118:25: error: ‘event_button’ was not declared in this scope
 2118 |         GdkEventButton* event_button = (GdkEventButton*)event;
      |                         ^~~~~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2118:56: error: expected primary-expression before ‘)’ token
 2118 |         GdkEventButton* event_button = (GdkEventButton*)event;
      |                                                        ^
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2143:19: error: invalid use of incomplete type ‘GdkEvent’
 2143 |     else if( event->type == GDK_SCROLL )
      |                   ^~
/usr/include/gtk-4.0/gdk/gdkevents.h:101:16: note: forward declaration of ‘GdkEvent’
  101 | typedef struct _GdkEvent                GdkEvent;
      |                ^~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2145:9: error: ‘GdkEventScroll’ was not declared in this scope
 2145 |         GdkEventScroll* event_scroll = (GdkEventScroll*)event;
      |         ^~~~~~~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2145:25: error: ‘event_scroll’ was not declared in this scope
 2145 |         GdkEventScroll* event_scroll = (GdkEventScroll*)event;
      |                         ^~~~~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2145:56: error: expected primary-expression before ‘)’ token
 2145 |         GdkEventScroll* event_scroll = (GdkEventScroll*)event;
      |                                                        ^
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2157:25: error: invalid use of incomplete type ‘GdkEvent’
 2157 |         state    = event->scroll.state;
      |                         ^~
/usr/include/gtk-4.0/gdk/gdkevents.h:101:16: note: forward declaration of ‘GdkEvent’
  101 | typedef struct _GdkEvent                GdkEvent;
      |                ^~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2159:21: error: invalid use of incomplete type ‘GdkEvent’
 2159 |         switch(event->scroll.direction) {
      |                     ^~
/usr/include/gtk-4.0/gdk/gdkevents.h:101:16: note: forward declaration of ‘GdkEvent’
  101 | typedef struct _GdkEvent                GdkEvent;
      |                ^~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2211:32: error: ‘GDK_MOD1_MASK’ was not declared in this scope; did you mean ‘GDK_META_MASK’?
 2211 |                 BIT_MAP(state, GDK_MOD1_MASK,    CV_EVENT_FLAG_ALTKEY)   |
      |                                ^~~~~~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:89:36: note: in definition of macro ‘BIT_MAP’
   89 |     #define BIT_MAP(x,y,z) ( ((x)&(y)) ? (z) : 0 )
      |                                    ^
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2212:32: error: ‘GDK_MOD2_MASK’ was not declared in this scope; did you mean ‘GDK_META_MASK’?
 2212 |                 BIT_MAP(state, GDK_MOD2_MASK,    CV_EVENT_FLAG_ALTKEY);
      |                                ^~~~~~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:89:36: note: in definition of macro ‘BIT_MAP’
   89 |     #define BIT_MAP(x,y,z) ( ((x)&(y)) ? (z) : 0 )
      |                                    ^
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp: In function ‘int cvWaitKey(int)’:
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2269:16: error: ‘gtk_main_iteration_do’ was not declared in this scope; did you mean ‘g_main_iteration’?
 2269 |         while( gtk_main_iteration_do(TRUE) && last_key < 0 && !expired && (delay > 0 || !getGTKWindows().empty()))
      |                ^~~~~~~~~~~~~~~~~~~~~
      |                g_main_iteration
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp: In member function ‘virtual void cv::impl::GTKWindow::move(int, int)’:
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:2391:9: error: ‘gtk_window_move’ was not declared in this scope; did you mean ‘gtk_window_close’?
 2391 |         gtk_window_move(GTK_WINDOW(window->frame), x, y);
      |         ^~~~~~~~~~~~~~~
      |         gtk_window_close
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp: At global scope:
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:719:17: warning: ‘gboolean icvOnKeyPress(GtkWidget*, GdkEvent*, gpointer)’ declared ‘static’ but never defined [-Wunused-function]
  719 | static gboolean icvOnKeyPress( GtkWidget* widget, GdkEvent* event, gpointer user_data);
      |                 ^~~~~~~~~~~~~
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:719:17: warning: ‘gboolean icvOnKeyPress(GtkWidget*, GdkEvent*, gpointer)’ used but never defined
/home/vlad/Projects/opencv/modules/highgui/src/window_gtk.cpp:1997:17: warning: ‘gboolean icvOnKeyPress(GtkWidget*, int*, gpointer)’ defined but not used [-Wunused-function]
 1997 | static gboolean icvOnKeyPress(GtkWidget* widget, GdkEventKey* event, gpointer user_data)
      |                 ^~~~~~~~~~~~~
make[3]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/build.make:118: modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_gtk.cpp.o] Error 1
make[3]: *** Ожидание завершения заданий…
make[2]: *** [CMakeFiles/Makefile2:2592: modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:2633: modules/highgui/CMakeFiles/opencv_test_highgui.dir/rule] Error 2

@asmorkalov
Copy link
Copy Markdown
Contributor

@mqcmd196 I tuned Ubntu 24.04 configuration for you to cover GTK-4 in CI. Please pay attention on build status.

@mqcmd196
Copy link
Copy Markdown
Contributor Author

Thank you. By the way, I told you there are a few API changes in GTK4, but I found that this is the case with OpenGL. There are so many changes in other APIs, so I think I need more implementation in the highgui_gtk and tests locally.

if(WITH_GTK)
if(NOT WITH_GTK_2_X)
ocv_check_modules(GTK4 gtk4)
ocv_check_modules(GTK3 gtk+-3.0)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With QT we have a way to specify major version: -DWITH_QT=4 or -DWITH_QT=5.
Perhaps we should go in this way here too.

@asmorkalov
Copy link
Copy Markdown
Contributor

2220 | #if GTK_VERSION4
      |     ^~~~~~~~~~~~
/home/ci/opencv/modules/highgui/src/window_gtk.cpp: In function 'gboolean icvOnKeyPress(GtkWidget*, GdkEventKey*, gpointer)':
/home/ci/opencv/modules/highgui/src/window_gtk.cpp:2035:20: error: invalid conversion from 'guint' {aka 'unsigned int'} to 'GdkModifierType' [-fpermissive]
 2035 |     state = event->state;
      |             ~~~~~~~^~~~~
      |                    |
      |                    guint {aka unsigned int}
/home/ci/opencv/modules/highgui/src/window_gtk.cpp: In function 'gboolean icvOnMouse(GtkWidget*, GdkEvent*, gpointer)':
/home/ci/opencv/modules/highgui/src/window_gtk.cpp:2149:29: error: expected ';' before 'if'
 2149 |     event_type = event->type
      |                             ^
      |                             ;
......
 2152 |     if( event_type == GDK_MOTION_NOTIFY )
      |     ~~                       
/home/ci/opencv/modules/highgui/src/window_gtk.cpp:2170:5: error: 'else' without a previous 'if'
 2170 |     else if( event_type == GDK_BUTTON_PRESS ||
      |     ^~~~
/home/ci/opencv/modules/highgui/src/window_gtk.cpp:2190:22: warning: declaration of 'event_type' shadows a previous local [-Wshadow]
 2190 |         GdkEventType event_type = event_button->type;
      |                      ^~~~~~~~~~
/home/ci/opencv/modules/highgui/src/window_gtk.cpp:2145:18: note: shadowed declaration is here
 2145 |     GdkEventType event_type;
      |                  ^~~~~~~~~~

@mshabunin mshabunin mentioned this pull request Aug 22, 2024
4 tasks
@asmorkalov asmorkalov added the GSoC label Sep 4, 2024
asmorkalov pushed a commit that referenced this pull request Sep 9, 2024
❗ Potential conflicts with #25958
C-API cleanup: highgui, videoio #26025

❗  Merge with: opencv/opencv_contrib#3780

This PR removes usage of C-API from highgui and videoio modules. Only source code is affected, tests were not using obsolete API.

It should be possible to backport these changes to 4.x branch preserving removed public headers and source files (`*_c.h` and `*_c.cpp`).


#### Checklist

I tried to verify as many backends as possible, though these checks were not as thorough as I'd like them to be. Below is the checklist covering all modified backends with their statuses.

> 🔹 - small changes
> 🟢 - consider working
> ⚪ - considered untested

##### highgui

Pass | Backend | Local check | CI check
-----|---------|-------------|---------
🟢 | GTK2 | build + test, plugin build | build + test ❔ 
🟢 | GTK3 | build + test, plugin build | build + test
🟢 | QT | build + test, plugin build |
⚪ | Wayland 🔹 | |
🟢 | WIN32 🔹 | | build + test
🟢 | Cocoa 🔹 | | build + test
⚪ | WinRT | | 

##### videoio 

Pass | Backend | Local check | CI check
-----|---------|-------------|---------
🟢 | Android Camera/MediaNDK 🔹 | | build
🟢 | Aravis | build |
🟢 | AVFoundation OSX | | build + test
⚪ | AVFoundation iOS | | build
🟢 | DC1394 | build |
🟢 | DShow 🔹 | | build
🟢 | FFMpeg | build, plugin build | build + test
🟢 | GPhoto 🔹 | build |
🟢 | GStreamer | build, plugin build | build + test
🟢 | Images | build | build + test
🟢 | MSMF 🔹 | | build + test
🟢 | OpenNI | build |
🟢 | PVAPI | build |
🟢 | V4L | build + test | build
🟢 | XIMEA | build |
🟢 | XINE 🔹 | build |

#### Notes

- local linux build checks performed using [this framework](https://github.com/mshabunin/opencv-videoio-build-check)
- minor extra changes made in both `cap_avfoundation*.mm` to make them slightly more synchronized - it would be better to combine them into a single one in the future
- configurations with plugins have been build but not tested
- **moved unrelated changes to separate PRs** ~two issues have been fixed in separate commits:~
  - ~imgproc: missing `cv::hal::` color conversion functions has been used in MediaSDK backend~
  - ~videoio/V4L: wrong color conversion mode caused bad colors for NV12 camera input format (RGB instead of BGR)~

It would be nice to check following functionality manually:
- [ ] OSX: camera input
- [ ] iOS: camera and file input
- [ ] WinRT: build, some testing
- [x] Linux/Wayland: build
@asmorkalov asmorkalov changed the title Supporting GTK4 highgui WIP: Supporting GTK4 highgui Sep 24, 2024
@asmorkalov asmorkalov modified the milestones: 4.11.0, 4.12.0 Dec 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants