Skip to content

Chromium/Brave 156: decoder created without errors on direct backend, but video is black / YouTube player doesn't render (RTX 3060, driver 580.178.04) #486

Open

Description

@nico87

Environment

  • nvidia-vaapi-driver: built from master, v0.0.18-39-g4430507
  • NVIDIA driver 580.178.04 (proprietary), GPU: GeForce RTX 3060
  • Ubuntu 24.04, kernel 6.8.0-147, X11 (GNOME), nvidia-drm.modeset=1
  • Brave (1.98.63 Chromium: 156.0.8078.80 (Official B

nvd-brave-log.txt

uild) (x86_64) ), .deb install

  • libva 2.12 / VA-API 1.20 (vainfo from Ubuntu packages)

What works

  • vainfo lists H264, HEVC, VP9 (profiles 0 and 2), AV1.
  • With VaapiOnNvidiaGPUs enabled, brave://media-internals shows VaapiVideoDecoder, and the driver log shows the decoder being created and kept alive for the whole playback (nvCreateContext Creating decoder, Creating VideoProc context), with no CUDA or VA errors on the direct backend.

What doesn't

  • With VaapiOnNvidiaGPUs the image is not displayed. On YouTube the player area is missing entirely; with a local H.264 .mp4 dragged into the browser the video stays black. Audio plays.
  • Without VaapiOnNvidiaGPUs everything displays fine, but Chromium skips the NVIDIA device (Should skip nVidia device named: nvidia-drm) and decodes in software (VpxVideoDecoder / Dav1dVideoDecoder).

Commands tried

LIBVA_DRIVERS_PATH=$HOME/vadrv NVD_BACKEND=direct LIBVA_DRIVER_NAME=nvidia brave-browser \
  --enable-features=VaapiVideoDecoder,VaapiIgnoreDriverChecks,VaapiOnNvidiaGPUs

and the configuration from the README's Chrome section:

LIBVA_DRIVERS_PATH=$HOME/vadrv LIBVA_DRIVER_NAME=nvidia brave-browser \
  --enable-features=AcceleratedVideoDecodeLinuxGL,VaapiOnNvidiaGPUs \
  --ignore-gpu-blocklist --use-gl=angle --use-angle=gl

Same result with both. Also tried with and without AcceleratedVideoDecodeLinuxZeroCopyGL, with --disable-gpu-sandbox, and with Vulkan on and off (Skia backend GaneshGL in the failing runs).

Other findings (for context)

  • Ubuntu's packaged 0.0.8 fails with nvCreateContext CUDA ERROR 'invalid argument' ("0 render targets, 0 surfaces") on this setup; the current master doesn't.
  • The egl backend with master fails with egl_allocateBackingImage CUDA ERROR 'invalid resource handle' (400) then reconnect CUDA ERROR 'operation not supported' (801), and Chromium falls back to software.

Log excerpt (NVD_LOG=1, direct backend, failing config)

nvCreateContext Creating context with 0 render targets, at 2560x1440
nvCreateContext Creating decoder: 0x... for context id: 2
nvCreateContext Creating VideoProc context id: 614
...
nvDestroyContext Destroying context: 2      (only when the browser is closed)

I'm happy to provide more logs or test patches. Is there anything specific you'd like me to capture (e.g. extra --vmodule flags on the Chromium side)?

Activity

  1. elee1766 commented on Nov 2, 2026

    @elee1766

    try forcing egl and see if it works

    LIBVA_DRIVER_NAME=nvidia NVD_BACKEND=direct chromium \
      --use-gl=angle --use-angle=gl-egl \
      --ignore-gpu-blocklist \
      --disable-features=Vulkan \
      --enable-features=AcceleratedVideoDecodeLinuxGL,VaapiVideoDecoder,VaapiIgnoreDriverChecks,VaapiOnNvidiaGPUs
    

    replace chromium with your brave?

  2. Tomiscout commented on Nov 2, 2026

    @Tomiscout

    On a new machine (RTX 4060 TI) I forgot to add any flags after new install. And default brave did break very recently to black screen on all the latest upstream versions (this repo upstream 0.0.18, nvidia 615.78.08-1). I was also running old brave version, and after the update it didn't change a thing.

    Looking at brave:\\media-internals it was falling back to dav1d for AV1 after this message.:
    Cannot select VaapiVideoDecoder for video decoding. status=DecoderStatus::Codes::kUnsupportedConfig

    h264 Had the same message and Selected FFmpegVideoDecoder for video decoding

    And for hevc test videos there was no video surface, only audio, and this log:
    debug "Warning, FFmpegDemuxer failed to create a valid/supported video decoder configuration from muxed stream, config:codec: hevc, profile: hevc main, level: not available, alpha_mode: is_opaque, coded size: [7680,4320], visible rect: [0,0,7680,4320], natural size: [7680,4320], has extra data: true, encryption scheme: Unencrypted, rotation: 0°, flipped: 0, color space: {primaries:BT709, transfer:BT709, matrix:BT709, range:LIMITED}, spatial format: [projection_type: none, stereo_mode: mono]" 00:00:00.032 info "FFmpegDemuxer: skipping invalid or unsupported video track"

    I've added these flags and now it works fine, Vaapi is selected for AV1, HEVC, H264
    --enable-features=AcceleratedVideoDecodeLinuxGL,AcceleratedVideoDecodeLinuxZeroCopyGL,VaapiOnNvidiaGPUs,VaapiIgnoreDriverChecks

    @elee1766 env vars and flags also fixed it for me

  3. nico87 commented on Nov 2, 2026

    @nico87
    Author

    I will try using Chromium. I can tell that updating VA-API to the latest build and switching to Wayland actually fixed the issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions