blob: d0c34c13ea75b856cac9a22ffe58a32a9c015686 [file] [log] [blame]
/*
* Copyright (C) 2013 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef MediaSample_h
#define MediaSample_h
#include "FloatSize.h"
#include <wtf/MediaTime.h>
#include <wtf/RefCounted.h>
#include <wtf/text/AtomicString.h>
typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
namespace WebCore {
class MockSampleBox;
struct PlatformSample {
enum {
None,
MockSampleBoxType,
CMSampleBufferType,
} type;
union {
MockSampleBox* mockSampleBox;
CMSampleBufferRef cmSampleBuffer;
} sample;
};
class MediaSample : public RefCounted<MediaSample> {
public:
virtual ~MediaSample() { }
virtual MediaTime presentationTime() const = 0;
virtual MediaTime decodeTime() const = 0;
virtual MediaTime duration() const = 0;
virtual AtomicString trackID() const = 0;
virtual void setTrackID(const String&) = 0;
virtual size_t sizeInBytes() const = 0;
virtual FloatSize presentationSize() const = 0;
virtual void offsetTimestampsBy(const MediaTime&) = 0;
virtual void setTimestamps(const MediaTime&, const MediaTime&) = 0;
virtual bool isDivisable() const = 0;
enum DivideFlags { BeforePresentationTime, AfterPresentationTime };
virtual std::pair<RefPtr<MediaSample>, RefPtr<MediaSample>> divide(const MediaTime& presentationTime) = 0;
enum SampleFlags {
None = 0,
IsSync = 1 << 0,
NonDisplaying = 1 << 1,
};
virtual SampleFlags flags() const = 0;
virtual PlatformSample platformSample() = 0;
bool isSync() const { return flags() & IsSync; }
bool isNonDisplaying() const { return flags() & NonDisplaying; }
virtual void dump(PrintStream&) const = 0;
};
}
#endif