v4l2loopback devices rejected, affects chromium-based Skype for linux
Reported by
blaffabl...@gmail.com,
Aug 21 2017
|
||||||||
Issue descriptionUserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 Example URL: Steps to reproduce the problem: git clone https://github.com/umlaeute/v4l2loopback.git cd v4l2loopback make && sudo make install && sudo modprobe v4l2loopback ffmpeg -re -i any_test_media.avi -f v4l2 -vcodec rawvideo -pix_fmt yuv420p /dev/video0 Open e.g. a Facebook chat and try to take a picture What is the expected behavior? Pages that access the webcam show any_test_media.avi What went wrong? The video camera is rejected right after being opened and queried through ioctls (VIDIOC_QUERYCAP). This is the strace from skype: stat("/dev/video0", {st_mode=S_IFCHR|0660, st_rdev=makedev(81, 0), ...}) = 0 open("/dev/video0", O_RDONLY ) = 96</dev/video0> ioctl(96</dev/video0>, VIDIOC_QUERYCAP, {driver="v4l2 loopback", card="Dummy video device (0x0000)", bus_info="platform:v4l2loopback-000", version=4.12.5, capabilities=V4L2_CAP_VIDEO_CAPTURE|V4L2_CAP_VIDEO_OUTPUT|V4L2_CAP_VIDEO_M2M|V4L2_CAP_READWRITE|V4L2_CAP_STREAMING|V4L2_CAP_DEVICE_CAPS|V4L2_CAP_EXT_PIX_FORMAT, device_caps=V4L2_CAP_VIDEO_CAPTURE|V4L2_CAP_VIDEO_OUTPUT|V4L2_CAP_VIDEO_M2M|V4L2_CAP_READWRITE|V4L2_CAP_STREAMING|V4L2_CAP_DEVICE_CAPS|V4L2_CAP_EXT_PIX_FORMAT}) = 0 close(96</dev/video0>) = 0 Did this work before? N/A Is it a problem with Flash or HTML5? Both Does this work in other browsers? Yes Chrome version: 60.0.3112.90 Channel: stable OS Version: Fedora 26 4.12.5-300.fc26.x86_64 Flash Version: Shockwave Flash 26.0 r0 Contents of chrome://gpu: Graphics Feature Status Canvas: Hardware accelerated CheckerImaging: Disabled Flash: Hardware accelerated Flash Stage3D: Hardware accelerated Flash Stage3D Baseline profile: Hardware accelerated Compositing: Hardware accelerated Multiple Raster Threads: Enabled Native GpuMemoryBuffers: Software only. Hardware acceleration disabled Rasterization: Software only. Hardware acceleration disabled Video Decode: Software only, hardware acceleration unavailable Video Encode: Software only, hardware acceleration unavailable WebGL: Hardware accelerated WebGL2: Hardware accelerated Driver Bug Workarounds adjust_src_dst_region_for_blitframebuffer clear_uniforms_before_first_program_use count_all_in_varyings_packing decode_encode_srgb_for_generatemipmap disable_chromium_framebuffer_multisample disable_framebuffer_cmaa disable_post_sub_buffers_for_onscreen_surfaces msaa_is_slow scalarize_vec_and_mat_constructor_args Problems Detected Accelerated video decode is unavailable on Linux: 137247 Disabled Features: accelerated_video_decode Accelerated video encode is unavailable on Linux Disabled Features: accelerated_video_encode Clear uniforms before first program use on all platforms: 124764, 349137 Applied Workarounds: clear_uniforms_before_first_program_use Mesa drivers in Linux handle varyings without static use incorrectly: 333885 Applied Workarounds: count_all_in_varyings_packing Multisampling is buggy in Intel IvyBridge: 116370 Applied Workarounds: disable_chromium_framebuffer_multisample Disable partial swaps on Mesa drivers (detected with GL_RENDERER): 339493 Applied Workarounds: disable_post_sub_buffers_for_onscreen_surfaces Always rewrite vec/mat constructors to be consistent: 398694 Applied Workarounds: scalarize_vec_and_mat_constructor_args On Intel GPUs MSAA performance is not acceptable for GPU rasterization: 527565 Applied Workarounds: msaa_is_slow Timer queries crash on Intel GPUs on Linux: 540543, 576991 Limited enabling of Chromium GL_INTEL_framebuffer_CMAA: 535198 Applied Workarounds: disable_framebuffer_cmaa Disable partial swaps on Mesa drivers (detected with GL_VERSION): 339493 Applied Workarounds: disable_post_sub_buffers_for_onscreen_surfaces Decode and encode before generateMipmap for srgb format textures on os except macosx: 634519 Applied Workarounds: decode_encode_srgb_for_generatemipmap adjust src/dst region if blitting pixels outside read framebuffer on Linux Intel: 664740 Applied Workarounds: adjust_src_dst_region_for_blitframebuffer Disable KHR_blend_equation_advanced until cc shaders are updated: 661715 Accelerated rasterization has been disabled, either via blacklist, about:flags or the command line. Disabled Features: rasterization Native GpuMemoryBuffers have been disabled, either via about:flags or command line. Disabled Features: native_gpu_memory_buffers Checker-imaging has been disabled via finch trial or the command line. Disabled Features: checker_imaging Version Information Data exported 21/8/2017, 12:47:28 Chrome version Chrome/60.0.3112.90 Operating system Linux 4.12.5-300.fc26.x86_64 Software rendering list version 13.8 Driver bug list version 10.93 ANGLE commit id unknown hash 2D graphics backend Skia/60 d1f2d15b36f6a6a9d199581b998a7ca924a1f1a8- Command Line /usr/bin/chromium-browser --enable-plugins --enable-extensions --enable-user-scripts --enable-printing --enable-sync --auto-ssl-client-auth --ppapi-flash-path=/usr/lib64/chromium-browser/PepperFlash/libpepflashplayer.so --ppapi-flash-version=26.0.0.151 --flag-switches-begin --enable-fast-unload --enable-tcp-fastopen --enable-zero-copy --flag-switches-end Driver Information Initialization time 33 In-process GPU false Passthrough Command Decoder false Supports overlays false Sandboxed true GPU0 VENDOR = 0x8086, DEVICE= 0x0166 Optimus false Optimus false AMD switchable false Driver vendor Mesa Driver version 17.1.5 Driver date Pixel shader version 4.20 Vertex shader version 4.20 Max. MSAA samples 8 Machine model name Machine model version GL_VENDOR Intel Open Source Technology Center GL_RENDERER Mesa DRI Intel(R) Ivybridge Mobile GL_VERSION 4.2 (Core Profile) Mesa 17.1.5 GL_EXTENSIONS GL_3DFX_texture_compression_FXT1 GL_AMD_conservative_depth GL_AMD_draw_buffers_blend GL_AMD_seamless_cubemap_per_texture GL_AMD_shader_trinary_minmax GL_AMD_vertex_shader_layer GL_AMD_vertex_shader_viewport_index GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_APPLE_object_purgeable GL_ARB_ES2_compatibility GL_ARB_ES3_compatibility GL_ARB_arrays_of_arrays GL_ARB_base_instance GL_ARB_blend_func_extended GL_ARB_buffer_storage GL_ARB_clear_buffer_object GL_ARB_clear_texture GL_ARB_clip_control GL_ARB_compressed_texture_pixel_storage GL_ARB_compute_shader GL_ARB_conditional_render_inverted GL_ARB_conservative_depth GL_ARB_copy_buffer GL_ARB_copy_image GL_ARB_cull_distance GL_ARB_debug_output GL_ARB_depth_buffer_float GL_ARB_depth_clamp GL_ARB_derivative_control GL_ARB_direct_state_access GL_ARB_draw_buffers GL_ARB_draw_buffers_blend GL_ARB_draw_elements_base_vertex GL_ARB_draw_indirect GL_ARB_draw_instanced GL_ARB_enhanced_layouts GL_ARB_explicit_attrib_location GL_ARB_explicit_uniform_location GL_ARB_fragment_coord_conventions GL_ARB_fragment_layer_viewport GL_ARB_fragment_shader GL_ARB_framebuffer_no_attachments GL_ARB_framebuffer_object GL_ARB_framebuffer_sRGB GL_ARB_get_program_binary GL_ARB_get_texture_sub_image GL_ARB_gpu_shader5 GL_ARB_gpu_shader_fp64 GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_instanced_arrays GL_ARB_internalformat_query GL_ARB_internalformat_query2 GL_ARB_invalidate_subdata GL_ARB_map_buffer_alignment GL_ARB_map_buffer_range GL_ARB_multi_bind GL_ARB_multi_draw_indirect GL_ARB_occlusion_query2 GL_ARB_pipeline_statistics_query GL_ARB_pixel_buffer_object GL_ARB_point_sprite GL_ARB_program_interface_query GL_ARB_provoking_vertex GL_ARB_robustness GL_ARB_sample_shading GL_ARB_sampler_objects GL_ARB_seamless_cube_map GL_ARB_seamless_cubemap_per_texture GL_ARB_separate_shader_objects GL_ARB_shader_atomic_counter_ops GL_ARB_shader_atomic_counters GL_ARB_shader_bit_encoding GL_ARB_shader_clock GL_ARB_shader_draw_parameters GL_ARB_shader_image_load_store GL_ARB_shader_image_size GL_ARB_shader_objects GL_ARB_shader_precision GL_ARB_shader_storage_buffer_object GL_ARB_shader_subroutine GL_ARB_shader_texture_image_samples GL_ARB_shader_texture_lod GL_ARB_shader_viewport_layer_array GL_ARB_shading_language_420pack GL_ARB_shading_language_packing GL_ARB_sync GL_ARB_tessellation_shader GL_ARB_texture_barrier GL_ARB_texture_buffer_object GL_ARB_texture_buffer_object_rgb32 GL_ARB_texture_buffer_range GL_ARB_texture_compression_bptc GL_ARB_texture_compression_rgtc GL_ARB_texture_cube_map_array GL_ARB_texture_float GL_ARB_texture_gather GL_ARB_texture_mirror_clamp_to_edge GL_ARB_texture_multisample GL_ARB_texture_non_power_of_two GL_ARB_texture_query_levels GL_ARB_texture_query_lod GL_ARB_texture_rectangle GL_ARB_texture_rg GL_ARB_texture_rgb10_a2ui GL_ARB_texture_storage GL_ARB_texture_storage_multisample GL_ARB_texture_swizzle GL_ARB_texture_view GL_ARB_transform_feedback2 GL_ARB_transform_feedback3 GL_ARB_transform_feedback_instanced GL_ARB_transform_feedback_overflow_query GL_ARB_uniform_buffer_object GL_ARB_vertex_array_bgra GL_ARB_vertex_array_object GL_ARB_vertex_attrib_64bit GL_ARB_vertex_attrib_binding GL_ARB_vertex_shader GL_ARB_vertex_type_10f_11f_11f_rev GL_ARB_vertex_type_2_10_10_10_rev GL_ARB_viewport_array GL_ATI_blend_equation_separate GL_ATI_texture_float GL_EXT_abgr GL_EXT_blend_equation_separate GL_EXT_draw_buffers2 GL_EXT_draw_instanced GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_framebuffer_multisample_blit_scaled GL_EXT_framebuffer_sRGB GL_EXT_packed_depth_stencil GL_EXT_packed_float GL_EXT_pixel_buffer_object GL_EXT_polygon_offset_clamp GL_EXT_provoking_vertex GL_EXT_shader_integer_mix GL_EXT_shader_samples_identical GL_EXT_texture_array GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_compression_s3tc GL_EXT_texture_filter_anisotropic GL_EXT_texture_integer GL_EXT_texture_sRGB GL_EXT_texture_sRGB_decode GL_EXT_texture_shared_exponent GL_EXT_texture_snorm GL_EXT_texture_swizzle GL_EXT_transform_feedback GL_EXT_vertex_array_bgra GL_IBM_multimode_draw_arrays GL_INTEL_performance_query GL_KHR_context_flush_control GL_KHR_debug GL_KHR_robustness GL_MESA_pack_invert GL_MESA_shader_integer_functions GL_MESA_texture_signed_rgba GL_NV_conditional_render GL_NV_depth_clamp GL_NV_packed_depth_stencil GL_NV_texture_barrier GL_OES_EGL_image GL_S3_s3tc Disabled Extensions GL_ARB_timer_query GL_EXT_timer_query GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent Window system binding vendor SGI Window system binding version 1.4 Window system binding extensions GLX_ARB_create_context GLX_ARB_create_context_profile GLX_ARB_create_context_robustness GLX_ARB_fbconfig_float GLX_ARB_framebuffer_sRGB GLX_ARB_multisample GLX_EXT_create_context_es_profile GLX_EXT_create_context_es2_profile GLX_EXT_fbconfig_packed_float GLX_EXT_framebuffer_sRGB GLX_EXT_import_context GLX_EXT_libglvnd GLX_EXT_texture_from_pixmap GLX_EXT_visual_info GLX_EXT_visual_rating GLX_MESA_copy_sub_buffer GLX_OML_swap_method GLX_SGI_make_current_read GLX_SGI_swap_control GLX_SGIS_multisample GLX_SGIX_fbconfig GLX_SGIX_pbuffer GLX_SGIX_visual_select_group GLX_INTEL_swap_event Window manager Xfwm4 XDG_CURRENT_DESKTOP XFCE GDMSESSION xfce Compositing manager Yes Direct rendering Yes Reset notification strategy 0x8252 GPU process crash count 0 System visual ID 33 RGBA visual ID 111 Compositor Information Tile Update Mode Zero-copy Partial Raster Enabled GpuMemoryBuffers Status ATC Software only ATCIA Software only DXT1 Software only DXT5 Software only ETC1 Software only R_8 Software only RG_88 Software only BGR_565 Software only RGBA_4444 Software only RGBX_8888 Software only RGBA_8888 Software only BGRX_8888 Software only BGRA_8888 Software only RGBA_F16 Software only YVU_420 Software only YUV_420_BIPLANAR Software only UYVY_422 Software only Recent skype versions for linux (>=5) are based on chromium, so this affects a rather large userbase.
,
Aug 21 2017
Firefox 55.0.1 confirmed to access the webcam with no issue.
,
Aug 23 2017
Adding TE-NeedsTriageHelp, as the issue seems to be out of TE scope. Thanks!
,
Aug 28 2017
,
Aug 28 2017
,
Aug 28 2017
I wasn't aware of it, but v4l2loopback had a workaround for this: https://github.com/umlaeute/v4l2loopback/issues/78 Apparently, chromium treats devices that announce *both* capture and output capabilities as invalid. This workaround makes the module announce output capabilities *only* once a stream is feed to the virtual device. I have tested this and it indeed works. However, there is no reason for chromium to check and exclude these output capabilites, so I believe that this should be removed.
,
Sep 8 2017
capture related bug. miu@, please re-assign appropriately if need.
,
Nov 21 2017
Sorry, this got buried in my pile of old e-mails. Reassigning to owner...
,
Nov 22 2017
Unfortunately, this check is needed to prevent opening drivers for mem-to-mem devices, which would advertise (V4L2_CAP_VIDEO_CAPTURE* | V4L2_CAP_VIDEO_OUTPUT*). In newer kernels, this has been replaced with V4L2_CAP_VIDEO_M2M*, but older kernels would still have drivers advertising this for mem-to-mem devices. This does not appear to be an upstream driver, and I do not know what would be the standard way of advertising loopback devices. I could perhaps suggest asking in V4L2 mailing lists about this, so we could handle this is a standard way. One idea could be to have two video nodes created, one CAPTURE and one OUTPUT, and use media controller API to discover their relationship if needed; another could perhaps be to have a new V4L2_CAP_VIDEO_LOOPBACK capability.
,
Aug 1
|
||||||||
►
Sign in to add a comment |
||||||||
Comment 1 by blaffabl...@gmail.com
, Aug 21 2017