Changeset 203363 in webkit


Ignore:
Timestamp:
Jul 18, 2016, 12:23:41 PM (9 years ago)
Author:
commit-queue@webkit.org
Message:

Move MediaSampleAVFObjC into its own file
https://bugs.webkit.org/show_bug.cgi?id=159796
<rdar://problem/27362488>

In preparation for a feature that uses MediaSampleAVFObjC, but does
not need SourceBufferPrivateAVFObjC, it is beneficial to move
MediaSampleAVFObjC to its own file.

Patch by George Ruan <gruan@apple.com> on 2016-07-18
Reviewed by Eric Carlson.

  • WebCore.xcodeproj/project.pbxproj:
  • platform/MediaSample.h: Allow setting trackID to associate

MediaSample id with MediaStreamTrackPrivate id.

  • platform/graphics/avfoundation/MediaSampleAVFObjC.h: Added.
  • platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm: Moved

from MediaSampleAVFObjC
(WebCore::MediaSampleAVFObjC::presentationTime):
(WebCore::MediaSampleAVFObjC::decodeTime):
(WebCore::MediaSampleAVFObjC::duration):
(WebCore::MediaSampleAVFObjC::sizeInBytes):
(WebCore::MediaSampleAVFObjC::platformSample):
(WebCore::CMSampleBufferIsRandomAccess):
(WebCore::MediaSampleAVFObjC::flags):
(WebCore::MediaSampleAVFObjC::presentationSize):
(WebCore::MediaSampleAVFObjC::dump):
(WebCore::MediaSampleAVFObjC::offsetTimestampsBy):
(WebCore::MediaSampleAVFObjC::setTimestamps):

  • platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

Moved MediaSampleAVFObjC to its own file.
(WebCore::MediaSampleAVFObjC::platformSample): Deleted.
(WebCore::CMSampleBufferIsRandomAccess): Deleted.
(WebCore::MediaSampleAVFObjC::flags): Deleted.
(WebCore::MediaSampleAVFObjC::presentationSize): Deleted.
(WebCore::MediaSampleAVFObjC::dump): Deleted.
(WebCore::MediaSampleAVFObjC::offsetTimestampsBy): Deleted.
(WebCore::MediaSampleAVFObjC::setTimestamps): Deleted.

  • platform/mock/mediasource/MockSourceBufferPrivate.cpp:
Location:
trunk/Source/WebCore
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r203362 r203363  
     12016-07-18  George Ruan  <gruan@apple.com>
     2
     3        Move MediaSampleAVFObjC into its own file
     4        https://bugs.webkit.org/show_bug.cgi?id=159796
     5        <rdar://problem/27362488>
     6
     7        In preparation for a feature that uses MediaSampleAVFObjC, but does
     8        not need SourceBufferPrivateAVFObjC, it is beneficial to move
     9        MediaSampleAVFObjC to its own file.
     10
     11        Reviewed by Eric Carlson.
     12
     13        * WebCore.xcodeproj/project.pbxproj:
     14        * platform/MediaSample.h: Allow setting trackID to associate
     15        MediaSample id with MediaStreamTrackPrivate id.
     16        * platform/graphics/avfoundation/MediaSampleAVFObjC.h: Added.
     17        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm: Moved
     18        from MediaSampleAVFObjC
     19        (WebCore::MediaSampleAVFObjC::presentationTime):
     20        (WebCore::MediaSampleAVFObjC::decodeTime):
     21        (WebCore::MediaSampleAVFObjC::duration):
     22        (WebCore::MediaSampleAVFObjC::sizeInBytes):
     23        (WebCore::MediaSampleAVFObjC::platformSample):
     24        (WebCore::CMSampleBufferIsRandomAccess):
     25        (WebCore::MediaSampleAVFObjC::flags):
     26        (WebCore::MediaSampleAVFObjC::presentationSize):
     27        (WebCore::MediaSampleAVFObjC::dump):
     28        (WebCore::MediaSampleAVFObjC::offsetTimestampsBy):
     29        (WebCore::MediaSampleAVFObjC::setTimestamps):
     30        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
     31        Moved MediaSampleAVFObjC to its own file.
     32        (WebCore::MediaSampleAVFObjC::platformSample): Deleted.
     33        (WebCore::CMSampleBufferIsRandomAccess): Deleted.
     34        (WebCore::MediaSampleAVFObjC::flags): Deleted.
     35        (WebCore::MediaSampleAVFObjC::presentationSize): Deleted.
     36        (WebCore::MediaSampleAVFObjC::dump): Deleted.
     37        (WebCore::MediaSampleAVFObjC::offsetTimestampsBy): Deleted.
     38        (WebCore::MediaSampleAVFObjC::setTimestamps): Deleted.
     39        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
     40
    1412016-07-18  Eric Carlson  <eric.carlson@apple.com>
    242
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r203285 r203363  
    981981                1AFE11990CBFFCC4003017FA /* JSSQLResultSetRowList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AFE11970CBFFCC4003017FA /* JSSQLResultSetRowList.cpp */; };
    982982                1AFE119A0CBFFCC4003017FA /* JSSQLResultSetRowList.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AFE11980CBFFCC4003017FA /* JSSQLResultSetRowList.h */; };
     983                1B124D8D1D380B7000ECDFB0 /* MediaSampleAVFObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B124D8C1D380B7000ECDFB0 /* MediaSampleAVFObjC.h */; };
     984                1B124D8F1D380BB600ECDFB0 /* MediaSampleAVFObjC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1B124D8E1D380BB600ECDFB0 /* MediaSampleAVFObjC.mm */; };
    983985                1C010700192594DF008A4201 /* InlineTextBoxStyle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C0106FE192594DF008A4201 /* InlineTextBoxStyle.cpp */; };
    984986                1C010701192594DF008A4201 /* InlineTextBoxStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C0106FF192594DF008A4201 /* InlineTextBoxStyle.h */; };
     
    85328534                1AFE11970CBFFCC4003017FA /* JSSQLResultSetRowList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSQLResultSetRowList.cpp; sourceTree = "<group>"; };
    85338535                1AFE11980CBFFCC4003017FA /* JSSQLResultSetRowList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSQLResultSetRowList.h; sourceTree = "<group>"; };
     8536                1B124D8C1D380B7000ECDFB0 /* MediaSampleAVFObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MediaSampleAVFObjC.h; path = ../MediaSampleAVFObjC.h; sourceTree = "<group>"; };
     8537                1B124D8E1D380BB600ECDFB0 /* MediaSampleAVFObjC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MediaSampleAVFObjC.mm; sourceTree = "<group>"; };
    85348538                1C0106FE192594DF008A4201 /* InlineTextBoxStyle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InlineTextBoxStyle.cpp; sourceTree = "<group>"; };
    85358539                1C0106FF192594DF008A4201 /* InlineTextBoxStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineTextBoxStyle.h; sourceTree = "<group>"; };
     
    2351923523                        isa = PBXGroup;
    2352023524                        children = (
     23525                                1B124D8C1D380B7000ECDFB0 /* MediaSampleAVFObjC.h */,
     23526                                1B124D8E1D380BB600ECDFB0 /* MediaSampleAVFObjC.mm */,
    2352123527                                CDE3A85617F6020400C5BE20 /* AudioTrackPrivateAVFObjC.h */,
    2352223528                                CDE3A85517F6020400C5BE20 /* AudioTrackPrivateAVFObjC.mm */,
     
    2793927945                                BC3BE9940E9C1C7C00835588 /* RenderScrollbar.h in Headers */,
    2794027946                                BC3BE9950E9C1C7C00835588 /* RenderScrollbarPart.h in Headers */,
     27947                                1B124D8D1D380B7000ECDFB0 /* MediaSampleAVFObjC.h in Headers */,
    2794127948                                BC3BE9990E9C1E5D00835588 /* RenderScrollbarTheme.h in Headers */,
    2794227949                                458FE40A1589DF0B005609E6 /* RenderSearchField.h in Headers */,
     
    2999129998                                A795463E0B5C4C80007B438F /* DragDataMac.mm in Sources */,
    2999229999                                A7CFB3D10B7ED10A0070C32D /* DragImage.cpp in Sources */,
     30000                                1B124D8F1D380BB600ECDFB0 /* MediaSampleAVFObjC.mm in Sources */,
    2999330001                                0FDA7C23188330A900C954B5 /* DragImageIOS.mm in Sources */,
    2999430002                                A7CFB3D50B7ED1180070C32D /* DragImageMac.mm in Sources */,
  • trunk/Source/WebCore/platform/MediaSample.h

    r187377 r203363  
    3232#include <wtf/text/AtomicString.h>
    3333
     34typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
     35
    3436namespace WebCore {
    3537
    3638class MockSampleBox;
    37 typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
    3839
    3940struct PlatformSample {
     
    5758    virtual MediaTime duration() const = 0;
    5859    virtual AtomicString trackID() const = 0;
     60    virtual void setTrackID(const String&) = 0;
    5961    virtual size_t sizeInBytes() const = 0;
    6062    virtual FloatSize presentationSize() const = 0;
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm

    r203362 r203363  
    3737#import "MediaPlayerPrivateMediaSourceAVFObjC.h"
    3838#import "MediaSample.h"
     39#import "MediaSampleAVFObjC.h"
    3940#import "MediaSourcePrivateAVFObjC.h"
    4041#import "MediaTimeAVFoundation.h"
     
    417418
    418419namespace WebCore {
    419 
    420 #pragma mark -
    421 #pragma mark MediaSampleAVFObjC
    422 
    423 class MediaSampleAVFObjC final : public MediaSample {
    424 public:
    425     static RefPtr<MediaSampleAVFObjC> create(CMSampleBufferRef sample, int trackID) { return adoptRef(new MediaSampleAVFObjC(sample, trackID)); }
    426     virtual ~MediaSampleAVFObjC() { }
    427 
    428 private:
    429     MediaSampleAVFObjC(CMSampleBufferRef sample, int trackID)
    430         : m_sample(sample)
    431         , m_id(String::format("%d", trackID))
    432     {
    433     }
    434 
    435     MediaTime presentationTime() const override { return toMediaTime(CMSampleBufferGetPresentationTimeStamp(m_sample.get())); }
    436     MediaTime decodeTime() const override { return toMediaTime(CMSampleBufferGetDecodeTimeStamp(m_sample.get())); }
    437     MediaTime duration() const override { return toMediaTime(CMSampleBufferGetDuration(m_sample.get())); }
    438     AtomicString trackID() const override { return m_id; }
    439     size_t sizeInBytes() const override { return CMSampleBufferGetTotalSampleSize(m_sample.get()); }
    440     FloatSize presentationSize() const override;
    441 
    442     SampleFlags flags() const override;
    443     PlatformSample platformSample() override;
    444     void dump(PrintStream&) const override;
    445     void offsetTimestampsBy(const MediaTime&) override;
    446     void setTimestamps(const MediaTime&, const MediaTime&) override;
    447 
    448     RetainPtr<CMSampleBufferRef> m_sample;
    449     AtomicString m_id;
    450 };
    451 
    452 PlatformSample MediaSampleAVFObjC::platformSample()
    453 {
    454     PlatformSample sample = { PlatformSample::CMSampleBufferType, { .cmSampleBuffer = m_sample.get() } };
    455     return sample;
    456 }
    457 
    458 static bool CMSampleBufferIsRandomAccess(CMSampleBufferRef sample)
    459 {
    460     CFArrayRef attachments = CMSampleBufferGetSampleAttachmentsArray(sample, false);
    461     if (!attachments)
    462         return true;
    463 
    464     for (CFIndex i = 0, count = CFArrayGetCount(attachments); i < count; ++i) {
    465         CFDictionaryRef attachmentDict = (CFDictionaryRef)CFArrayGetValueAtIndex(attachments, i);
    466         if (CFDictionaryContainsKey(attachmentDict, kCMSampleAttachmentKey_NotSync))
    467             return false;
    468     }
    469     return true;
    470 }
    471 
    472 MediaSample::SampleFlags MediaSampleAVFObjC::flags() const
    473 {
    474     int returnValue = MediaSample::None;
    475 
    476     if (CMSampleBufferIsRandomAccess(m_sample.get()))
    477         returnValue |= MediaSample::IsSync;
    478 
    479     return SampleFlags(returnValue);
    480 }
    481 
    482 FloatSize MediaSampleAVFObjC::presentationSize() const
    483 {
    484     CMFormatDescriptionRef formatDescription = CMSampleBufferGetFormatDescription(m_sample.get());
    485     if (CMFormatDescriptionGetMediaType(formatDescription) != kCMMediaType_Video)
    486         return FloatSize();
    487 
    488     return FloatSize(CMVideoFormatDescriptionGetPresentationDimensions(formatDescription, true, true));
    489 }
    490 
    491 void MediaSampleAVFObjC::dump(PrintStream& out) const
    492 {
    493     out.print("{PTS(", presentationTime(), "), DTS(", decodeTime(), "), duration(", duration(), "), flags(", (int)flags(), "), presentationSize(", presentationSize().width(), "x", presentationSize().height(), ")}");
    494 }
    495 
    496 void MediaSampleAVFObjC::offsetTimestampsBy(const MediaTime& offset)
    497 {
    498     CMItemCount itemCount = 0;
    499     if (noErr != CMSampleBufferGetSampleTimingInfoArray(m_sample.get(), 0, nullptr, &itemCount))
    500         return;
    501 
    502     Vector<CMSampleTimingInfo> timingInfoArray;
    503     timingInfoArray.grow(itemCount);
    504     if (noErr != CMSampleBufferGetSampleTimingInfoArray(m_sample.get(), itemCount, timingInfoArray.data(), nullptr))
    505         return;
    506 
    507     for (auto& timing : timingInfoArray) {
    508         timing.presentationTimeStamp = toCMTime(toMediaTime(timing.presentationTimeStamp) + offset);
    509         timing.decodeTimeStamp = toCMTime(toMediaTime(timing.decodeTimeStamp) + offset);
    510     }
    511 
    512     CMSampleBufferRef newSample;
    513     if (noErr != CMSampleBufferCreateCopyWithNewTiming(kCFAllocatorDefault, m_sample.get(), itemCount, timingInfoArray.data(), &newSample))
    514         return;
    515 
    516     m_sample = adoptCF(newSample);
    517 }
    518 
    519 void MediaSampleAVFObjC::setTimestamps(const WTF::MediaTime &presentationTimestamp, const WTF::MediaTime &decodeTimestamp)
    520 {
    521     CMItemCount itemCount = 0;
    522     if (noErr != CMSampleBufferGetSampleTimingInfoArray(m_sample.get(), 0, nullptr, &itemCount))
    523         return;
    524 
    525     Vector<CMSampleTimingInfo> timingInfoArray;
    526     timingInfoArray.grow(itemCount);
    527     if (noErr != CMSampleBufferGetSampleTimingInfoArray(m_sample.get(), itemCount, timingInfoArray.data(), nullptr))
    528         return;
    529 
    530     for (auto& timing : timingInfoArray) {
    531         timing.presentationTimeStamp = toCMTime(presentationTimestamp);
    532         timing.decodeTimeStamp = toCMTime(decodeTimestamp);
    533     }
    534 
    535     CMSampleBufferRef newSample;
    536     if (noErr != CMSampleBufferCreateCopyWithNewTiming(kCFAllocatorDefault, m_sample.get(), itemCount, timingInfoArray.data(), &newSample))
    537         return;
    538 
    539     m_sample = adoptCF(newSample);
    540 }
    541420
    542421#pragma mark -
  • trunk/Source/WebCore/platform/mock/mediasource/MockSourceBufferPrivate.cpp

    r197563 r203363  
    5959    MediaTime duration() const override { return m_box.duration(); }
    6060    AtomicString trackID() const override { return m_id; }
     61    void setTrackID(const String& id) override { m_id = id; }
    6162    size_t sizeInBytes() const override { return sizeof(m_box); }
    6263    SampleFlags flags() const override;
Note: See TracChangeset for help on using the changeset viewer.