⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 w32g_ogg_dll.c

📁 MIDI解码程序(用VC编写)
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
    TiMidity++ -- MIDI to WAVE converter and player
    Copyright (C) 1999-2002 Masanao Izumo <mo@goice.co.jp>
    Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

/***************************************************************
 name: ogg_dll  dll: ogg.dll 
***************************************************************/

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif /* HAVE_CONFIG_H */
#include "interface.h"

#ifdef AU_VORBIS_DLL

#include <windows.h>
#include <ogg/ogg.h>

extern int load_ogg_dll(void);
extern void free_ogg_dll(void);

typedef void (*type_oggpack_writeinit)(oggpack_buffer *b);
typedef void (*type_oggpack_reset)(oggpack_buffer *b);
typedef void (*type_oggpack_writeclear)(oggpack_buffer *b);
typedef void (*type_oggpack_readinit)(oggpack_buffer *b,unsigned char *buf,int bytes);
typedef void (*type_oggpack_write)(oggpack_buffer *b,unsigned long value,int bits);
typedef long (*type_oggpack_look)(oggpack_buffer *b,int bits);
typedef long (*type_oggpack_look_huff)(oggpack_buffer *b,int bits);
typedef long (*type_oggpack_look1)(oggpack_buffer *b);
typedef void (*type_oggpack_adv)(oggpack_buffer *b,int bits);
typedef int  (*type_oggpack_adv_huff)(oggpack_buffer *b,int bits);
typedef void (*type_oggpack_adv1)(oggpack_buffer *b);
typedef long (*type_oggpack_read)(oggpack_buffer *b,int bits);
typedef long (*type_oggpack_read1)(oggpack_buffer *b);
typedef long (*type_oggpack_bytes)(oggpack_buffer *b);
typedef long (*type_oggpack_bits)(oggpack_buffer *b);
typedef unsigned char*(*type_oggpack_get_buffer)(oggpack_buffer *b);
typedef int     (*type_ogg_stream_packetin)(ogg_stream_state *os, ogg_packet *op);
typedef int     (*type_ogg_stream_pageout)(ogg_stream_state *os, ogg_page *og);
typedef int     (*type_ogg_stream_flush)(ogg_stream_state *os, ogg_page *og);
typedef int     (*type_ogg_sync_init)(ogg_sync_state *oy);
typedef int     (*type_ogg_sync_clear)(ogg_sync_state *oy);
typedef int     (*type_ogg_sync_reset)(ogg_sync_state *oy);
typedef int(*type_ogg_sync_destroy)(ogg_sync_state *oy);
typedef char   *(*type_ogg_sync_buffer)(ogg_sync_state *oy, long size);
typedef int     (*type_ogg_sync_wrote)(ogg_sync_state *oy, long bytes);
typedef long    (*type_ogg_sync_pageseek)(ogg_sync_state *oy,ogg_page *og);
typedef int     (*type_ogg_sync_pageout)(ogg_sync_state *oy, ogg_page *og);
typedef int     (*type_ogg_stream_pagein)(ogg_stream_state *os, ogg_page *og);
typedef int     (*type_ogg_stream_packetout)(ogg_stream_state *os,ogg_packet *op);
typedef int     (*type_ogg_stream_init)(ogg_stream_state *os,int serialno);
typedef int     (*type_ogg_stream_clear)(ogg_stream_state *os);
typedef int     (*type_ogg_stream_reset)(ogg_stream_state *os);
typedef int     (*type_ogg_stream_destroy)(ogg_stream_state *os);
typedef int     (*type_ogg_stream_eos)(ogg_stream_state *os);
typedef int     (*type_ogg_page_version)(ogg_page *og);
typedef int     (*type_ogg_page_continued)(ogg_page *og);
typedef int     (*type_ogg_page_bos)(ogg_page *og);
typedef int     (*type_ogg_page_eos)(ogg_page *og);
typedef ogg_int64_t (*type_ogg_page_granulepos)(ogg_page *og);
typedef int     (*type_ogg_page_serialno)(ogg_page *og);
typedef long    (*type_ogg_page_pageno)(ogg_page *og);
typedef int     (*type_ogg_page_packets)(ogg_page *og);
////typedef void    (*type_ogg_packet_clear)(ogg_packet *op);

static struct ogg_dll_ {
//	 type_oggpack_writeinit oggpack_writeinit;
//	 type_oggpack_reset oggpack_reset;
//	 type_oggpack_writeclear oggpack_writeclear;
//	 type_oggpack_readinit oggpack_readinit;
//	 type_oggpack_write oggpack_write;
//	 type_oggpack_look oggpack_look;
//	 type_oggpack_look_huff oggpack_look_huff;
//	 type_oggpack_look1 oggpack_look1;
//	 type_oggpack_adv oggpack_adv;
//	 type_oggpack_adv_huff oggpack_adv_huff;
//	 type_oggpack_adv1 oggpack_adv1;
//	 type_oggpack_read oggpack_read;
//	 type_oggpack_read1 oggpack_read1;
//	 type_oggpack_bytes oggpack_bytes;
//	 type_oggpack_bits oggpack_bits;
//	 type_oggpack_get_buffer oggpack_get_buffer;
	 type_ogg_stream_packetin ogg_stream_packetin;
	 type_ogg_stream_pageout ogg_stream_pageout;
//	 type_ogg_stream_flush ogg_stream_flush;
//	 type_ogg_sync_init ogg_sync_init;
//	 type_ogg_sync_clear ogg_sync_clear;
//	 type_ogg_sync_reset ogg_sync_reset;
//	 type_ogg_sync_destroy ogg_sync_destroy;
//	 type_ogg_sync_buffer ogg_sync_buffer;
//	 type_ogg_sync_wrote ogg_sync_wrote;
//	 type_ogg_sync_pageseek ogg_sync_pageseek;
//	 type_ogg_sync_pageout ogg_sync_pageout;
//	 type_ogg_stream_pagein ogg_stream_pagein;
//	 type_ogg_stream_packetout ogg_stream_packetout;
	 type_ogg_stream_init ogg_stream_init;
	 type_ogg_stream_clear ogg_stream_clear;
//	 type_ogg_stream_reset ogg_stream_reset;
//	 type_ogg_stream_destroy ogg_stream_destroy;
//	 type_ogg_stream_eos ogg_stream_eos;
//	 type_ogg_page_version ogg_page_version;
//	 type_ogg_page_continued ogg_page_continued;
//	 type_ogg_page_bos ogg_page_bos;
	 type_ogg_page_eos ogg_page_eos;
//	 type_ogg_page_granulepos ogg_page_granulepos;
//	 type_ogg_page_serialno ogg_page_serialno;
//	 type_ogg_page_pageno ogg_page_pageno;
//	 type_ogg_page_packets ogg_page_packets;
////	 type_ogg_packet_clear ogg_packet_clear;
} ogg_dll;

static volatile HANDLE h_ogg_dll = NULL;

void free_ogg_dll(void)
{
	if(h_ogg_dll){
		FreeLibrary(h_ogg_dll);
		h_ogg_dll = NULL;
	}
}

int load_ogg_dll(void)
{
	if(!h_ogg_dll){
		h_ogg_dll = LoadLibrary("ogg.dll");
		if(!h_ogg_dll) return -1;
	}
//	ogg_dll.oggpack_writeinit = (type_oggpack_writeinit)GetProcAddress(h_ogg_dll,"oggpack_writeinit");
//	if(!ogg_dll.oggpack_writeinit){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_reset = (type_oggpack_reset)GetProcAddress(h_ogg_dll,"oggpack_reset");
//	if(!ogg_dll.oggpack_reset){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_writeclear = (type_oggpack_writeclear)GetProcAddress(h_ogg_dll,"oggpack_writeclear");
//	if(!ogg_dll.oggpack_writeclear){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_readinit = (type_oggpack_readinit)GetProcAddress(h_ogg_dll,"oggpack_readinit");
//	if(!ogg_dll.oggpack_readinit){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_write = (type_oggpack_write)GetProcAddress(h_ogg_dll,"oggpack_write");
//	if(!ogg_dll.oggpack_write){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_look = (type_oggpack_look)GetProcAddress(h_ogg_dll,"oggpack_look");
//	if(!ogg_dll.oggpack_look){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_look_huff = (type_oggpack_look_huff)GetProcAddress(h_ogg_dll,"oggpack_look_huff");
//	if(!ogg_dll.oggpack_look_huff){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_look1 = (type_oggpack_look1)GetProcAddress(h_ogg_dll,"oggpack_look1");
//	if(!ogg_dll.oggpack_look1){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_adv = (type_oggpack_adv)GetProcAddress(h_ogg_dll,"oggpack_adv");
//	if(!ogg_dll.oggpack_adv){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_adv_huff = (type_oggpack_adv_huff)GetProcAddress(h_ogg_dll,"oggpack_adv_huff");
//	if(!ogg_dll.oggpack_adv_huff){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_adv1 = (type_oggpack_adv1)GetProcAddress(h_ogg_dll,"oggpack_adv1");
//	if(!ogg_dll.oggpack_adv1){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_read = (type_oggpack_read)GetProcAddress(h_ogg_dll,"oggpack_read");
//	if(!ogg_dll.oggpack_read){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_read1 = (type_oggpack_read1)GetProcAddress(h_ogg_dll,"oggpack_read1");
//	if(!ogg_dll.oggpack_read1){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_bytes = (type_oggpack_bytes)GetProcAddress(h_ogg_dll,"oggpack_bytes");
//	if(!ogg_dll.oggpack_bytes){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_bits = (type_oggpack_bits)GetProcAddress(h_ogg_dll,"oggpack_bits");
//	if(!ogg_dll.oggpack_bits){ free_ogg_dll(); return -1; }
//	ogg_dll.oggpack_get_buffer = (type_oggpack_get_buffer)GetProcAddress(h_ogg_dll,"oggpack_get_buffer");
//	if(!ogg_dll.oggpack_get_buffer){ free_ogg_dll(); return -1; }
	ogg_dll.ogg_stream_packetin = (type_ogg_stream_packetin)GetProcAddress(h_ogg_dll,"ogg_stream_packetin");
	if(!ogg_dll.ogg_stream_packetin){ free_ogg_dll(); return -1; }
	ogg_dll.ogg_stream_pageout = (type_ogg_stream_pageout)GetProcAddress(h_ogg_dll,"ogg_stream_pageout");
	if(!ogg_dll.ogg_stream_pageout){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_stream_flush = (type_ogg_stream_flush)GetProcAddress(h_ogg_dll,"ogg_stream_flush");
//	if(!ogg_dll.ogg_stream_flush){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_sync_init = (type_ogg_sync_init)GetProcAddress(h_ogg_dll,"ogg_sync_init");
//	if(!ogg_dll.ogg_sync_init){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_sync_clear = (type_ogg_sync_clear)GetProcAddress(h_ogg_dll,"ogg_sync_clear");
//	if(!ogg_dll.ogg_sync_clear){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_sync_reset = (type_ogg_sync_reset)GetProcAddress(h_ogg_dll,"ogg_sync_reset");
//	if(!ogg_dll.ogg_sync_reset){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_sync_destroy = (type_ogg_sync_destroy)GetProcAddress(h_ogg_dll,"ogg_sync_destroy");
//	if(!ogg_dll.ogg_sync_destroy){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_sync_buffer = (type_ogg_sync_buffer)GetProcAddress(h_ogg_dll,"ogg_sync_buffer");
//	if(!ogg_dll.ogg_sync_buffer){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_sync_wrote = (type_ogg_sync_wrote)GetProcAddress(h_ogg_dll,"ogg_sync_wrote");
//	if(!ogg_dll.ogg_sync_wrote){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_sync_pageseek = (type_ogg_sync_pageseek)GetProcAddress(h_ogg_dll,"ogg_sync_pageseek");
//	if(!ogg_dll.ogg_sync_pageseek){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_sync_pageout = (type_ogg_sync_pageout)GetProcAddress(h_ogg_dll,"ogg_sync_pageout");
//	if(!ogg_dll.ogg_sync_pageout){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_stream_pagein = (type_ogg_stream_pagein)GetProcAddress(h_ogg_dll,"ogg_stream_pagein");
//	if(!ogg_dll.ogg_stream_pagein){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_stream_packetout = (type_ogg_stream_packetout)GetProcAddress(h_ogg_dll,"ogg_stream_packetout");
//	if(!ogg_dll.ogg_stream_packetout){ free_ogg_dll(); return -1; }
	ogg_dll.ogg_stream_init = (type_ogg_stream_init)GetProcAddress(h_ogg_dll,"ogg_stream_init");
	if(!ogg_dll.ogg_stream_init){ free_ogg_dll(); return -1; }
	ogg_dll.ogg_stream_clear = (type_ogg_stream_clear)GetProcAddress(h_ogg_dll,"ogg_stream_clear");
	if(!ogg_dll.ogg_stream_clear){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_stream_reset = (type_ogg_stream_reset)GetProcAddress(h_ogg_dll,"ogg_stream_reset");
//	if(!ogg_dll.ogg_stream_reset){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_stream_destroy = (type_ogg_stream_destroy)GetProcAddress(h_ogg_dll,"ogg_stream_destroy");
//	if(!ogg_dll.ogg_stream_destroy){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_stream_eos = (type_ogg_stream_eos)GetProcAddress(h_ogg_dll,"ogg_stream_eos");
//	if(!ogg_dll.ogg_stream_eos){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_page_version = (type_ogg_page_version)GetProcAddress(h_ogg_dll,"ogg_page_version");
//	if(!ogg_dll.ogg_page_version){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_page_continued = (type_ogg_page_continued)GetProcAddress(h_ogg_dll,"ogg_page_continued");
//	if(!ogg_dll.ogg_page_continued){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_page_bos = (type_ogg_page_bos)GetProcAddress(h_ogg_dll,"ogg_page_bos");
//	if(!ogg_dll.ogg_page_bos){ free_ogg_dll(); return -1; }
	ogg_dll.ogg_page_eos = (type_ogg_page_eos)GetProcAddress(h_ogg_dll,"ogg_page_eos");
	if(!ogg_dll.ogg_page_eos){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_page_granulepos = (type_ogg_page_granulepos)GetProcAddress(h_ogg_dll,"ogg_page_granulepos");
//	if(!ogg_dll.ogg_page_granulepos){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_page_serialno = (type_ogg_page_serialno)GetProcAddress(h_ogg_dll,"ogg_page_serialno");
//	if(!ogg_dll.ogg_page_serialno){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_page_pageno = (type_ogg_page_pageno)GetProcAddress(h_ogg_dll,"ogg_page_pageno");
//	if(!ogg_dll.ogg_page_pageno){ free_ogg_dll(); return -1; }
//	ogg_dll.ogg_page_packets = (type_ogg_page_packets)GetProcAddress(h_ogg_dll,"ogg_page_packets");
//	if(!ogg_dll.ogg_page_packets){ free_ogg_dll(); return -1; }
////	ogg_dll.ogg_packet_clear = (type_ogg_packet_clear)GetProcAddress(h_ogg_dll,"ogg_packet_clear");
////	if(!ogg_dll.ogg_packet_clear){ free_ogg_dll(); return -1; }
	return 0;
}

#if 0
void oggpack_writeinit(oggpack_buffer *b)
{
	if(h_ogg_dll){
		ogg_dll.oggpack_writeinit(b);
	}
}

void oggpack_reset(oggpack_buffer *b)
{
	if(h_ogg_dll){
		ogg_dll.oggpack_reset(b);
	}
}

void oggpack_writeclear(oggpack_buffer *b)
{
	if(h_ogg_dll){
		ogg_dll.oggpack_writeclear(b);
	}
}

void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes)
{
	if(h_ogg_dll){
		ogg_dll.oggpack_readinit(b,buf,bytes);
	}
}

void oggpack_write(oggpack_buffer *b,unsigned long value,int bits)
{
	if(h_ogg_dll){
		ogg_dll.oggpack_write(b,value,bits);
	}
}

long oggpack_look(oggpack_buffer *b,int bits)
{
	if(h_ogg_dll){
		return ogg_dll.oggpack_look(b,bits);
	}
	return (long )0;
}

long oggpack_look_huff(oggpack_buffer *b,int bits)
{
	if(h_ogg_dll){
		return ogg_dll.oggpack_look_huff(b,bits);
	}
	return (long )0;
}

long oggpack_look1(oggpack_buffer *b)
{
	if(h_ogg_dll){
		return ogg_dll.oggpack_look1(b);
	}
	return (long )0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -