[webkit-reviews] review granted: [Bug 123378] [MSE][Mac] Add a new MSE-compatible MediaPlayerPrivate implementation, MediaPlayerPrivateMediaSourceAVFObjC : [Attachment 218240] Patch

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue Dec 3 08:22:08 PST 2013


Eric Carlson <eric.carlson at apple.com> has granted Jer Noble
<jer.noble at apple.com>'s request for review:
Bug 123378: [MSE][Mac] Add a new MSE-compatible MediaPlayerPrivate
implementation, MediaPlayerPrivateMediaSourceAVFObjC
https://bugs.webkit.org/show_bug.cgi?id=123378

Attachment 218240: Patch
https://bugs.webkit.org/attachment.cgi?id=218240&action=review

------- Additional Comments from Eric Carlson <eric.carlson at apple.com>
View in context: https://bugs.webkit.org/attachment.cgi?id=218240&action=review


>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:28
> +

#if ENABLE(MEDIA_SOURCE) && USE(AVFOUNDATION)

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:137
> +void MediaPlayerPrivateMediaSourceAVFObjC::load(const String&)
> +{
> +    ASSERT_NOT_REACHED();
> +}
> +
> +void MediaPlayerPrivateMediaSourceAVFObjC::load(const String& url,
PassRefPtr<HTMLMediaSource> source)

Nit: can you change load() take a class/union rather than adding another
version (we will need another variant for MediaStream soon enough)?

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:149
> +

Nit: unneeded blank line.

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:155
> +

Ditto.

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:208
> +IntSize MediaPlayerPrivateMediaSourceAVFObjC::naturalSize() const
> +{
> +    return IntSize();
> +}

Is this correct - shouldn't it return the intrinsic size of the track(s)?

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:309
> +    // No-op

Nit: missing period.

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:314
> +    // FIXME: paint()

Nit: bug number?

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:319
> +    // FIXME: implement paintCurrentFrameInContext()

Ditto.

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:335
> +    if (supportsAcceleratedRendering() &&
m_player->mediaPlayerClient()->mediaPlayerRenderingCanBeAccelerated(m_player))

Nit: is there really any reason to call supportsAcceleratedRendering()?

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:349
> +    // No-op

Nit: missing period.

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:360
> +    // FIXME: implement languageOfPrimaryAudioTrack()

Nit: bug number?

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:401
> +    MediaPlayer::NetworkState oldNetworkState = m_networkState;
> +    MediaPlayer::ReadyState oldReadyState = m_readyState;
> +
> +    UNUSED_PARAM(oldNetworkState);
> +    UNUSED_PARAM(oldReadyState);

???

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:429
> +    m_sampleBufferDisplayLayer = displayLayer;
> +    [m_sampleBufferDisplayLayer setControlTimebase:m_clock->timebase()];
> +   
m_player->mediaPlayerClient()->mediaPlayerRenderingModeChanged(m_player);

Is it legal to pass a NULL displayLayer? If not, it is probably worth adding an
ASSERT.

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourc
eAVFObjC.mm:432
> +    // FIXME: move this somewhere appropriate:
> +    m_player->firstVideoFrameAvailable();

"appropriate:" ?

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
49
> +class MediaSourcePrivateAVFObjC : public MediaSourcePrivate {

Can this be marked FINAL?

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
51
> +    static RefPtr<MediaSourcePrivateAVFObjC>
create(MediaPlayerPrivateMediaSourceAVFObjC*);

Can this return a std::unique_ptr<>?

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm
:104
> +    // FIXME: implement markEndOfStream()

Nit: bug number?

>
Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm
:110
> +    // FIXME: implement unmarkEndOfStream()

Ditto.

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h
:57
> +class SourceBufferPrivateAVFObjC : public SourceBufferPrivate {

Can this be marked FINAL?

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h
:107
> +    bool m_parsingSucceeded;
> +    int m_enabledVideoTrackID;
> +
> +    Vector<RefPtr<VideoTrackPrivate>> m_videoTracks;
> +    Vector<RefPtr<AudioTrackPrivate>> m_audioTracks;

Nit: ordering these by size may make the object slightly smaller.

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:246
> +class MediaDescriptionAVFObjC : public MediaDescription {

FINAL?

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:265
> +	       FourCharCode codec =
CMFormatDescriptionGetMediaSubType(description);

Wow, FourCharCode!

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:266
> +	       m_codec = AtomicString(reinterpret_cast<LChar*>(&codec), 4);

What will happen on a Big Endian machine ;-O

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:301
> +SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC()
> +{
> +    if (m_displayLayer) {
> +	   m_parent->player()->removeDisplayLayer(m_displayLayer.get());
> +	   [m_displayLayer flushAndRemoveImage];
> +	   [m_displayLayer stopRequestingMediaData];
> +	   m_displayLayer = nullptr;
> +    }
> +}

Is there any chance the parser delegate will be called (eg. on another
queue/thread) after this? IOW, should WebAVStreamDataParserListener an explicit
"disconnect"?

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:306
> +

Nit: you can skip a lot of unnecessary work by returning immediately if
m_client is NULL.

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:307
> +    m_asset = asset;

Nit: why retain the asset?

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:325
> +	   // FIXME: Add TextTrack support

Nit: bug number?

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:350
> +    ProcessCodedFrameInfo* info = (ProcessCodedFrameInfo*)refcon;

Nit: C-style cast?

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:374
> +    notImplemented();

Nit: bug number?

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:397
> +    notImplemented();

Ditto.

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:424
> +    notImplemented();

Ditto.

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:429
> +    notImplemented();

Ditto.

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:483
> +    for (CFIndex i = 0; i < CFArrayGetCount(attachmentsArray); ++i) {

Nit: the attachments array won't change size, so you can set a local variable
in the init-expression.

>
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.m
m:505
> +	   PlatformSample platformSample = mediaSample->platformSample();
> +	   if (platformSample.type != PlatformSample::CMSampleBufferType)
> +	       return;

Can the vector have samples of different types? IOW, should this be "continue"?


More information about the webkit-reviews mailing list