- 20 Apr, 2021 2 commits
-
-
Alexandre Janniaux authored
-
Alexandre Janniaux authored
-
- 15 Apr, 2021 8 commits
-
-
Alexandre Janniaux authored
The vlc_runloop mode is designed to be executed even when an event is being reported by the vout_window used, ie when there is a call to CFRunLoopInMode(CFRunLoopGetMain(), CFSTR("vlc_runloop"), ..). By adding the default mode too, it ensures it would run in the normal CFRunLoop too. Async tasks can still be dispatched without the "vlc_runloop" mode but every sync tasks in the display must be done under this mode to prevent deadlock from happening between the main thread and the vout_thread. Fixes #23571
-
Alexandre Janniaux authored
The UIView should have a well-defined size from the start.
-
Alexandre Janniaux authored
It avoids the display to open with a size bigger than the device's screen, which could lead to out-of-memory failures.
-
Alexandre Janniaux authored
Report events from a different thread than the main thread, and continue to execute the main CFRunLoop, but filter the events to only executes the ones queued by potential display, ie. those tagged with the mode "vlc_runloop". The vlc_runloop mode is designed to be executed even when an event is being reported by the vout_window used, ie. when there is a call to CFRunLoopInMode(CFRunLoopGetMain(), CFSTR("vlc_runloop"), ..). Clients should ensure they also tag their blocks with the default mode too. Otherwise, they are likely to never be executed. Async tasks can still be dispatched without the "vlc_runloop" mode but every sync tasks in the display must be done under this mode to prevent deadlock from happening between the main thread and the vout_thread, typically with the following code: /* The main loop to run the block into */ CFRunLoopRef runloop = CFRunLoopGetMain(); /* The modes to execute the block in */ CFStringRef modes_cfstrings[] = { kCFRunLoopDefaultMode, CFSTR("vlc_runloop") }; CFArrayRef modes = CFArrayCreate(NULL, (const void **)modes_cfstrings, ARRAY_SIZE(modes_cfstrings), &kCFTypeArrayCallBacks); CFRunLoopPerformBlock(runloop, modes, ^{ /* The block content to execute */ }); /* Don't forget to signal the runloop CFRunLoopWakeUp(runloop); CFRelease(modes); To achieve a blocking/sync behaviour, clients can share a binary semaphore between the block and the outside of the block. When using a vlc_sem_t object, it must be qualified with __block to be modified inside of the block. Refs #23571
-
Alexandre Janniaux authored
The inhibiter code is taken from VLCKit inhibiter's handling, and is meant to replace this handling.
-
Alexandre Janniaux authored
-
Alexandre Janniaux authored
-
Alexandre Janniaux authored
The pinch recognizer cannot work on tvOS, since tvOS doesn't have a touchscreen.
-
- 14 Apr, 2021 3 commits
-
-
Thomas Guillem authored
-
Thomas Guillem authored
-
Thomas Guillem authored
-
- 13 Apr, 2021 2 commits
-
-
Pierre Ynard authored
-
Pierre Ynard authored
-
- 12 Apr, 2021 25 commits
-
-
Alexandre Janniaux authored
The comment /* Get the subpicture to be displayed */ was written twice in places where no subpictures were involved. In addition, do_snapshot was computed where the rendering date was computed although it was not used there. Move the do_snapshot computation just before it's used, replace the misplaced comments by comment actually describing what's follow, and rewrite the removed comment where spu_Render actually returns the subpicture.
-
This helps for testing plane filtering. Signed-off-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
If config.filter_planes is set on a filter, generate one output texture for each input texture, and call draw() for each plane separately. Signed-off-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
A "direct" sampler (i.e. a sampler without interop) only supported one texture, because the output of the previous filter was assumed to be RGBA in a single plane. A deinterlace filter will output several planes, so the sampler of the next filter must be able to receive all of them. Signed-off-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
A sampler gives access to the input picture, in RGBA. Add support for giving access to individual input planes, selected by vlc_gl_sampler_SelectPlane(), in their native format. Signed-off-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
The number of input planes and their sizes might be useful to filters implementation. It could be retrieved by vlc_fourcc_GetChromaDescription(), but for convenience, expose them in sampler. Signed-off-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
Compute the shader extensions in a separate function, to be able to reuse it. Signed-off-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
The type and function to use depends on the texture target. Extract the mapping to a separate function to be able to reuse it. Signed-off-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
Variables were generated on the fly with an index in the name. For example: uniform sampler2D Texture0; uniform mat3 TexCoordsMap0; uniform sampler2D Texture1; uniform mat3 TexCoordsMap1; uniform sampler2D Texture2; uniform mat3 TexCoordsMap2; Replace them by arrays: uniform sampler2D Textures[3]; uniform mat3 TexCoordsMaps[3]; This will enable to expose a GLSL function providing a color for a particular plane number passed as a parameter. Signed-off-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
Now that both types of samplers (interop and direct) use the same fragment shader code generation, factorize their creation. Signed-off-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
A sampler may receive their input picture either: - from an interop, uploading a picture_t - from a previous filter, giving an OpenGL texture directly (a "direct" sampler) The fragment shader for a "direct" sampler was straightforward: the input was always an RGBA texture. On the contrary, samplers from interop always applied chroma conversion to expose individual pixels in RGBA. However, deinterlace filters operate on individual input planes, so the chroma conversion must be applied afterwards. To prepare support for this feature, use the same fragment shader code generation for both types of samplers. Signed-off-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
This will allow to generate chroma conversion code for "direct" samplers, in order to convert chroma between OpenGL filters. Signed-off-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
Swizzle will be necessary even for "direct" samplers (samplers without interop). Signed-off-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
In OpenGL, some values of picture planes scaling are hardcoded, and might differ from the values provided by in a vlc_chroma_description_t. Make the computation explicit and explain why. Signed-off-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
Alexandre Janniaux authored
An 8k RGB image doesn't fit within the maximum allocation size constraint installed in block_Alloc. Indeed, 2^27 is 134217728 while the RGB 8k jpeg image sample in #19979 will allocate 201326592. In general, 8k with 4 byte per pixel can go up to 132710400, without taking into account additional padding, so doubling the allocation size is enough to handle those pictures, while keeping a limit for the maximum allocation size. Fixes #19979
-
Signed-off-by:
Pierre Lamot <pierre@videolabs.io>
-
Signed-off-by:
Pierre Lamot <pierre@videolabs.io>
-
Signed-off-by:
Pierre Lamot <pierre@videolabs.io>
-
Signed-off-by:
Pierre Lamot <pierre@videolabs.io>
-
Signed-off-by:
Pierre Lamot <pierre@videolabs.io>
-
Signed-off-by:
Pierre Lamot <pierre@videolabs.io>
-
The slider has some width, which must be taken into account to compute the volume. This avoids to control the left of the handle near 0% but the right of the handle near 125%. Instead, it always controls the center of the handle. Signed-off-by:
Pierre Lamot <pierre@videolabs.io>
-
When changing the volume slider with the mouse, the new value considered the width of the complete component instead of the relevant visual part. As a consequence, the slider did not follow the mouse correctly. Signed-off-by:
Pierre Lamot <pierre@videolabs.io>
-
Right-click allows to set the volume control to predefined steps (0%, 50%, 100% and 125%). However, the last step (125%) was only reachable from the last pixel. Instead, set to the nearest predefined value (and simplify the code for readability). 0% 50% 100% 125% | | | | ^^^^^---------^^^^^^^^^- (before) ^^^^^---------^^^^^^^--- (after) Signed-off-by:
Pierre Lamot <pierre@videolabs.io>
-
fixes tab button not using accentText color when active Signed-off-by:
Pierre Lamot <pierre@videolabs.io>
-