summaryrefslogtreecommitdiffstats
path: root/loader
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-11-22 03:16:31 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-11-22 03:16:31 +0000
commit4a7c3f22ec5c4ab2b96bf0d2dbee50af1b91dfa0 (patch)
tree348394fb7e9cad43295eeb04236ae02d5c8f2173 /loader
parente5ebb2673d107e03823ca1c00512268d83760402 (diff)
downloadmpv-4a7c3f22ec5c4ab2b96bf0d2dbee50af1b91dfa0.tar.bz2
mpv-4a7c3f22ec5c4ab2b96bf0d2dbee50af1b91dfa0.tar.xz
mplayer integration
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@3064 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'loader')
-rw-r--r--loader/dshow/DS_AudioDecoder.c8
-rw-r--r--loader/dshow/DS_AudioDecoder.h2
-rw-r--r--loader/dshow/DS_VideoDecoder.c103
-rw-r--r--loader/dshow/DS_VideoDecoder.h4
-rw-r--r--loader/dshow/Makefile12
-rw-r--r--loader/dshow/libwin32.h343
6 files changed, 223 insertions, 249 deletions
diff --git a/loader/dshow/DS_AudioDecoder.c b/loader/dshow/DS_AudioDecoder.c
index 41944dd099..db971806a1 100644
--- a/loader/dshow/DS_AudioDecoder.c
+++ b/loader/dshow/DS_AudioDecoder.c
@@ -75,13 +75,13 @@ DS_AudioDecoder * DS_AudioDecoder_Create(const CodecInfo * info, const WAVEFORMA
/*try*/
{
ALLOCATOR_PROPERTIES props, props1;
- this->m_pDS_Filter = DS_Filter_Create((const char*)info->dll, &info->guid, &this->m_sOurType, &this->m_sDestType);
+ this->m_pDS_Filter = DS_FilterCreate((const char*)info->dll, info->guid, &this->m_sOurType, &this->m_sDestType);
if( !this->m_pDS_Filter ) {
free(this);
return NULL;
}
- DS_Filter_Start(this->m_pDS_Filter);
+ this->m_pDS_Filter->Start(this->m_pDS_Filter);
props.cBuffers=1;
props.cbBuffer=this->m_sOurType.lSampleSize;
@@ -130,8 +130,8 @@ int DS_AudioDecoder_Convert(DS_AudioDecoder *this, const void* in_data, uint_t i
int result;
// this->m_pOurOutput->SetFramePointer(out_data+written);
- COutputPin_SetFramePointer(this->m_pDS_Filter->m_pOurOutput,&frame_pointer);
- COutputPin_SetFrameSizePointer(this->m_pDS_Filter->m_pOurOutput,(long*)&frame_size);
+ this->m_pDS_Filter->m_pOurOutput->SetFramePointer(this->m_pDS_Filter->m_pOurOutput,&frame_pointer);
+ this->m_pDS_Filter->m_pOurOutput->SetFrameSizePointer(this->m_pDS_Filter->m_pOurOutput,(long*)&frame_size);
this->m_pDS_Filter->m_pAll->vt->GetBuffer(this->m_pDS_Filter->m_pAll, &sample, 0, 0, 0);
if (!sample)
{
diff --git a/loader/dshow/DS_AudioDecoder.h b/loader/dshow/DS_AudioDecoder.h
index b0d01c4c83..aa26a09ca5 100644
--- a/loader/dshow/DS_AudioDecoder.h
+++ b/loader/dshow/DS_AudioDecoder.h
@@ -5,7 +5,7 @@
#include "audiodecoder.h"
#include "except.h"
#else
-#include "../libwin32.h"
+#include "libwin32.h"
#endif
#include "DS_Filter.h"
diff --git a/loader/dshow/DS_VideoDecoder.c b/loader/dshow/DS_VideoDecoder.c
index 8a49729676..59fa97ee0a 100644
--- a/loader/dshow/DS_VideoDecoder.c
+++ b/loader/dshow/DS_VideoDecoder.c
@@ -70,6 +70,8 @@ DS_VideoDecoder * DS_VideoDecoder_Create(CodecInfo * info, BITMAPINFOHEADER * f
this->m_iLastQuality = -1;
this->m_iMaxAuto = maxauto;
+ Setup_LDT_Keeper();
+
//memset(&m_obh, 0, sizeof(m_obh));
//m_obh.biSize = sizeof(m_obh);
/*try*/
@@ -140,7 +142,7 @@ DS_VideoDecoder * DS_VideoDecoder_Create(CodecInfo * info, BITMAPINFOHEADER * f
* ((this->iv.m_obh.biBitCount + 7) / 8);
- this->m_pDS_Filter = DS_Filter_Create((const char*)info->dll, &info->guid, &this->m_sOurType, &this->m_sDestType);
+ this->m_pDS_Filter = DS_FilterCreate((const char*)info->dll, info->guid, &this->m_sOurType, &this->m_sDestType);
if (!flip)
{
@@ -230,7 +232,7 @@ void DS_VideoDecoder_StartInternal(DS_VideoDecoder *this)
ALLOCATOR_PROPERTIES props, props1;
Debug printf("DS_VideoDecoder_StartInternal\n");
//cout << "DSSTART" << endl;
- DS_Filter_Start(this->m_pDS_Filter);
+ this->m_pDS_Filter->Start(this->m_pDS_Filter);
props.cBuffers = 1;
props.cbBuffer = this->m_sDestType.lSampleSize;
@@ -245,17 +247,17 @@ void DS_VideoDecoder_StartInternal(DS_VideoDecoder *this)
void DS_VideoDecoder_StopInternal(DS_VideoDecoder *this)
{
- DS_Filter_Stop(this->m_pDS_Filter);
+ this->m_pDS_Filter->Stop(this->m_pDS_Filter);
//??? why was this here ??? m_pOurOutput->SetFramePointer(0);
}
-int DS_VideoDecoder_DecodeInternal(DS_VideoDecoder *this, const void* src, int size, int is_keyframe, CImage* pImage)
+int DS_VideoDecoder_DecodeInternal(DS_VideoDecoder *this, const void* src, int size, int is_keyframe, char* pImage)
{
IMediaSample* sample = 0;
char* ptr;
int result;
- Debug printf("DS_VideoDecoder_DecodeInternal(%p,%p,%d,%d,%p)\n",this,src,size,is_keyframe,pImage->ptr);
+ Debug printf("DS_VideoDecoder_DecodeInternal(%p,%p,%d,%d,%p)\n",this,src,size,is_keyframe,pImage);
this->m_pDS_Filter->m_pAll->vt->GetBuffer(this->m_pDS_Filter->m_pAll, &sample, 0, 0, 0);
@@ -268,12 +270,7 @@ int DS_VideoDecoder_DecodeInternal(DS_VideoDecoder *this, const void* src, int s
//cout << "DECODE " << (void*) pImage << " d: " << (void*) pImage->Data() << endl;
if (pImage)
{
- if (!(pImage->ptr))
- {
- Debug printf("no m_outFrame??\n");
- }
- else
- COutputPin_SetPointer2(this->m_pDS_Filter->m_pOurOutput,(char*)pImage->ptr);
+ this->m_pDS_Filter->m_pOurOutput->SetPointer2(this->m_pDS_Filter->m_pOurOutput,pImage);
}
@@ -390,7 +387,7 @@ int DS_VideoDecoder_SetDestFmt(DS_VideoDecoder *this, int bits, fourcc_t csp)
*/
// BitmapInfo temp = m_obh;
- if (bits != 0)
+ if (!csp) // RGB
{
int ok = true;
@@ -438,10 +435,8 @@ int DS_VideoDecoder_SetDestFmt(DS_VideoDecoder *this, int bits, fourcc_t csp)
}
}
//.biSizeImage=abs(temp.biWidth*temp.biHeight*((temp.biBitCount+7)/8));
- }
-
- if (csp != 0)
- {
+ } else
+ { // YUV
int ok = true;
switch (csp)
{
@@ -466,19 +461,6 @@ int DS_VideoDecoder_SetDestFmt(DS_VideoDecoder *this, int bits, fourcc_t csp)
}
if (ok) {
- int bits=0;
- switch(csp){
- case fccYUV:
- bits=24;break;
- case fccYUY2:
- case fccUYVY:
- case fccYVYU:
- bits=16;break;
- case fccYV12:
- case fccIYUV:
- case fccI420:
- bits=12;break;
- }
if (csp != 0 && csp != 3 && this->iv.m_obh.biHeight > 0)
this->iv.m_obh.biHeight *= -1; // YUV formats uses should have height < 0
this->iv.m_obh.biSize = sizeof(BITMAPINFOHEADER);
@@ -561,7 +543,7 @@ int DS_VideoDecoder_SetDestFmt(DS_VideoDecoder *this, int bits, fourcc_t csp)
this->m_pDS_Filter->m_pInputPin->vt->Disconnect(this->m_pDS_Filter->m_pInputPin);
this->m_pDS_Filter->m_pOutputPin->vt->Disconnect(this->m_pDS_Filter->m_pOutputPin);
- COutputPin_SetNewFormat(this->m_pDS_Filter->m_pOurOutput,&this->m_sDestType);
+ this->m_pDS_Filter->m_pOurOutput->SetNewFormat(this->m_pDS_Filter->m_pOurOutput,&this->m_sDestType);
result = this->m_pDS_Filter->m_pInputPin->vt->ReceiveConnection(this->m_pDS_Filter->m_pInputPin,
this->m_pDS_Filter->m_pOurInput,
&this->m_sOurType);
@@ -811,5 +793,64 @@ HRESULT DS_VideoDecoder_SetValue(DS_VideoDecoder *this, const char* name, int va
return 0;
}
/*
-vim: tabstop=8
+vim: vi* sux.
*/
+
+int DS_SetAttr_DivX(char* attribute, int value){
+ int result, status, newkey, count;
+ if(strcmp(attribute, "Quality")==0){
+ char* keyname="SOFTWARE\\Microsoft\\Scrunch";
+ result=RegCreateKeyExA(HKEY_CURRENT_USER, keyname, 0, 0, 0, 0, 0, &newkey, &status);
+ if(result!=0)
+ {
+ printf("VideoDecoder::SetExtAttr: registry failure\n");
+ return -1;
+ }
+ result=RegSetValueExA(newkey, "Current Post Process Mode", 0, REG_DWORD, &value, 4);
+ if(result!=0)
+ {
+ printf("VideoDecoder::SetExtAttr: error writing value\n");
+ return -1;
+ }
+ value=-1;
+ result=RegSetValueExA(newkey, "Force Post Process Mode", 0, REG_DWORD, &value, 4);
+ if(result!=0)
+ {
+ printf("VideoDecoder::SetExtAttr: error writing value\n");
+ return -1;
+ }
+ RegCloseKey(newkey);
+ return 0;
+ }
+
+ if(
+ (strcmp(attribute, "Saturation")==0) ||
+ (strcmp(attribute, "Hue")==0) ||
+ (strcmp(attribute, "Contrast")==0) ||
+ (strcmp(attribute, "Brightness")==0)
+ )
+ {
+ char* keyname="SOFTWARE\\Microsoft\\Scrunch\\Video";
+ result=RegCreateKeyExA(HKEY_CURRENT_USER, keyname, 0, 0, 0, 0, 0, &newkey, &status);
+ if(result!=0)
+ {
+ printf("VideoDecoder::SetExtAttr: registry failure\n");
+ return -1;
+ }
+ result=RegSetValueExA(newkey, attribute, 0, REG_DWORD, &value, 4);
+ if(result!=0)
+ {
+ printf("VideoDecoder::SetExtAttr: error writing value\n");
+ return -1;
+ }
+ RegCloseKey(newkey);
+ return 0;
+ }
+
+ printf("Unknown attribute!\n");
+ return -200;
+}
+
+
+
+
diff --git a/loader/dshow/DS_VideoDecoder.h b/loader/dshow/DS_VideoDecoder.h
index ba97162da4..4b2d19f90b 100644
--- a/loader/dshow/DS_VideoDecoder.h
+++ b/loader/dshow/DS_VideoDecoder.h
@@ -4,7 +4,7 @@
#ifndef NOAVIFILE_HEADERS
#include "videodecoder.h"
#else
-#include "../libwin32.h"
+#include "libwin32.h"
#endif
#include "DS_Filter.h"
@@ -36,7 +36,7 @@ void DS_VideoDecoder_StartInternal(DS_VideoDecoder *this);
void DS_VideoDecoder_StopInternal(DS_VideoDecoder *this);
-int DS_VideoDecoder_DecodeInternal(DS_VideoDecoder *this, const void* src, int size, int is_keyframe, CImage* pImage);
+int DS_VideoDecoder_DecodeInternal(DS_VideoDecoder *this, const void* src, int size, int is_keyframe, char* pImage);
/*
* bits == 0 - leave unchanged
diff --git a/loader/dshow/Makefile b/loader/dshow/Makefile
index 09d3950475..c9e26da029 100644
--- a/loader/dshow/Makefile
+++ b/loader/dshow/Makefile
@@ -3,20 +3,20 @@ LIBNAME = libDS_Filter.a
include ../../config.mak
-# DS_AudioDec.cpp
-SRCS = DS_AudioDec.cpp DS_AudioDecoder.cpp DS_VideoDec.cpp DS_Filter.cpp DS_VideoDecoder.cpp allocator.cpp cmediasample.cpp guids.cpp inputpin.cpp outputpin.cpp
-OBJS = $(SRCS:.cpp=.o)
+# DS_AudioDec.c
+SRCS = DS_AudioDecoder.c DS_Filter.c DS_VideoDecoder.c allocator.c cmediasample.c guids.c inputpin.c outputpin.c
+OBJS = $(SRCS:.c=.o)
# OBJS = DS_AudioDec.o DS_VideoDec.o DS_Filter.o allocator.o cmediasample.o guids.o inputpin.o outputpin.o
INCLUDE = -I. -I.. $(EXTRA_INC) -DNOAVIFILE_HEADERS
-CFLAGS = $(OPTFLAGS) $(INCLUDE) -fexceptions
+CFLAGS = $(OPTFLAGS) $(INCLUDE)
-.SUFFIXES: .cpp .o
+.SUFFIXES: .c .o
# .PHONY: all clean
-.cpp.o:
+.c.o:
$(CC) -c $(CFLAGS) -o $@ $<
$(LIBNAME): $(OBJS)
diff --git a/loader/dshow/libwin32.h b/loader/dshow/libwin32.h
index 13d5468a2a..f650be2642 100644
--- a/loader/dshow/libwin32.h
+++ b/loader/dshow/libwin32.h
@@ -1,72 +1,161 @@
#ifndef __LIBWIN32_H
#define __LIBWIN32_H
-#define VFW_E_INVALIDMEDIATYPE 0x80040200
-#define VFW_E_INVALIDSUBTYPE 0x80040201
-#define VFW_E_ALREADY_CONNECTED 0x80040204
-#define VFW_E_FILTER_ACTIVE 0x80040205
-#define VFW_E_NO_ACCEPTABLE_TYPES 0x80040207
-#define VFW_E_NOT_CONNECTED 0x80040209
-#define VFW_E_NO_ALLOCATOR 0x8004020A
+#ifndef NOAVIFILE_HEADERS
+#error this header file should not be used without -DNOAVIFILE_HEADERS
+#endif
+
+// this file is only included when NOAVIFILE_HEADERS are defined
+// serves mainly for mplayer
+
#define VFW_E_NOT_RUNNING 0x80040226
-#define VFW_E_TYPE_NOT_ACCEPTED 0x8004022A
-#define VFW_E_SAMPLE_REJECTED 0x8004022B
-#include <sys/types.h>
#include <inttypes.h>
-#ifndef NOAVIFILE_HEADERS
-#include <audiodecoder.h>
-#include <audioencoder.h>
-#include <videodecoder.h>
-#include <videoencoder.h>
-#include <except.h>
-#include <fourcc.h>
+//#define FATAL(a) // you don't need exception - if you want - just fill more code
+#include "wine/mmreg.h"
+#include "wine/winreg.h"
+#include "wine/vfw.h"
+#include "com.h"
-#else
-// code for mplayer team
+typedef uint32_t fourcc_t;
-//#define FATAL(a) // you don't need exception - if you want - just fill more code
-#define FATAL(X...) FatalError(__MODULE__,__FILE__,__LINE__,X)
-#include <wine/mmreg.h>
-#include <wine/winreg.h>
-#include <wine/vfw.h>
-#include <com.h>
-#include <stdarg.h>
-//#include <string>
-#include <stdio.h>
-#include <stdlib.h>
+/*
+typedef struct _FatalError
+{
+ FatalError();
+ void PrintAll() {}
+}FatalError;
+*/
-typedef unsigned int uint_t; // use as generic type -
+typedef struct _CodecInfo
+{
+ char* dll;
+ GUID* guid;
+}CodecInfo;
-typedef unsigned int fourcc_t;
-struct FatalError
+typedef struct _CImage // public your_libvo_mem
{
- FatalError(const char* mod, const char* f, int l, const char* desc,...)
+ char* ptr;
+
+ /*char* (*Data)();
{
- printf("FATAL: module: %s source: %s line %d ", mod, f, l);
- va_list va;
- va_start(va, desc);
- vprintf(desc, va);
- va_end(va);
- }
- void PrintAll() {}
+ return 0;
+ // pointer to memory block
+ }*/
+ /*int (*Supported)(fourcc_t csp, int bits);
+ {
+ return true;
+ // if you support such surface
+ }*/
+}CImage;
+
+
+#if 0
+struct BitmapInfo : public BITMAPINFOHEADER
+{
+ void SetBits(int b) { return; /*fixme*/ }
+ void SetSpace(int b) { return; /*fixme*/ }
};
+#endif
-struct CodecInfo
+typedef struct _IAudioDecoder
{
-// std::string dll;
- char* dll;
- GUID guid;
+ WAVEFORMATEX in_fmt;
+ CodecInfo record;
+ /*(*IAudioDecoder)( CodecInfo * r, const WAVEFORMATEX* w);
+ {
+ memcpy(&this->record,r,sizeof(CodecInfo));
+ in_fmt = *w;
+ }*/
+}IAudioDecoder;
+
+/*
+struct IAudioEncoder
+{
+ IAudioEncoder(const CodecInfo&, WAVEFORMATEX*) {}
+ // you do not need this one...
};
+*/
-struct CImage { // public your_libvo_mem
- char* ptr;
- char* Data() { return ptr; } // pointer to memory block
- /* if you support such surface: */
- static bool Supported(fourcc_t csp, int bits) { return true; }
+ enum CAPS
+ {
+ CAP_NONE = 0,
+ CAP_YUY2 = 1,
+ CAP_YV12 = 2,
+ CAP_IYUV = 4,
+ CAP_UYVY = 8,
+ CAP_YVYU = 16,
+ CAP_I420 = 32,
+ };
+ enum DecodingMode
+ {
+ DIRECT = 0,
+ REALTIME,
+ REALTIME_QUALITY_AUTO,
+ };
+ enum DecodingState
+ {
+ STOP = 0,
+ START,
+ };
+
+typedef struct _BitmapInfo
+{
+ long biSize;
+ long biWidth;
+ long biHeight;
+ short biPlanes;
+ short biBitCount;
+ long biCompression;
+ long biSizeImage;
+ long biXPelsPerMeter;
+ long biYPelsPerMeter;
+ long biClrUsed;
+ long biClrImportant;
+ int colors[3];
+} BitmapInfo;
+
+typedef struct _IVideoDecoder
+{
+ int VBUFSIZE;
+ int QMARKHI;
+ int QMARKLO;
+ int DMARKHI;
+ int DMARKLO;
+
+ /*
+ IVideoDecoder(CodecInfo& info, const BITMAPINFOHEADER& format) : record(info)
+ {
+ // implement init part
+ }
+ virtual ~IVideoDecoder();
+ void Stop()
+ {
+ }
+ void Start()
+ {
+ }
+ */
+ const CodecInfo record;
+ int m_Mode; // should we do precaching (or even change Quality on the fly)
+ int m_State;
+ int m_iDecpos;
+ int m_iPlaypos;
+ float m_fQuality; // quality for the progress bar 0..1(best)
+ int m_bCapable16b;
+
+ BITMAPINFOHEADER* m_bh; // format of input data (might be larger - e.g. huffyuv)
+ BitmapInfo m_decoder; // format of decoder output
+ BitmapInfo m_obh; // format of returned frames
+}IVideoDecoder;
+
+/*
+struct IRtConfig
+{
};
+*/
// might be minimalized to contain just those which are needed by DS_VideoDecoder
@@ -167,160 +256,4 @@ struct CImage { // public your_libvo_mem
#define fccUYVY mmioFOURCC('U', 'Y', 'V', 'Y')/* Packed mode: U0+Y0+V0+Y1 (1 plane) */
#define fccYVYU mmioFOURCC('Y', 'V', 'Y', 'U')/* Packed mode: Y0+V0+Y1+U0 (1 plane) */
-
-struct BitmapInfo : public BITMAPINFOHEADER
-{
- int colors[3];
-
- void SetBitFields16(){
- biSize=sizeof(BITMAPINFOHEADER)+12;
- biCompression=3;//BI_BITFIELDS
- biBitCount=16;
- biSizeImage=abs((int)(2*biWidth*biHeight));
- colors[0]=0xF800;
- colors[1]=0x07E0;
- colors[2]=0x001F;
- }
- void SetBitFields15(){
- biSize=sizeof(BITMAPINFOHEADER)+12;
- biCompression=3;//BI_BITFIELDS
- biBitCount=16;
- biSizeImage=abs((int)(2*biWidth*biHeight));
- colors[0]=0x7C00;
- colors[1]=0x03E0;
- colors[2]=0x001F;
- }
- void SetRGB(){
- biSize = sizeof(BITMAPINFOHEADER);
- biCompression = 0; //BI_RGB
- //biHeight = labs(biHeight);
- biSizeImage = labs(biWidth * biHeight) * ((biBitCount + 7) / 8);
- }
- void SetBits(int bits) {
- switch (bits){
- case 15: SetBitFields15();break;
- case 16: SetBitFields16();break;
- default: biBitCount = bits; SetRGB();break;
- }
- }
- void SetSpace(int csp,int bits) {
- biSize = sizeof(BITMAPINFOHEADER);
- biCompression=csp;
- biBitCount=bits;
- biSizeImage=labs(biBitCount*biWidth*biHeight)>>3;
- }
- void SetSpace(int csp) {
- int bits=0;
- switch(csp){
- case fccYUV:
- bits=24;break;
- case fccYUY2:
- case fccUYVY:
- case fccYVYU:
- bits=16;break;
- case fccYV12:
- case fccIYUV:
- case fccI420:
- bits=12;break;
- }
- if (csp != 0 && csp != 3 && biHeight > 0)
- biHeight *= -1; // YUV formats uses should have height < 0
- SetSpace(csp,bits);
- }
-
-};
-
-struct IAudioDecoder
-{
- WAVEFORMATEX in_fmt;
- const CodecInfo& record;
- IAudioDecoder(const CodecInfo& r, const WAVEFORMATEX* w) : record(r)
- {
- in_fmt = *w;
- }
-};
-
-struct IAudioEncoder
-{
- IAudioEncoder(const CodecInfo&, WAVEFORMATEX*) {}
- // you do not need this one...
-};
-
-struct IVideoDecoder
-{
- int VBUFSIZE;
- int QMARKHI;
- int QMARKLO;
- int DMARKHI;
- int DMARKLO;
-
- enum CAPS
- {
- CAP_NONE = 0,
- CAP_YUY2 = 1,
- CAP_YV12 = 2,
- CAP_IYUV = 4,
- CAP_UYVY = 8,
- CAP_YVYU = 16,
- CAP_I420 = 32,
- };
- enum DecodingMode
- {
- DIRECT = 0,
- REALTIME,
- REALTIME_QUALITY_AUTO,
- };
- enum DecodingState
- {
- STOP = 0,
- START,
- };
- IVideoDecoder(const CodecInfo& info, const BITMAPINFOHEADER& format) : record(info)
- {
- // implement init part
- unsigned bihs = (format.biSize < (int) sizeof(BITMAPINFOHEADER)) ?
- sizeof(BITMAPINFOHEADER) : format.biSize;
- m_bh = (BITMAPINFOHEADER*) new char[bihs];
- memcpy(m_bh, &format, bihs);
- m_State = STOP;
- //m_pFrame = 0;
- m_Mode = DIRECT;
- m_iDecpos = 0;
- m_iPlaypos = -1;
- m_fQuality = 0.0f;
- m_bCapable16b = true;
-
- }
- virtual ~IVideoDecoder(){};
- // use this one
- int Decode(void* src, size_t size, int is_keyframe, CImage* pImage)
- { return DecodeInternal(src, size, is_keyframe, pImage); }
- void Stop(){ StopInternal(); m_State = STOP;}
- void Start(){StartInternal(); m_State = START;}
- protected:
- virtual int DecodeInternal(void* src, size_t size, int is_keyframe, CImage* pImage) = 0;
- virtual void StartInternal()=0;
- virtual void StopInternal()=0;
-
- const CodecInfo& record;
- DecodingMode m_Mode; // should we do precaching (or even change Quality on the fly)
- DecodingState m_State;
- int m_iDecpos;
- int m_iPlaypos;
- float m_fQuality; // quality for the progress bar 0..1(best)
- bool m_bCapable16b;
-
- BITMAPINFOHEADER* m_bh; // format of input data (might be larger - e.g. huffyuv)
- BitmapInfo m_decoder; // format of decoder output
- BitmapInfo m_obh; // format of returned frames
-};
-
-struct IRtConfig
-{
-};
-
-
-
-#endif
-
#endif