MediaSampleByteRange.cpp [plain text]
#include "config.h"
#include "MediaSampleByteRange.h"
#if ENABLE(WEBM_FORMAT_READER)
namespace WebKit {
using namespace PAL;
using namespace WebCore;
MediaSampleByteRange::MediaSampleByteRange(MediaSample& sample, MTPluginByteSourceRef byteSource, uint64_t trackID)
: MediaSampleAVFObjC(nullptr)
, m_presentationTime(sample.presentationTime())
, m_decodeTime(sample.decodeTime())
, m_duration(sample.duration())
, m_sizeInBytes(sample.sizeInBytes())
, m_presentationSize(sample.presentationSize())
, m_flags(sample.flags())
, m_trackID(trackID)
, m_byteRange(sample.byteRange())
, m_byteSource(byteSource)
{
ASSERT(!isMainThread());
ASSERT(m_decodeTime == m_presentationTime || m_decodeTime == MediaTime::invalidTime());
auto platformSample = sample.platformSample();
switch (platformSample.type) {
case PlatformSample::CMSampleBufferType:
m_formatDescription = CMSampleBufferGetFormatDescription(platformSample.sample.cmSampleBuffer);
break;
case PlatformSample::ByteRangeSampleType:
m_formatDescription = platformSample.sample.byteRangeSample.second;
break;
default:
ASSERT_NOT_REACHED();
break;
}
}
AtomString MediaSampleByteRange::trackID() const
{
return AtomString::number(m_trackID);
}
PlatformSample MediaSampleByteRange::platformSample()
{
return {
PlatformSample::ByteRangeSampleType,
{ .byteRangeSample = std::make_pair(m_byteSource.get(), m_formatDescription.get()) },
};
}
void MediaSampleByteRange::offsetTimestampsBy(const MediaTime& offset)
{
setTimestamps(presentationTime() + offset, decodeTime() + offset);
}
void MediaSampleByteRange::setTimestamps(const MediaTime& presentationTime, const MediaTime& decodeTime)
{
m_presentationTime = presentationTime;
m_decodeTime = decodeTime;
}
}
#endif // ENABLE(WEBM_FORMAT_READER)