Rename ENABLE_ENCRYPTED_MEDIA_V2 to ENABLE_LEGACY_ENCRYPTED_MEDIA
[WebKit.git] / Source / WebCore / platform / graphics / avfoundation / objc / CDMSessionMediaSourceAVFObjC.h
1 /*
2  * Copyright (C) 2014-2015 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef CDMSessionMediaSourceAVFObjC_h
27 #define CDMSessionMediaSourceAVFObjC_h
28
29 #include "CDMSession.h"
30 #include "SourceBufferPrivateAVFObjC.h"
31 #include <wtf/RetainPtr.h>
32 #include <wtf/WeakPtr.h>
33
34 #if ENABLE(LEGACY_ENCRYPTED_MEDIA) && ENABLE(MEDIA_SOURCE)
35
36 OBJC_CLASS AVStreamDataParser;
37 OBJC_CLASS NSError;
38
39 namespace WebCore {
40
41 class CDMPrivateMediaSourceAVFObjC;
42
43 class CDMSessionMediaSourceAVFObjC : public CDMSession, public SourceBufferPrivateAVFObjCErrorClient {
44 public:
45     CDMSessionMediaSourceAVFObjC(CDMPrivateMediaSourceAVFObjC&, CDMSessionClient*);
46     virtual ~CDMSessionMediaSourceAVFObjC();
47
48     virtual void addParser(AVStreamDataParser*) = 0;
49     virtual void removeParser(AVStreamDataParser*) = 0;
50
51     // CDMSession
52     void setClient(CDMSessionClient* client) override { m_client = client; }
53     const String& sessionId() const override { return m_sessionId; }
54
55     // SourceBufferPrivateAVFObjCErrorClient
56     void layerDidReceiveError(AVSampleBufferDisplayLayer *, NSError *, bool& shouldIgnore) override;
57     void rendererDidReceiveError(AVSampleBufferAudioRenderer *, NSError *, bool& shouldIgnore) override;
58
59     void addSourceBuffer(SourceBufferPrivateAVFObjC*);
60     void removeSourceBuffer(SourceBufferPrivateAVFObjC*);
61     void setSessionId(const String& sessionId) { m_sessionId = sessionId; }
62
63     void invalidateCDM() { m_cdm = nullptr; }
64
65 protected:
66     String storagePath() const;
67
68     CDMPrivateMediaSourceAVFObjC* m_cdm;
69     CDMSessionClient* m_client { nullptr };
70     Vector<RefPtr<SourceBufferPrivateAVFObjC>> m_sourceBuffers;
71     RefPtr<Uint8Array> m_certificate;
72     String m_sessionId;
73     bool m_stopped { false };
74 };
75
76 inline CDMSessionMediaSourceAVFObjC* toCDMSessionMediaSourceAVFObjC(CDMSession* session)
77 {
78     if (!session || (session->type() != CDMSessionTypeAVStreamSession && session->type() != CDMSessionTypeAVContentKeySession))
79         return nullptr;
80     return static_cast<CDMSessionMediaSourceAVFObjC*>(session);
81 }
82
83 }
84
85 #endif // ENABLE(LEGACY_ENCRYPTED_MEDIA) && ENABLE(MEDIA_SOURCE)
86
87 #endif // CDMSessionMediaSourceAVFObjC_h