InbandTextTrackPrivateLegacyAVCF.cpp [plain text]
#include "config.h"
#if ENABLE(VIDEO) && USE(AVFOUNDATION) && !HAVE(AVFOUNDATION_LEGIBLE_OUTPUT_SUPPORT) && !PLATFORM(IOS)
#include "InbandTextTrackPrivateLegacyAVCF.h"
#include "InbandTextTrackPrivateAVF.h"
#include "Logging.h"
#include "MediaPlayerPrivateAVFoundationCF.h"
#include <wtf/SoftLinking.h>
#include <AVFoundationCF/AVFoundationCF.h>
#include <d3d9.h>
#include "AVFoundationCFSoftLinking.h"
namespace WebCore {
InbandTextTrackPrivateLegacyAVCF::InbandTextTrackPrivateLegacyAVCF(MediaPlayerPrivateAVFoundationCF* player, AVCFPlayerItemTrackRef track)
: InbandTextTrackPrivateAVF(player)
, m_playerItemTrack(track)
{
}
void InbandTextTrackPrivateLegacyAVCF::disconnect()
{
m_playerItemTrack = 0;
InbandTextTrackPrivateAVF::disconnect();
}
InbandTextTrackPrivate::Kind InbandTextTrackPrivateLegacyAVCF::kind() const
{
if (!m_playerItemTrack)
return InbandTextTrackPrivate::None;
return InbandTextTrackPrivate::Captions;
}
bool InbandTextTrackPrivateLegacyAVCF::isClosedCaptions() const
{
return m_playerItemTrack;
}
bool InbandTextTrackPrivateLegacyAVCF::containsOnlyForcedSubtitles() const
{
return false;
}
bool InbandTextTrackPrivateLegacyAVCF::isMainProgramContent() const
{
return m_playerItemTrack;
}
bool InbandTextTrackPrivateLegacyAVCF::isEasyToRead() const
{
return false;
}
AtomicString InbandTextTrackPrivateLegacyAVCF::label() const
{
if (!m_playerItemTrack)
return emptyAtom();
RetainPtr<CFStringRef> title;
RetainPtr<AVCFAssetTrackRef> assetTrack = adoptCF(AVCFPlayerItemTrackCopyAssetTrack(m_playerItemTrack.get()));
RetainPtr<CFArrayRef> commonMetaData = adoptCF(AVCFAssetTrackCopyCommonMetadata(assetTrack.get()));
RetainPtr<CFArrayRef> titles = adoptCF(AVCFMetadataItemCopyItemsWithKeyAndKeySpace(commonMetaData.get(), AVCFMetadataCommonKeyTitle, AVCFMetadataKeySpaceCommon));
CFIndex titlesCount = CFArrayGetCount(titles.get());
if (titlesCount) {
RetainPtr<CFLocaleRef> currentLocale = adoptCF(CFLocaleCopyCurrent());
RetainPtr<CFArrayRef> titlesForPreferredLanguages = adoptCF(AVCFMetadataItemCopyItemsWithLocale(titles.get(), currentLocale.get()));
CFIndex preferredTitlesCount = CFArrayGetCount(titlesForPreferredLanguages.get());
if (preferredTitlesCount) {
AVCFMetadataItemRef titleMetadata = static_cast<AVCFMetadataItemRef>(CFArrayGetValueAtIndex(titlesForPreferredLanguages.get(), 0));
title = adoptCF(AVCFMetadataItemCopyStringValue(titleMetadata));
}
if (!title) {
AVCFMetadataItemRef titleMetadata = static_cast<AVCFMetadataItemRef>(CFArrayGetValueAtIndex(titles.get(), 0));
title = adoptCF(AVCFMetadataItemCopyStringValue(titleMetadata));
}
}
return title ? AtomicString(title.get()) : emptyAtom();
}
AtomicString InbandTextTrackPrivateLegacyAVCF::language() const
{
if (!m_playerItemTrack)
return emptyAtom();
RetainPtr<AVCFAssetTrackRef> assetTrack = adoptCF(AVCFPlayerItemTrackCopyAssetTrack(m_playerItemTrack.get()));
RetainPtr<CFStringRef> languageCode = adoptCF(AVCFAssetTrackCopyLanguageCode(assetTrack.get()));
RetainPtr<CFLocaleRef> locale = adoptCF(CFLocaleCreate(kCFAllocatorDefault, languageCode.get()));
return CFLocaleGetIdentifier(locale.get());
}
}
#endif