blob: 49d47b42ef8e2d1246635a34d45f8956bb19ce86 [file] [log] [blame]
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree. An additional intellectual property rights grant can be found
// in the file PATENTS. All contributing project authors may
// be found in the AUTHORS file in the root of the source tree.
#pragma once
#include "cmemallocator.hpp"
#include "imemsample.hpp"
class CMediaSample : public IMediaSample,
public IMemSample
{
CMediaSample(const CMediaSample&);
CMediaSample& operator=(const CMediaSample&);
protected:
explicit CMediaSample(CMemAllocator*);
virtual ~CMediaSample();
struct Factory : CMemAllocator::ISampleFactory
{
virtual ~Factory();
HRESULT CreateSample(CMemAllocator*, IMemSample*&);
HRESULT InitializeSample(IMemSample*);
HRESULT FinalizeSample(IMemSample*);
HRESULT DestroySample(IMemSample*);
HRESULT Destroy(CMemAllocator*);
};
public:
static HRESULT CreateAllocator(IMemAllocator**);
HRESULT STDMETHODCALLTYPE QueryInterface(const IID&, void**);
ULONG STDMETHODCALLTYPE AddRef();
ULONG STDMETHODCALLTYPE Release();
//IMemSample interface:
ULONG STDMETHODCALLTYPE GetCount();
HRESULT STDMETHODCALLTYPE Initialize();
HRESULT STDMETHODCALLTYPE Finalize();
HRESULT STDMETHODCALLTYPE Destroy();
//IMediaSample interface:
HRESULT STDMETHODCALLTYPE GetPointer(
BYTE** ppBuffer);
long STDMETHODCALLTYPE GetSize();
HRESULT STDMETHODCALLTYPE GetTime(
REFERENCE_TIME* pTimeStart,
REFERENCE_TIME* pTimeEnd);
HRESULT STDMETHODCALLTYPE SetTime(
REFERENCE_TIME* pTimeStart,
REFERENCE_TIME* pTimeEnd);
HRESULT STDMETHODCALLTYPE IsSyncPoint();
HRESULT STDMETHODCALLTYPE SetSyncPoint(
BOOL bIsSyncPoint);
HRESULT STDMETHODCALLTYPE IsPreroll();
HRESULT STDMETHODCALLTYPE SetPreroll(
BOOL bIsPreroll);
long STDMETHODCALLTYPE GetActualDataLength();
HRESULT STDMETHODCALLTYPE SetActualDataLength(long);
HRESULT STDMETHODCALLTYPE GetMediaType(
AM_MEDIA_TYPE** ppMediaType);
HRESULT STDMETHODCALLTYPE SetMediaType(
AM_MEDIA_TYPE* pMediaType);
HRESULT STDMETHODCALLTYPE IsDiscontinuity();
HRESULT STDMETHODCALLTYPE SetDiscontinuity(
BOOL bDiscontinuity);
HRESULT STDMETHODCALLTYPE GetMediaTime(
LONGLONG* pTimeStart,
LONGLONG* pTimeEnd);
HRESULT STDMETHODCALLTYPE SetMediaTime(
LONGLONG* pTimeStart,
LONGLONG* pTimeStop);
protected:
CMemAllocator* const m_pAllocator;
ULONG m_cRef;
HRESULT Create();
private:
bool m_sync_point;
bool m_preroll;
bool m_discontinuity;
__int64 m_start_time;
__int64 m_stop_time;
__int64 m_media_start_time;
__int64 m_media_stop_time;
long m_actual_data_length; //allocated memory holding actual data
BYTE* m_buf;
long m_buflen; //how much memory was allocated
long m_off; //to satisfy alignment requirements
AM_MEDIA_TYPE* m_pmt;
};