Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: d908463e14d12fda5a42a1d3fb9cbf61041fd261
      
https://github.com/WebKit/WebKit/commit/d908463e14d12fda5a42a1d3fb9cbf61041fd261
  Author: Philippe Normand <[email protected]>
  Date:   2025-11-11 (Tue, 11 Nov 2025)

  Changed paths:
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/platform/graphics/gstreamer/VideoEncoderGStreamer.cpp
    M Source/WebCore/platform/graphics/gstreamer/VideoEncoderGStreamer.h
    M Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.cpp
    M Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.h
    M Source/WebCore/platform/libwebrtc/LibWebRTCVPXVideoDecoder.cpp
    M Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp
    M 
Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoRTPPacketizer.cpp
    A 
Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCVideoFrameUtilities.h
    M Source/WebCore/platform/mediastream/libwebrtc/VideoFrameLibWebRTC.cpp
    M Source/WebCore/platform/mediastream/libwebrtc/VideoFrameLibWebRTC.h
    M 
Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoEncoderFactory.cpp
    M 
Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoFrameLibWebRTC.cpp
    M 
Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoFrameLibWebRTC.h
    M 
Source/WebCore/platform/mediastream/libwebrtc/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.cpp
    M 
Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm

  Log Message:
  -----------
  [LibWebRTC][GStreamer] Support for video encoding using GStreamer encoders
https://bugs.webkit.org/show_bug.cgi?id=302248

Reviewed by Xabier Rodriguez-Calvar.

This patch rewrites the LibWebRTC GStreamer-based VideoEncoder using the 
WebCodecs backend. For now
we enable this for VP8 and H.264. Other codecs rely on the native LibWebRTC 
encoders. Along the way
the GStreamer video encoder gained support for variable framerate and annexB 
(mostly relevant for
H.264, H.265 and AV1).

Driving-by, colorspace utilities were moved from the Cocoa-specific VideoFrame 
implementation to a
new header file, LibWebRTCVideoFrameUtilities.h.

* Source/WebCore/platform/graphics/gstreamer/VideoEncoderGStreamer.cpp:
(WebCore::GStreamerVideoEncoder::create):
(WebCore::GStreamerVideoEncoder::setBitRateAllocation):
(WebCore::GStreamerInternalVideoEncoder::initialize):
(WebCore::GStreamerInternalVideoEncoder::setBitRateAllocation):
(WebCore::GStreamerInternalVideoEncoder::applyRates):
* Source/WebCore/platform/graphics/gstreamer/VideoEncoderGStreamer.h:
* Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.cpp:
(annexBStreamFormatCapsFieldValue):
(videoEncoderSetEncoder):
(videoEncoderSetCodec):
(videoEncoderSetFrameRate):
(webkit_video_encoder_class_init):
* Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.h:
(WebKitVideoEncoderBitRateAllocation::create): Deleted.
(WebKitVideoEncoderBitRateAllocation::setBitRate): Deleted.
(WebKitVideoEncoderBitRateAllocation::getBitRate const): Deleted.
(WebKitVideoEncoderBitRateAllocation::scalabilityMode const): Deleted.
(WebKitVideoEncoderBitRateAllocation::WebKitVideoEncoderBitRateAllocation): 
Deleted.
* Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp:
(WebCore::MediaRecorderPrivateBackend::configureVideoEncoder):
* Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoRTPPacketizer.cpp:
(WebCore::GStreamerVideoRTPPacketizer::create):
* Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCVideoFrameUtilities.h: 
Copied from 
Source/WebCore/platform/mediastream/libwebrtc/VideoFrameLibWebRTC.cpp.
(WebCore::colorSpaceFromLibWebRTCVideoFrame):
(WebCore::videoRotationFromLibWebRTCVideoFrame):
* Source/WebCore/platform/mediastream/libwebrtc/VideoFrameLibWebRTC.cpp:
(WebCore::VideoFrameLibWebRTC::colorSpaceFromFrame): Deleted.
* 
Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoEncoderFactory.cpp:
(WebCore::GStreamerEncodedImageBuffer::create):
(WebCore::GStreamerEncodedImageBuffer::GStreamerEncodedImageBuffer):
(WebCore::GStreamerVideoEncoderFactory::Create):
(WebCore::GStreamerVideoEncoderFactory::GetSupportedFormats const):
(WebCore::GStreamerEncodedImageBuffer::getBuffer const): Deleted.
(WebCore::GStreamerEncodedImageBuffer::getVideoResolution const): Deleted.
(WebCore::LibWebRTCGStreamerVideoEncoder::LibWebRTCGStreamerVideoEncoder): 
Deleted.
(WebCore::LibWebRTCGStreamerVideoEncoder::pipeline): Deleted.
(WebCore::LibWebRTCGStreamerVideoEncoder::makeElement): Deleted.
(WebCore::LibWebRTCGStreamerVideoEncoder::returnFromFlowReturn): Deleted.
(WebCore::LibWebRTCGStreamerVideoEncoder::createEncoder): Deleted.
(WebCore::LibWebRTCGStreamerVideoEncoder::AddCodecIfSupported): Deleted.
(WebCore::LibWebRTCGStreamerVideoEncoder::Caps): Deleted.
(WebCore::LibWebRTCGStreamerVideoEncoder::ConfigureSupportedCodec): Deleted.
(WebCore::LibWebRTCGStreamerVideoEncoder::SetRestrictionCaps): Deleted.
(WebCore::LibWebRTCGStreamerVideoEncoderH264::LibWebRTCGStreamerVideoEncoderH264):
 Deleted.
* 
Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoFrameLibWebRTC.cpp:
(WebCore::convertLibWebRTCVideoFrameToGStreamerSample):
(WebCore::convertGStreamerSampleToLibWebRTCVideoFrame):
(WebCore::GStreamerVideoFrameLibWebRTC::ToI420):
* 
Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoFrameLibWebRTC.h:
(WebCore::GStreamerVideoFrameLibWebRTC::sample):
(WebCore::GStreamerVideoFrameLibWebRTC::GStreamerVideoFrameLibWebRTC):
(WebCore::GStreamerVideoFrameLibWebRTC::getSample const): Deleted.
* 
Source/WebCore/platform/mediastream/libwebrtc/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.cpp:
(WebCore::RealtimeIncomingVideoSourceLibWebRTC::OnFrame):
* Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
(WebCore::RealtimeIncomingVideoSourceCocoa::toVideoFrame):

Canonical link: https://commits.webkit.org/302840@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to