1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /*
- ** 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_
|