⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 280972 in webkit


Ignore:
Timestamp:
Aug 12, 2021, 10:13:11 AM (5 years ago)
Author:
youenn@apple.com
Message:

Adopt span in RTCRtpSFrameTransform
https://bugs.webkit.org/show_bug.cgi?id=229029

Reviewed by Eric Carlson.

Source/WebCore:

Transition to Span for improved readability, no change of behavior.

  • Modules/mediastream/RTCEncodedFrame.cpp:

(WebCore::RTCEncodedFrame::data const):

  • Modules/mediastream/RTCRtpSFrameTransform.cpp:

(WebCore::processFrame):
(WebCore::RTCRtpSFrameTransform::initializeTransformer):
(WebCore::transformFrame):
(WebCore::RTCRtpSFrameTransform::createStreams):

  • Modules/mediastream/RTCRtpSFrameTransformer.cpp:

(WebCore::RTCRtpSFrameTransformer::decryptFrame):
(WebCore::RTCRtpSFrameTransformer::encryptFrame):
(WebCore::RTCRtpSFrameTransformer::transform):

  • Modules/mediastream/RTCRtpSFrameTransformer.h:
  • Modules/mediastream/RTCRtpScriptTransformer.cpp:

(WebCore::RTCRtpScriptTransformer::writable):

  • Modules/mediastream/RTCRtpTransformableFrame.h:

(): Deleted.

  • Modules/mediastream/libwebrtc/LibWebRTCRtpTransformableFrame.cpp:

(WebCore::LibWebRTCRtpTransformableFrame::data const):
(WebCore::LibWebRTCRtpTransformableFrame::setData):

  • Modules/mediastream/libwebrtc/LibWebRTCRtpTransformableFrame.h:

Tools:

  • TestWebKitAPI/Tests/WebCore/RTCRtpSFrameTransformerTests.cpp:

(TestWebKitAPI::TEST):

Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r280968 r280972  
     12021-08-12  Youenn Fablet  <youenn@apple.com>
     2
     3        Adopt span in RTCRtpSFrameTransform
     4        https://bugs.webkit.org/show_bug.cgi?id=229029
     5
     6        Reviewed by Eric Carlson.
     7
     8        Transition to Span for improved readability, no change of behavior.
     9
     10        * Modules/mediastream/RTCEncodedFrame.cpp:
     11        (WebCore::RTCEncodedFrame::data const):
     12        * Modules/mediastream/RTCRtpSFrameTransform.cpp:
     13        (WebCore::processFrame):
     14        (WebCore::RTCRtpSFrameTransform::initializeTransformer):
     15        (WebCore::transformFrame):
     16        (WebCore::RTCRtpSFrameTransform::createStreams):
     17        * Modules/mediastream/RTCRtpSFrameTransformer.cpp:
     18        (WebCore::RTCRtpSFrameTransformer::decryptFrame):
     19        (WebCore::RTCRtpSFrameTransformer::encryptFrame):
     20        (WebCore::RTCRtpSFrameTransformer::transform):
     21        * Modules/mediastream/RTCRtpSFrameTransformer.h:
     22        * Modules/mediastream/RTCRtpScriptTransformer.cpp:
     23        (WebCore::RTCRtpScriptTransformer::writable):
     24        * Modules/mediastream/RTCRtpTransformableFrame.h:
     25        (): Deleted.
     26        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransformableFrame.cpp:
     27        (WebCore::LibWebRTCRtpTransformableFrame::data const):
     28        (WebCore::LibWebRTCRtpTransformableFrame::setData):
     29        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransformableFrame.h:
     30
    1312021-08-12  Johnson Zhou  <qiaosong_zhou@apple.com>
    232
  • trunk/Source/WebCore/Modules/mediastream/RTCEncodedFrame.cpp

    r270290 r280972  
    4242{
    4343    auto data = m_frame->data();
    44     return JSC::ArrayBuffer::create(data.data, data.size);
     44    return JSC::ArrayBuffer::create(data.data(), data.size());
    4545}
    4646
  • trunk/Source/WebCore/Modules/mediastream/RTCRtpSFrameTransform.cpp

    r280958 r280972  
    116116}
    117117
    118 static std::optional<Vector<uint8_t>> processFrame(const uint8_t* data, size_t size, RTCRtpSFrameTransformer& transformer, ScriptExecutionContextIdentifier identifier, const WeakPtr<RTCRtpSFrameTransform>& weakTransform)
    119 {
    120     auto result = transformer.transform(data, size);
     118static std::optional<Vector<uint8_t>> processFrame(Span<const uint8_t> data, RTCRtpSFrameTransformer& transformer, ScriptExecutionContextIdentifier identifier, const WeakPtr<RTCRtpSFrameTransform>& weakTransform)
     119{
     120    auto result = transformer.transform(data);
    121121    if (!result.has_value()) {
    122122        auto errorInformation = WTFMove(result.error());
     
    160160    backend.setTransformableFrameCallback([transformer = m_transformer, identifier = context->contextIdentifier(), backend = makeRef(backend), weakThis = makeWeakPtr(this)](auto&& frame) {
    161161        auto chunk = frame->data();
    162         if (!chunk.data || !chunk.size)
     162        if (!chunk.data() || !chunk.size())
    163163            return;
    164         auto result = processFrame(chunk.data, chunk.size, transformer.get(), identifier, weakThis);
     164        auto result = processFrame(chunk, transformer.get(), identifier, weakThis);
    165165
    166166        if (!result)
     
    188188}
    189189
    190 static void transformFrame(const uint8_t* data, size_t size, JSDOMGlobalObject& globalObject, RTCRtpSFrameTransformer& transformer, SimpleReadableStreamSource& source, ScriptExecutionContextIdentifier identifier, const WeakPtr<RTCRtpSFrameTransform>& weakTransform)
    191 {
    192     auto result = processFrame(data, size, transformer, identifier, weakTransform);
     190static void transformFrame(Span<const uint8_t> data, JSDOMGlobalObject& globalObject, RTCRtpSFrameTransformer& transformer, SimpleReadableStreamSource& source, ScriptExecutionContextIdentifier identifier, const WeakPtr<RTCRtpSFrameTransform>& weakTransform)
     191{
     192    auto result = processFrame(data, transformer, identifier, weakTransform);
    193193    auto buffer = result ? SharedBuffer::create(WTFMove(*result)) : SharedBuffer::create();
    194194    source.enqueue(toJS(&globalObject, &globalObject, buffer->tryCreateArrayBuffer().get()));
     
    199199{
    200200    auto chunk = frame.rtcFrame().data();
    201     auto result = processFrame(chunk.data, chunk.size, transformer, identifier, weakTransform);
    202     RTCRtpTransformableFrame::Data transformedChunk;
     201    auto result = processFrame(chunk, transformer, identifier, weakTransform);
     202    Span<const uint8_t> transformedChunk;
    203203    if (result)
    204204        transformedChunk = { result->data(), result->size() };
     
    230230            transformFrame(*value, globalObject, transformer.get(), *readableStreamSource, context.contextIdentifier(), weakThis);
    231231        }, [&](RefPtr<ArrayBuffer>& value) {
    232             transformFrame(static_cast<const uint8_t*>(value->data()), value->byteLength(), globalObject, transformer.get(), *readableStreamSource, context.contextIdentifier(), weakThis);
     232            transformFrame({ static_cast<const uint8_t*>(value->data()), value->byteLength() }, globalObject, transformer.get(), *readableStreamSource, context.contextIdentifier(), weakThis);
    233233        }, [&](RefPtr<ArrayBufferView>& value) {
    234             transformFrame(static_cast<const uint8_t*>(value->data()), value->byteLength(), globalObject, transformer.get(), *readableStreamSource, context.contextIdentifier(), weakThis);
     234            transformFrame({ static_cast<const uint8_t*>(value->data()), value->byteLength() }, globalObject, transformer.get(), *readableStreamSource, context.contextIdentifier(), weakThis);
    235235        });
    236236        return { };
  • trunk/Source/WebCore/Modules/mediastream/RTCRtpSFrameTransformer.cpp

    r280958 r280972  
    207207}
    208208
    209 RTCRtpSFrameTransformer::TransformResult RTCRtpSFrameTransformer::decryptFrame(const uint8_t* frameData, size_t frameSize)
    210 {
     209RTCRtpSFrameTransformer::TransformResult RTCRtpSFrameTransformer::decryptFrame(Span<const uint8_t> data)
     210{
     211    auto* frameData = data.data();
     212    auto frameSize = data.size();
     213
    211214    Vector<uint8_t> buffer;
    212215    switch (m_compatibilityMode) {
     
    277280}
    278281
    279 RTCRtpSFrameTransformer::TransformResult RTCRtpSFrameTransformer::encryptFrame(const uint8_t* frameData, size_t frameSize)
    280 {
     282RTCRtpSFrameTransformer::TransformResult RTCRtpSFrameTransformer::encryptFrame(Span<const uint8_t> data)
     283{
     284    auto* frameData = data.data();
     285    auto frameSize = data.size();
     286
    281287    static const unsigned MaxHeaderSize = 17;
    282288
     
    338344}
    339345
    340 RTCRtpSFrameTransformer::TransformResult RTCRtpSFrameTransformer::transform(const uint8_t* data, size_t size)
     346RTCRtpSFrameTransformer::TransformResult RTCRtpSFrameTransformer::transform(Span<const uint8_t> data)
    341347{
    342348    if (!m_hasKey)
    343349        return makeUnexpected(ErrorInformation { Error::KeyID,  "Key is not initialized", 0 });
    344350
    345     return m_isEncrypting ? encryptFrame(data, size) : decryptFrame(data, size);
     351    return m_isEncrypting ? encryptFrame(data) : decryptFrame(data);
    346352}
    347353
  • trunk/Source/WebCore/Modules/mediastream/RTCRtpSFrameTransformer.h

    r280958 r280972  
    5757    };
    5858    using TransformResult = Expected<Vector<uint8_t>, ErrorInformation>;
    59     WEBCORE_EXPORT TransformResult transform(const uint8_t*, size_t);
     59    WEBCORE_EXPORT TransformResult transform(Span<const uint8_t>);
    6060
    6161    const Vector<uint8_t>& authenticationKey() const { return m_authenticationKey; }
     
    7272    WEBCORE_EXPORT explicit RTCRtpSFrameTransformer(CompatibilityMode);
    7373
    74     TransformResult decryptFrame(const uint8_t*, size_t);
    75     TransformResult encryptFrame(const uint8_t*, size_t);
     74    TransformResult decryptFrame(Span<const uint8_t>);
     75    TransformResult encryptFrame(Span<const uint8_t>);
    7676
    7777    enum class ShouldUpdateKeys { No, Yes };
  • trunk/Source/WebCore/Modules/mediastream/RTCRtpScriptTransformer.cpp

    r277589 r280972  
    107107
    108108            // If no data, skip the frame since there is nothing to packetize or decode.
    109             if (rtcFrame->data().data)
     109            if (rtcFrame->data().data())
    110110                transformer->m_backend->processTransformedFrame(rtcFrame.get());
    111111            return { };
  • trunk/Source/WebCore/Modules/mediastream/RTCRtpTransformableFrame.h

    r278253 r280972  
    2828
    2929#include <wtf/RefCounted.h>
     30#include <wtf/Span.h>
    3031#include <wtf/Vector.h>
    3132
     
    5152    virtual ~RTCRtpTransformableFrame() = default;
    5253
    53     struct Data {
    54         const uint8_t* data { nullptr };
    55         size_t size { 0 };
    56     };
    57     virtual Data data() const = 0;
    58     virtual void setData(Data) = 0;
     54    virtual Span<const uint8_t> data() const = 0;
     55    virtual void setData(Span<const uint8_t>) = 0;
    5956
    6057    virtual uint64_t timestamp() const = 0;
  • trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpTransformableFrame.cpp

    r278253 r280972  
    5353}
    5454
    55 RTCRtpTransformableFrame::Data LibWebRTCRtpTransformableFrame::data() const
     55Span<const uint8_t> LibWebRTCRtpTransformableFrame::data() const
    5656{
    5757    if (!m_rtcFrame)
    58         return { nullptr, 0 };
     58        return { };
    5959    auto data = m_rtcFrame->GetData();
    6060    return { data.begin(), data.size() };
    6161}
    6262
    63 void LibWebRTCRtpTransformableFrame::setData(Data data)
     63void LibWebRTCRtpTransformableFrame::setData(Span<const uint8_t> data)
    6464{
    6565    if (m_rtcFrame)
    66         m_rtcFrame->SetData({ data.data, data.size });
     66        m_rtcFrame->SetData({ data.data(), data.size() });
    6767}
    6868
  • trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpTransformableFrame.h

    r275830 r280972  
    4848
    4949    // RTCRtpTransformableFrame
    50     Data data() const final;
    51     void setData(Data) final;
     50    Span<const uint8_t> data() const final;
     51    void setData(Span<const uint8_t>) final;
    5252    bool isKeyFrame() const final;
    5353    uint64_t timestamp() const final;
  • trunk/Tools/ChangeLog

    r280969 r280972  
     12021-08-12  Youenn Fablet  <youenn@apple.com>
     2
     3        Adopt span in RTCRtpSFrameTransform
     4        https://bugs.webkit.org/show_bug.cgi?id=229029
     5
     6        Reviewed by Eric Carlson.
     7
     8        * TestWebKitAPI/Tests/WebCore/RTCRtpSFrameTransformerTests.cpp:
     9        (TestWebKitAPI::TEST):
     10
    1112021-08-12  Chris Dumez  <cdumez@apple.com>
    212
  • trunk/Tools/TestWebKitAPI/Tests/WebCore/RTCRtpSFrameTransformerTests.cpp

    r280958 r280972  
    200200    auto frame = Vector<uint8_t>::from(135, 89, 51, 166, 248, 129, 157, 111, 190, 134, 220);
    201201
    202     auto encryptedResult = encryptor->transform(frame.data(), frame.size());
     202    auto encryptedResult = encryptor->transform({ frame.data(), frame.size() });
    203203    EXPECT_TRUE(encryptedResult.has_value());
    204204
    205205    auto encrypted = WTFMove(encryptedResult.value());
    206     auto decryptedResult = decryptor->transform(encrypted.data(), encrypted.size());
     206    auto decryptedResult = decryptor->transform({ encrypted.data(), encrypted.size() });
    207207    EXPECT_TRUE(decryptedResult.has_value());
    208208
     
    220220    auto frame = Vector<uint8_t>::from(135, 89, 51, 166, 248, 129, 157, 111, 190, 134, 220);
    221221
    222     auto encryptedResult = encryptor->transform(frame.data(), frame.size());
     222    auto encryptedResult = encryptor->transform({ frame.data(), frame.size() });
    223223    EXPECT_TRUE(encryptedResult.has_value());
    224224
    225225    auto encrypted = WTFMove(encryptedResult.value());
    226     auto decryptedResult = decryptor->transform(encrypted.data(), encrypted.size());
     226    auto decryptedResult = decryptor->transform({ encrypted.data(), encrypted.size() });
    227227    EXPECT_TRUE(decryptedResult.has_value());
    228228
     
    242242    auto frame = Vector<uint8_t>::from(135, 89, 51, 166, 248, 129, 157, 111, 190, 134, 220, 56);
    243243
    244     auto encryptedResult = encryptor->transform(frame.data(), frame.size());
     244    auto encryptedResult = encryptor->transform({ frame.data(), frame.size() });
    245245    EXPECT_TRUE(encryptedResult.has_value());
    246246
    247247    auto encrypted = WTFMove(encryptedResult.value());
    248     auto decryptedResult = decryptor->transform(encrypted.data(), encrypted.size());
     248    auto decryptedResult = decryptor->transform({ encrypted.data(), encrypted.size() });
    249249    EXPECT_TRUE(decryptedResult.has_value());
    250250
     
    257257
    258258    uint8_t frame1[] = { 135, 89, 51, 166, 248, 129, 157, 111, 190, 134, 220 };
    259     auto result = transformer->transform(frame1, sizeof(frame1));
     259    auto result = transformer->transform({ frame1, sizeof(frame1) });
    260260    EXPECT_TRUE(result.has_value());
    261261
     
    300300
    301301    uint8_t frame1[] = { 8, 164, 189, 18, 61, 117, 132, 43, 117, 169, 42 };
    302     auto result = transformer->transform(frame1, sizeof(frame1));
     302    auto result = transformer->transform({ frame1, sizeof(frame1) });
    303303    EXPECT_TRUE(result.has_value());
    304304    for (size_t cptr = 0; cptr < 256; ++cptr) {
    305         result = transformer->transform(frame1, sizeof(frame1));
     305        result = transformer->transform({ frame1, sizeof(frame1) });
    306306        EXPECT_TRUE(result.has_value());
    307307    }
     
    349349
    350350    uint8_t frame1[] = { 0, 33, 244, 24, 236, 156, 127, 8, 48, 88, 220 };
    351     auto result = transformer->transform(frame1, sizeof(frame1));
     351    auto result = transformer->transform({ frame1, sizeof(frame1) });
    352352    EXPECT_TRUE(result.has_value());
    353353
Note: See TracChangeset for help on using the changeset viewer.