SourceBufferParserAVFObjC.h [plain text]
#pragma once
#if ENABLE(MEDIA_SOURCE)
#include "SourceBufferParser.h"
#include <wtf/TypeCasts.h>
#include <wtf/WeakPtr.h>
OBJC_CLASS AVAsset;
OBJC_CLASS AVStreamDataParser;
OBJC_CLASS NSData;
OBJC_CLASS NSError;
OBJC_CLASS WebAVStreamDataParserListener;
typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
namespace WebCore {
class SourceBufferParserAVFObjC final : public SourceBufferParser, public CanMakeWeakPtr<SourceBufferParserAVFObjC> {
public:
static MediaPlayerEnums::SupportsType isContentTypeSupported(const ContentType&);
SourceBufferParserAVFObjC();
virtual ~SourceBufferParserAVFObjC();
AVStreamDataParser* parser() const { return m_parser.get(); }
Type type() const { return Type::AVFObjC; }
void appendData(Vector<unsigned char>&&, AppendFlags = AppendFlags::None) final;
void flushPendingMediaData() final;
void setShouldProvideMediaDataForTrackID(bool, uint64_t) final;
bool shouldProvideMediadataForTrackID(uint64_t) final;
void resetParserState() final;
void invalidate() final;
#if !RELEASE_LOG_DISABLED
void setLogger(const WTF::Logger&, const void* identifier) final;
#endif
void didParseStreamDataAsAsset(AVAsset*);
void didFailToParseStreamDataWithError(NSError*);
void didProvideMediaDataForTrackID(uint64_t trackID, CMSampleBufferRef, const String& mediaType, unsigned flags);
void willProvideContentKeyRequestInitializationDataForTrackID(uint64_t trackID);
void didProvideContentKeyRequestInitializationDataForTrackID(NSData*, uint64_t trackID);
private:
#if !RELEASE_LOG_DISABLED
const WTF::Logger* loggerPtr() const { return m_logger.get(); }
const void* logIdentifier() const { return m_logIdentifier; }
#endif
RetainPtr<AVStreamDataParser> m_parser;
RetainPtr<WebAVStreamDataParserListener> m_delegate;
bool m_discardSamplesUntilNextInitializationSegment { false };
bool m_parserStateWasReset { false };
#if !RELEASE_LOG_DISABLED
RefPtr<const WTF::Logger> m_logger;
const void* m_logIdentifier { nullptr };
#endif
};
}
SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::SourceBufferParserAVFObjC)
static bool isType(const WebCore::SourceBufferParser& parser) { return parser.type() == WebCore::SourceBufferParser::Type::AVFObjC; }
SPECIALIZE_TYPE_TRAITS_END()
#endif // ENABLE(MEDIA_SOURCE)