aboutsummaryrefslogtreecommitdiff
path: root/Src/nsv/dec_if.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/nsv/dec_if.h')
-rw-r--r--Src/nsv/dec_if.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/Src/nsv/dec_if.h b/Src/nsv/dec_if.h
new file mode 100644
index 00000000..d0232327
--- /dev/null
+++ b/Src/nsv/dec_if.h
@@ -0,0 +1,98 @@
+/*
+** dec_if.h - common decoder interface for nsvplay/nsvplayx
+**
+** Copyright (C) 2001-2003 Nullsoft, Inc.
+**
+** This software is provided 'as-is', without any express or implied warranty.
+** In no event will the authors be held liable for any damages arising from the use of this software.
+**
+** Permission is granted to anyone to use this software for any purpose, including commercial
+** applications, and to alter it and redistribute it freely, subject to the following restrictions:
+** 1. The origin of this software must not be misrepresented; you must not claim that you wrote the
+** original software. If you use this software in a product, an acknowledgment in the product
+** documentation would be appreciated but is not required.
+** 2. Altered source versions must be plainly marked as such, and must not be misrepresented as
+** being the original software.
+** 3. This notice may not be removed or altered from any source distribution.
+**
+*/
+
+#ifndef _NSV_DEC_IF_H_
+#define _NSV_DEC_IF_H_
+
+#ifndef _WA_IPC_H_ // these are also defined in Winamp/wa_ipc.h
+struct YV12_PLANE {
+ unsigned char* baseAddr;
+ long rowBytes;
+} ;
+
+struct YV12_PLANES {
+ YV12_PLANE y;
+ YV12_PLANE u;
+ YV12_PLANE v;
+} ;
+#endif
+
+class IVideoDecoder
+{
+ public:
+ virtual ~IVideoDecoder() { }
+
+ // decode returns 0 on success
+ // but *out can be NULL, meaning no new frame is available,
+ // but all is well
+ virtual int decode(int need_kf,
+ void *in, int in_len,
+ void **out, // out is set to a pointer to data
+ unsigned int *out_type, // 'Y','V','1','2' is currently defined
+ int *is_kf)=0;
+ virtual void flush()=0;
+};
+
+class IAudioDecoder
+{
+ public:
+ virtual ~IAudioDecoder() { }
+
+ // returns -1 on error, 0 on success (done with data in 'in'), 1 on success
+ // but to pass 'in' again next time around.
+ virtual int decode(void *in, int in_len,
+ void *out, int *out_len, // out_len is read and written to
+ unsigned int out_fmt[8])=0; // out_fmt is written to
+ // ex: 'PCM ', srate, nch, bps
+ // or 'NONE' :)
+ virtual void flush()=0;
+};
+
+class IAudioOutput
+{
+ public:
+ virtual ~IAudioOutput() { }
+ virtual int canwrite()=0; // returns bytes writeable
+ virtual void write(void *buf, int len)=0;
+ virtual unsigned long long getpos()=0;
+ virtual unsigned long long getwritepos()=0;
+ virtual void flush(unsigned int newtime)=0;
+ virtual int isplaying(void) { return 1; }
+ virtual void pause(int pause) { }
+ virtual void setvolume(int volume) { }
+ virtual void setpan(int pan) { }
+ virtual void getdescstr(char *buf) { *buf=0; }
+};
+
+
+/*
+** The DLL must export one of these symbols (unmangled, i.e. using extern "C).
+**
+** IAudioDecoder *CreateAudioDecoder(unsigned int type, IAudioOutput **output);
+** IVideoDecoder *CreateVideoDecoder(int w, int h, double framerate, unsigned int type, int *flip);
+**
+** the functions should return NULL if the conversion is not possible (or
+** is not the correct format)
+**
+** The DLL must be in <program files>\common files\nsv, and must be named
+** nsvdec_*.dll.
+**
+*/
+
+#endif//_NSV_DEC_IF_H_