Changeset 203363 in webkit
- Timestamp:
- Jul 18, 2016, 12:23:41 PM (9 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r203362 r203363 1 2016-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 1 41 2016-07-18 Eric Carlson <eric.carlson@apple.com> 2 42 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r203285 r203363 981 981 1AFE11990CBFFCC4003017FA /* JSSQLResultSetRowList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AFE11970CBFFCC4003017FA /* JSSQLResultSetRowList.cpp */; }; 982 982 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 */; }; 983 985 1C010700192594DF008A4201 /* InlineTextBoxStyle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C0106FE192594DF008A4201 /* InlineTextBoxStyle.cpp */; }; 984 986 1C010701192594DF008A4201 /* InlineTextBoxStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C0106FF192594DF008A4201 /* InlineTextBoxStyle.h */; }; … … 8532 8534 1AFE11970CBFFCC4003017FA /* JSSQLResultSetRowList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSQLResultSetRowList.cpp; sourceTree = "<group>"; }; 8533 8535 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>"; }; 8534 8538 1C0106FE192594DF008A4201 /* InlineTextBoxStyle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InlineTextBoxStyle.cpp; sourceTree = "<group>"; }; 8535 8539 1C0106FF192594DF008A4201 /* InlineTextBoxStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineTextBoxStyle.h; sourceTree = "<group>"; }; … … 23519 23523 isa = PBXGroup; 23520 23524 children = ( 23525 1B124D8C1D380B7000ECDFB0 /* MediaSampleAVFObjC.h */, 23526 1B124D8E1D380BB600ECDFB0 /* MediaSampleAVFObjC.mm */, 23521 23527 CDE3A85617F6020400C5BE20 /* AudioTrackPrivateAVFObjC.h */, 23522 23528 CDE3A85517F6020400C5BE20 /* AudioTrackPrivateAVFObjC.mm */, … … 27939 27945 BC3BE9940E9C1C7C00835588 /* RenderScrollbar.h in Headers */, 27940 27946 BC3BE9950E9C1C7C00835588 /* RenderScrollbarPart.h in Headers */, 27947 1B124D8D1D380B7000ECDFB0 /* MediaSampleAVFObjC.h in Headers */, 27941 27948 BC3BE9990E9C1E5D00835588 /* RenderScrollbarTheme.h in Headers */, 27942 27949 458FE40A1589DF0B005609E6 /* RenderSearchField.h in Headers */, … … 29991 29998 A795463E0B5C4C80007B438F /* DragDataMac.mm in Sources */, 29992 29999 A7CFB3D10B7ED10A0070C32D /* DragImage.cpp in Sources */, 30000 1B124D8F1D380BB600ECDFB0 /* MediaSampleAVFObjC.mm in Sources */, 29993 30001 0FDA7C23188330A900C954B5 /* DragImageIOS.mm in Sources */, 29994 30002 A7CFB3D50B7ED1180070C32D /* DragImageMac.mm in Sources */, -
trunk/Source/WebCore/platform/MediaSample.h
r187377 r203363 32 32 #include <wtf/text/AtomicString.h> 33 33 34 typedef struct opaqueCMSampleBuffer *CMSampleBufferRef; 35 34 36 namespace WebCore { 35 37 36 38 class MockSampleBox; 37 typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;38 39 39 40 struct PlatformSample { … … 57 58 virtual MediaTime duration() const = 0; 58 59 virtual AtomicString trackID() const = 0; 60 virtual void setTrackID(const String&) = 0; 59 61 virtual size_t sizeInBytes() const = 0; 60 62 virtual FloatSize presentationSize() const = 0; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm
r203362 r203363 37 37 #import "MediaPlayerPrivateMediaSourceAVFObjC.h" 38 38 #import "MediaSample.h" 39 #import "MediaSampleAVFObjC.h" 39 40 #import "MediaSourcePrivateAVFObjC.h" 40 41 #import "MediaTimeAVFoundation.h" … … 417 418 418 419 namespace WebCore { 419 420 #pragma mark -421 #pragma mark MediaSampleAVFObjC422 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() const473 {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() const483 {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) const492 {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 }541 420 542 421 #pragma mark - -
trunk/Source/WebCore/platform/mock/mediasource/MockSourceBufferPrivate.cpp
r197563 r203363 59 59 MediaTime duration() const override { return m_box.duration(); } 60 60 AtomicString trackID() const override { return m_id; } 61 void setTrackID(const String& id) override { m_id = id; } 61 62 size_t sizeInBytes() const override { return sizeof(m_box); } 62 63 SampleFlags flags() const override;
Note:
See TracChangeset
for help on using the changeset viewer.