121 lines
3.5 KiB
C
121 lines
3.5 KiB
C
|
/*
|
||
|
* Copyright (c) 2004-2008 Mike Matsnev. All Rights Reserved.
|
||
|
*
|
||
|
* $Id: CoParser.h,v 1.21 2008/03/29 15:41:28 mike Exp $
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef COPARSER_H
|
||
|
#define COPARSER_H
|
||
|
|
||
|
// Generic multimedia container parsers support
|
||
|
|
||
|
// random access stream, this will be provided by
|
||
|
// IMMContainer's client
|
||
|
[uuid("8E192E9F-E536-4027-8D46-664CC7A102C5")]
|
||
|
interface IMMStream : public IUnknown {
|
||
|
// read count bytes starting at position
|
||
|
STDMETHOD(Read)( unsigned long long position,
|
||
|
void *buffer,
|
||
|
unsigned int *count) = 0;
|
||
|
|
||
|
// scan the file starting at position for the signature
|
||
|
// signature can't have zero bytes
|
||
|
STDMETHOD(Scan)( unsigned long long *position,
|
||
|
unsigned int signature) = 0;
|
||
|
};
|
||
|
|
||
|
[uuid("A237C873-C6AD-422E-90DB-7CB4627DCFD9")]
|
||
|
interface IMMStreamOpen : public IUnknown {
|
||
|
STDMETHOD(Open)(LPCWSTR name) = 0;
|
||
|
};
|
||
|
|
||
|
[uuid("D8FF7213-6E09-4256-A2E5-5872C798B128")]
|
||
|
interface IMMFrame : public IMediaSample2 {
|
||
|
// track number must be the same as returned by
|
||
|
// IMMContainer->EnumTracks() iterator
|
||
|
STDMETHOD_(unsigned, GetTrack)() = 0;
|
||
|
STDMETHOD(SetTrack)(unsigned) = 0;
|
||
|
|
||
|
STDMETHOD_(unsigned, GetPre)() = 0;
|
||
|
STDMETHOD(SetPre)(unsigned) = 0;
|
||
|
};
|
||
|
|
||
|
[uuid("B8324E2A-21A9-46A1-8922-70C55D06311A")]
|
||
|
interface IMMErrorInfo : public IUnknown {
|
||
|
STDMETHOD(LogError)(BSTR message) = 0; // message is owned by the caller
|
||
|
STDMETHOD(LogWarning)(BSTR message) = 0;
|
||
|
};
|
||
|
|
||
|
[uuid("C7120EDB-528C-4ebe-BB53-DA8E70E618EE")]
|
||
|
interface IMemAlloc : public IUnknown {
|
||
|
STDMETHOD(GetBuffer)(HANDLE hAbortEvt, DWORD size, IMMFrame **pS) = 0;
|
||
|
};
|
||
|
|
||
|
// container itself should support IPropertyBag and return
|
||
|
// at least Duration[UI8] (in ns) property
|
||
|
// if a containter supports multiple segments in the same
|
||
|
// physical file it should return SegmentTop[UI8] property
|
||
|
// that return the offset of the first byte after this
|
||
|
// segment's end
|
||
|
[uuid("A369001B-F292-45f7-A942-84F9C8C0718A")]
|
||
|
interface IMMContainer : public IUnknown {
|
||
|
STDMETHOD(Open)( IMMStream *stream,
|
||
|
unsigned long long position,
|
||
|
IMMErrorInfo *einfo,
|
||
|
IMemAlloc *alloc) = 0;
|
||
|
STDMETHOD(GetProgress)(unsigned long long *cur,unsigned long long *max) = 0;
|
||
|
STDMETHOD(AbortOpen)() = 0;
|
||
|
|
||
|
// pu->Next() returns objects supporting IPropertyBag interface
|
||
|
STDMETHOD(EnumTracks)(IEnumUnknown **pu) = 0;
|
||
|
|
||
|
// pu->Next() returns objects supporting IProperyBag and IEnumUnknown interfaces
|
||
|
STDMETHOD(EnumEditions)(IEnumUnknown **pu) = 0;
|
||
|
|
||
|
// pu->Next() returns objects supporting IProperyBag and IMMStream interfaces
|
||
|
STDMETHOD(EnumAttachments)(IEnumUnknown **pu) = 0;
|
||
|
|
||
|
// S_FALSE is end of stream, S_OK next valid frame returned, E_ABORT wait aborted
|
||
|
STDMETHOD(ReadFrame)(HANDLE hAbortEvt, IMMFrame **frame) = 0;
|
||
|
|
||
|
// seeking
|
||
|
STDMETHOD(Seek)(unsigned long long timecode,unsigned flags) = 0;
|
||
|
};
|
||
|
|
||
|
/* FIXME: duplicated in matroska parser
|
||
|
enum { // Track type
|
||
|
TT_VIDEO = 1,
|
||
|
TT_AUDIO = 2,
|
||
|
TT_SUBS = 17,
|
||
|
|
||
|
TT_INTERLEAVED = 0x10001,
|
||
|
};
|
||
|
*/
|
||
|
|
||
|
enum { // Seek flags
|
||
|
MMSF_PREV_KF = 1,
|
||
|
MMSF_NEXT_KF = 2
|
||
|
};
|
||
|
|
||
|
/* Track properties [IPropertyBag from EnumTracks->Next()]
|
||
|
Name Type Optional
|
||
|
DefaultDuration UI8 Yes in ns
|
||
|
Video.Interlaced BOOL Yes
|
||
|
Video.DisplayWidth UI4 Yes
|
||
|
Video.DisplayHeight UI4 Yes
|
||
|
Video.PixelWidth UI4 No
|
||
|
Video.PixelHeight UI4 No
|
||
|
CodecID BSTR No
|
||
|
Type UI4 No TT_* enumeration
|
||
|
CodecPrivate ARRAY|UI1 Yes
|
||
|
Audio.Channels UI4 No
|
||
|
Audio.BitDepth UI4 Yes
|
||
|
Audio.SamplingFreq UI4 No
|
||
|
Audio.OutputSamplingFreq UI4 Yes
|
||
|
Language BSTR Yes
|
||
|
Name BSTR Yes
|
||
|
FOURCC UI4 Yes
|
||
|
*/
|
||
|
|
||
|
#endif
|