Diff
Modified: trunk/Source/WebCore/ChangeLog (203362 => 203363)
--- trunk/Source/WebCore/ChangeLog 2016-07-18 19:18:23 UTC (rev 203362)
+++ trunk/Source/WebCore/ChangeLog 2016-07-18 19:23:41 UTC (rev 203363)
@@ -1,3 +1,43 @@
+2016-07-18 George Ruan <[email protected]>
+
+ 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.
+
+ 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:
+
2016-07-18 Eric Carlson <[email protected]>
[MSE][Mac] Pass AVSampleBufferDisplayLayer HDCP status to a newly created key session
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (203362 => 203363)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2016-07-18 19:18:23 UTC (rev 203362)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2016-07-18 19:23:41 UTC (rev 203363)
@@ -980,6 +980,8 @@
1AF8E1C3125673E000230FF7 /* ProxyServerCFNet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AF8E1C1125673E000230FF7 /* ProxyServerCFNet.cpp */; };
1AFE11990CBFFCC4003017FA /* JSSQLResultSetRowList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AFE11970CBFFCC4003017FA /* JSSQLResultSetRowList.cpp */; };
1AFE119A0CBFFCC4003017FA /* JSSQLResultSetRowList.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AFE11980CBFFCC4003017FA /* JSSQLResultSetRowList.h */; };
+ 1B124D8D1D380B7000ECDFB0 /* MediaSampleAVFObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B124D8C1D380B7000ECDFB0 /* MediaSampleAVFObjC.h */; };
+ 1B124D8F1D380BB600ECDFB0 /* MediaSampleAVFObjC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1B124D8E1D380BB600ECDFB0 /* MediaSampleAVFObjC.mm */; };
1C010700192594DF008A4201 /* InlineTextBoxStyle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C0106FE192594DF008A4201 /* InlineTextBoxStyle.cpp */; };
1C010701192594DF008A4201 /* InlineTextBoxStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C0106FF192594DF008A4201 /* InlineTextBoxStyle.h */; };
1C0939EA1A13E12900B788E5 /* CachedSVGFont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C0939E81A13E12900B788E5 /* CachedSVGFont.cpp */; };
@@ -8531,6 +8533,8 @@
1AF8E1C1125673E000230FF7 /* ProxyServerCFNet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProxyServerCFNet.cpp; sourceTree = "<group>"; };
1AFE11970CBFFCC4003017FA /* JSSQLResultSetRowList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSQLResultSetRowList.cpp; sourceTree = "<group>"; };
1AFE11980CBFFCC4003017FA /* JSSQLResultSetRowList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSQLResultSetRowList.h; sourceTree = "<group>"; };
+ 1B124D8C1D380B7000ECDFB0 /* MediaSampleAVFObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MediaSampleAVFObjC.h; path = ../MediaSampleAVFObjC.h; sourceTree = "<group>"; };
+ 1B124D8E1D380BB600ECDFB0 /* MediaSampleAVFObjC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MediaSampleAVFObjC.mm; sourceTree = "<group>"; };
1C0106FE192594DF008A4201 /* InlineTextBoxStyle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InlineTextBoxStyle.cpp; sourceTree = "<group>"; };
1C0106FF192594DF008A4201 /* InlineTextBoxStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineTextBoxStyle.h; sourceTree = "<group>"; };
1C0939E81A13E12900B788E5 /* CachedSVGFont.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachedSVGFont.cpp; sourceTree = "<group>"; };
@@ -23518,6 +23522,8 @@
DF9AFD6F13FC31B00015FEB7 /* objc */ = {
isa = PBXGroup;
children = (
+ 1B124D8C1D380B7000ECDFB0 /* MediaSampleAVFObjC.h */,
+ 1B124D8E1D380BB600ECDFB0 /* MediaSampleAVFObjC.mm */,
CDE3A85617F6020400C5BE20 /* AudioTrackPrivateAVFObjC.h */,
CDE3A85517F6020400C5BE20 /* AudioTrackPrivateAVFObjC.mm */,
CD54A760180F9F7000B076C9 /* AudioTrackPrivateMediaSourceAVFObjC.cpp */,
@@ -27938,6 +27944,7 @@
1479FAF4109AE37500DED655 /* RenderRubyText.h in Headers */,
BC3BE9940E9C1C7C00835588 /* RenderScrollbar.h in Headers */,
BC3BE9950E9C1C7C00835588 /* RenderScrollbarPart.h in Headers */,
+ 1B124D8D1D380B7000ECDFB0 /* MediaSampleAVFObjC.h in Headers */,
BC3BE9990E9C1E5D00835588 /* RenderScrollbarTheme.h in Headers */,
458FE40A1589DF0B005609E6 /* RenderSearchField.h in Headers */,
57EF5E601D20C83900171E60 /* TextCodecReplacement.h in Headers */,
@@ -29990,6 +29997,7 @@
A79546430B5C4CB4007B438F /* DragData.cpp in Sources */,
A795463E0B5C4C80007B438F /* DragDataMac.mm in Sources */,
A7CFB3D10B7ED10A0070C32D /* DragImage.cpp in Sources */,
+ 1B124D8F1D380BB600ECDFB0 /* MediaSampleAVFObjC.mm in Sources */,
0FDA7C23188330A900C954B5 /* DragImageIOS.mm in Sources */,
A7CFB3D50B7ED1180070C32D /* DragImageMac.mm in Sources */,
FD6ED2C7136B8E66003CF072 /* DynamicsCompressor.cpp in Sources */,
Modified: trunk/Source/WebCore/platform/MediaSample.h (203362 => 203363)
--- trunk/Source/WebCore/platform/MediaSample.h 2016-07-18 19:18:23 UTC (rev 203362)
+++ trunk/Source/WebCore/platform/MediaSample.h 2016-07-18 19:23:41 UTC (rev 203363)
@@ -31,10 +31,11 @@
#include <wtf/RefCounted.h>
#include <wtf/text/AtomicString.h>
+typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
+
namespace WebCore {
class MockSampleBox;
-typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
struct PlatformSample {
enum {
@@ -56,6 +57,7 @@
virtual MediaTime decodeTime() const = 0;
virtual MediaTime duration() const = 0;
virtual AtomicString trackID() const = 0;
+ virtual void setTrackID(const String&) = 0;
virtual size_t sizeInBytes() const = 0;
virtual FloatSize presentationSize() const = 0;
virtual void offsetTimestampsBy(const MediaTime&) = 0;
Added: trunk/Source/WebCore/platform/graphics/avfoundation/MediaSampleAVFObjC.h (0 => 203363)
--- trunk/Source/WebCore/platform/graphics/avfoundation/MediaSampleAVFObjC.h (rev 0)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/MediaSampleAVFObjC.h 2016-07-18 19:23:41 UTC (rev 203363)
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "MediaSample.h"
+#include "MediaTimeAVFoundation.h"
+
+namespace WebCore {
+
+class MediaSampleAVFObjC final : public MediaSample {
+public:
+ static RefPtr<MediaSampleAVFObjC> create(CMSampleBufferRef sample, int trackID) { return adoptRef(new MediaSampleAVFObjC(sample, trackID)); }
+ static RefPtr<MediaSampleAVFObjC> create(CMSampleBufferRef sample) { return adoptRef(new MediaSampleAVFObjC(sample)); }
+
+private:
+ MediaSampleAVFObjC(CMSampleBufferRef sample)
+ : m_sample(sample)
+ {
+ }
+ MediaSampleAVFObjC(CMSampleBufferRef sample, int trackID)
+ : m_sample(sample)
+ , m_id(String::format("%d", trackID))
+ {
+ }
+ virtual ~MediaSampleAVFObjC() { }
+
+ MediaTime presentationTime() const override;
+ MediaTime decodeTime() const override;
+ MediaTime duration() const override;
+
+ AtomicString trackID() const override { return m_id; }
+ void setTrackID(const String& id) override { m_id = id; }
+
+ size_t sizeInBytes() const override;
+ FloatSize presentationSize() const override;
+
+ SampleFlags flags() const override;
+ PlatformSample platformSample() override;
+ void dump(PrintStream&) const override;
+ void offsetTimestampsBy(const MediaTime&) override;
+ void setTimestamps(const MediaTime&, const MediaTime&) override;
+
+ RetainPtr<CMSampleBufferRef> m_sample;
+ AtomicString m_id;
+};
+
+}
Added: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm (0 => 203363)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm (rev 0)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm 2016-07-18 19:23:41 UTC (rev 203363)
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "MediaSampleAVFObjC.h"
+
+#import <wtf/PrintStream.h>
+
+#import "CoreMediaSoftLink.h"
+
+namespace WebCore {
+
+MediaTime MediaSampleAVFObjC::presentationTime() const
+{
+ return toMediaTime(CMSampleBufferGetPresentationTimeStamp(m_sample.get()));
+}
+
+MediaTime MediaSampleAVFObjC::decodeTime() const
+{
+ return toMediaTime(CMSampleBufferGetDecodeTimeStamp(m_sample.get()));
+}
+
+MediaTime MediaSampleAVFObjC::duration() const
+{
+ return toMediaTime(CMSampleBufferGetDuration(m_sample.get()));
+}
+
+size_t MediaSampleAVFObjC::sizeInBytes() const
+{
+ return CMSampleBufferGetTotalSampleSize(m_sample.get());
+}
+
+PlatformSample MediaSampleAVFObjC::platformSample()
+{
+ PlatformSample sample = { PlatformSample::CMSampleBufferType, { .cmSampleBuffer = m_sample.get() } };
+ return sample;
+}
+
+static bool CMSampleBufferIsRandomAccess(CMSampleBufferRef sample)
+{
+ CFArrayRef attachments = CMSampleBufferGetSampleAttachmentsArray(sample, false);
+ if (!attachments)
+ return true;
+
+ for (CFIndex i = 0, count = CFArrayGetCount(attachments); i < count; ++i) {
+ CFDictionaryRef attachmentDict = (CFDictionaryRef)CFArrayGetValueAtIndex(attachments, i);
+ if (CFDictionaryContainsKey(attachmentDict, kCMSampleAttachmentKey_NotSync))
+ return false;
+ }
+ return true;
+}
+
+MediaSample::SampleFlags MediaSampleAVFObjC::flags() const
+{
+ int returnValue = MediaSample::None;
+
+ if (CMSampleBufferIsRandomAccess(m_sample.get()))
+ returnValue |= MediaSample::IsSync;
+
+ return SampleFlags(returnValue);
+}
+
+FloatSize MediaSampleAVFObjC::presentationSize() const
+{
+ CMFormatDescriptionRef formatDescription = CMSampleBufferGetFormatDescription(m_sample.get());
+ if (CMFormatDescriptionGetMediaType(formatDescription) != kCMMediaType_Video)
+ return FloatSize();
+
+ return FloatSize(CMVideoFormatDescriptionGetPresentationDimensions(formatDescription, true, true));
+}
+
+void MediaSampleAVFObjC::dump(PrintStream& out) const
+{
+ out.print("{PTS(", presentationTime(), "), DTS(", decodeTime(), "), duration(", duration(), "), flags(", (int)flags(), "), presentationSize(", presentationSize().width(), "x", presentationSize().height(), ")}");
+}
+
+void MediaSampleAVFObjC::offsetTimestampsBy(const MediaTime& offset)
+{
+ CMItemCount itemCount = 0;
+ if (noErr != CMSampleBufferGetSampleTimingInfoArray(m_sample.get(), 0, nullptr, &itemCount))
+ return;
+
+ Vector<CMSampleTimingInfo> timingInfoArray;
+ timingInfoArray.grow(itemCount);
+ if (noErr != CMSampleBufferGetSampleTimingInfoArray(m_sample.get(), itemCount, timingInfoArray.data(), nullptr))
+ return;
+
+ for (auto& timing : timingInfoArray) {
+ timing.presentationTimeStamp = toCMTime(toMediaTime(timing.presentationTimeStamp) + offset);
+ timing.decodeTimeStamp = toCMTime(toMediaTime(timing.decodeTimeStamp) + offset);
+ }
+
+ CMSampleBufferRef newSample;
+ if (noErr != CMSampleBufferCreateCopyWithNewTiming(kCFAllocatorDefault, m_sample.get(), itemCount, timingInfoArray.data(), &newSample))
+ return;
+
+ m_sample = adoptCF(newSample);
+}
+
+void MediaSampleAVFObjC::setTimestamps(const WTF::MediaTime &presentationTimestamp, const WTF::MediaTime &decodeTimestamp)
+{
+ CMItemCount itemCount = 0;
+ if (noErr != CMSampleBufferGetSampleTimingInfoArray(m_sample.get(), 0, nullptr, &itemCount))
+ return;
+
+ Vector<CMSampleTimingInfo> timingInfoArray;
+ timingInfoArray.grow(itemCount);
+ if (noErr != CMSampleBufferGetSampleTimingInfoArray(m_sample.get(), itemCount, timingInfoArray.data(), nullptr))
+ return;
+
+ for (auto& timing : timingInfoArray) {
+ timing.presentationTimeStamp = toCMTime(presentationTimestamp);
+ timing.decodeTimeStamp = toCMTime(decodeTimestamp);
+ }
+
+ CMSampleBufferRef newSample;
+ if (noErr != CMSampleBufferCreateCopyWithNewTiming(kCFAllocatorDefault, m_sample.get(), itemCount, timingInfoArray.data(), &newSample))
+ return;
+
+ m_sample = adoptCF(newSample);
+}
+
+}
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm (203362 => 203363)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm 2016-07-18 19:18:23 UTC (rev 203362)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm 2016-07-18 19:23:41 UTC (rev 203363)
@@ -36,6 +36,7 @@
#import "MediaDescription.h"
#import "MediaPlayerPrivateMediaSourceAVFObjC.h"
#import "MediaSample.h"
+#import "MediaSampleAVFObjC.h"
#import "MediaSourcePrivateAVFObjC.h"
#import "MediaTimeAVFoundation.h"
#import "NotImplemented.h"
@@ -418,128 +419,6 @@
namespace WebCore {
#pragma mark -
-#pragma mark MediaSampleAVFObjC
-
-class MediaSampleAVFObjC final : public MediaSample {
-public:
- static RefPtr<MediaSampleAVFObjC> create(CMSampleBufferRef sample, int trackID) { return adoptRef(new MediaSampleAVFObjC(sample, trackID)); }
- virtual ~MediaSampleAVFObjC() { }
-
-private:
- MediaSampleAVFObjC(CMSampleBufferRef sample, int trackID)
- : m_sample(sample)
- , m_id(String::format("%d", trackID))
- {
- }
-
- MediaTime presentationTime() const override { return toMediaTime(CMSampleBufferGetPresentationTimeStamp(m_sample.get())); }
- MediaTime decodeTime() const override { return toMediaTime(CMSampleBufferGetDecodeTimeStamp(m_sample.get())); }
- MediaTime duration() const override { return toMediaTime(CMSampleBufferGetDuration(m_sample.get())); }
- AtomicString trackID() const override { return m_id; }
- size_t sizeInBytes() const override { return CMSampleBufferGetTotalSampleSize(m_sample.get()); }
- FloatSize presentationSize() const override;
-
- SampleFlags flags() const override;
- PlatformSample platformSample() override;
- void dump(PrintStream&) const override;
- void offsetTimestampsBy(const MediaTime&) override;
- void setTimestamps(const MediaTime&, const MediaTime&) override;
-
- RetainPtr<CMSampleBufferRef> m_sample;
- AtomicString m_id;
-};
-
-PlatformSample MediaSampleAVFObjC::platformSample()
-{
- PlatformSample sample = { PlatformSample::CMSampleBufferType, { .cmSampleBuffer = m_sample.get() } };
- return sample;
-}
-
-static bool CMSampleBufferIsRandomAccess(CMSampleBufferRef sample)
-{
- CFArrayRef attachments = CMSampleBufferGetSampleAttachmentsArray(sample, false);
- if (!attachments)
- return true;
-
- for (CFIndex i = 0, count = CFArrayGetCount(attachments); i < count; ++i) {
- CFDictionaryRef attachmentDict = (CFDictionaryRef)CFArrayGetValueAtIndex(attachments, i);
- if (CFDictionaryContainsKey(attachmentDict, kCMSampleAttachmentKey_NotSync))
- return false;
- }
- return true;
-}
-
-MediaSample::SampleFlags MediaSampleAVFObjC::flags() const
-{
- int returnValue = MediaSample::None;
-
- if (CMSampleBufferIsRandomAccess(m_sample.get()))
- returnValue |= MediaSample::IsSync;
-
- return SampleFlags(returnValue);
-}
-
-FloatSize MediaSampleAVFObjC::presentationSize() const
-{
- CMFormatDescriptionRef formatDescription = CMSampleBufferGetFormatDescription(m_sample.get());
- if (CMFormatDescriptionGetMediaType(formatDescription) != kCMMediaType_Video)
- return FloatSize();
-
- return FloatSize(CMVideoFormatDescriptionGetPresentationDimensions(formatDescription, true, true));
-}
-
-void MediaSampleAVFObjC::dump(PrintStream& out) const
-{
- out.print("{PTS(", presentationTime(), "), DTS(", decodeTime(), "), duration(", duration(), "), flags(", (int)flags(), "), presentationSize(", presentationSize().width(), "x", presentationSize().height(), ")}");
-}
-
-void MediaSampleAVFObjC::offsetTimestampsBy(const MediaTime& offset)
-{
- CMItemCount itemCount = 0;
- if (noErr != CMSampleBufferGetSampleTimingInfoArray(m_sample.get(), 0, nullptr, &itemCount))
- return;
-
- Vector<CMSampleTimingInfo> timingInfoArray;
- timingInfoArray.grow(itemCount);
- if (noErr != CMSampleBufferGetSampleTimingInfoArray(m_sample.get(), itemCount, timingInfoArray.data(), nullptr))
- return;
-
- for (auto& timing : timingInfoArray) {
- timing.presentationTimeStamp = toCMTime(toMediaTime(timing.presentationTimeStamp) + offset);
- timing.decodeTimeStamp = toCMTime(toMediaTime(timing.decodeTimeStamp) + offset);
- }
-
- CMSampleBufferRef newSample;
- if (noErr != CMSampleBufferCreateCopyWithNewTiming(kCFAllocatorDefault, m_sample.get(), itemCount, timingInfoArray.data(), &newSample))
- return;
-
- m_sample = adoptCF(newSample);
-}
-
-void MediaSampleAVFObjC::setTimestamps(const WTF::MediaTime &presentationTimestamp, const WTF::MediaTime &decodeTimestamp)
-{
- CMItemCount itemCount = 0;
- if (noErr != CMSampleBufferGetSampleTimingInfoArray(m_sample.get(), 0, nullptr, &itemCount))
- return;
-
- Vector<CMSampleTimingInfo> timingInfoArray;
- timingInfoArray.grow(itemCount);
- if (noErr != CMSampleBufferGetSampleTimingInfoArray(m_sample.get(), itemCount, timingInfoArray.data(), nullptr))
- return;
-
- for (auto& timing : timingInfoArray) {
- timing.presentationTimeStamp = toCMTime(presentationTimestamp);
- timing.decodeTimeStamp = toCMTime(decodeTimestamp);
- }
-
- CMSampleBufferRef newSample;
- if (noErr != CMSampleBufferCreateCopyWithNewTiming(kCFAllocatorDefault, m_sample.get(), itemCount, timingInfoArray.data(), &newSample))
- return;
-
- m_sample = adoptCF(newSample);
-}
-
-#pragma mark -
#pragma mark MediaDescriptionAVFObjC
class MediaDescriptionAVFObjC final : public MediaDescription {
Modified: trunk/Source/WebCore/platform/mock/mediasource/MockSourceBufferPrivate.cpp (203362 => 203363)
--- trunk/Source/WebCore/platform/mock/mediasource/MockSourceBufferPrivate.cpp 2016-07-18 19:18:23 UTC (rev 203362)
+++ trunk/Source/WebCore/platform/mock/mediasource/MockSourceBufferPrivate.cpp 2016-07-18 19:23:41 UTC (rev 203363)
@@ -58,6 +58,7 @@
MediaTime decodeTime() const override { return m_box.decodeTimestamp(); }
MediaTime duration() const override { return m_box.duration(); }
AtomicString trackID() const override { return m_id; }
+ void setTrackID(const String& id) override { m_id = id; }
size_t sizeInBytes() const override { return sizeof(m_box); }
SampleFlags flags() const override;
PlatformSample platformSample() override;