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

📄 decthread.c

📁 the mpeg2/4 aac decoder
💻 C
字号:
/* * function: Decoding thread for aacDECdrop * * This program is distributed under the GNU General Public License, version 2. * A copy of this license is included with this source. * * Copyright (C) 2002 John Edwards * * last mod: aacDecdrop decoder last updated 2002-03-14 */#include <windows.h>#include <time.h>#include <string.h>#include "wave_out.h"#include "decode.h"#include "misc.h"extern int decoding_done;extern int animate;extern double file_complete;extern int totalfiles;extern int numfiles;int dec_mode;int outputFormat;int fileType;int object_type;extern char* fileName;int stop_decoding;typedef struct enclist_tag {	char *filename;	struct enclist_tag *next;} enclist_t;enclist_t *head = NULL;CRITICAL_SECTION mutex;DWORD WINAPI decode_thread(LPVOID arg);void decthread_init(void){	int thread_id;	HANDLE thand;	numfiles = 0;	totalfiles = 0;	file_complete = 0.0;	InitializeCriticalSection(&mutex);	thand = CreateThread(NULL, 0, decode_thread, NULL, 0, &thread_id);	if (thand == NULL) {		// something bad happened, might want to deal with that, maybe...	}}void decthread_addfile(char *file){	char *filename;	enclist_t *entry, *node;	if (file == NULL) return;	// create entry	filename = strdup(file);	entry = (enclist_t *)malloc(sizeof(enclist_t));	entry->filename = filename;	entry->next = NULL;	EnterCriticalSection(&mutex);	// insert entry	if (head == NULL) {		head = entry;	} else {		node = head;		while (node->next != NULL)			node = node->next;		node->next = entry;	}	numfiles++;	totalfiles++;	LeaveCriticalSection(&mutex);}/* * the caller is responsible for deleting the pointer */char *_getfile(){	char *filename;	enclist_t *entry;	EnterCriticalSection(&mutex);	if (head == NULL) {		LeaveCriticalSection(&mutex);		return NULL;	}	// pop entry	entry = head;	head = head->next;	filename = entry->filename;	free(entry);	LeaveCriticalSection(&mutex);	return filename;}void decthread_set_decode_mode(int decode_mode){	dec_mode = decode_mode;}void decthread_set_outputFormat(int output_format){	outputFormat = output_format;}void decthread_set_fileType(int file_type){	fileType = file_type;}void decthread_set_object_type(int object_type){	object_type = object_type;}void _error(char *errormessage){	// do nothing}void _update(long total, long done){	file_complete = (double)done / (double)total;}DWORD WINAPI decode_thread(LPVOID arg){	char *in_file;	while (!decoding_done)	{		while (in_file = _getfile())		{			aac_dec_opt      dec_opts;			animate = 1;			if(stop_decoding){				numfiles--;				break;			}			set_filename(in_file);			dec_opts.progress_update = _update;			dec_opts.filename = in_file;			dec_opts.decode_mode = dec_mode;			dec_opts.output_format = outputFormat;			dec_opts.file_type = fileType;			dec_opts.object_type = object_type;			fileName = in_file;			aac_decode(&dec_opts);			numfiles--;		} /* Finished this file, loop around to next... */		file_complete = 0.0;		animate = 0;		totalfiles = 0;		numfiles = 0;		Sleep(500);	} 	DeleteCriticalSection(&mutex);	return 0;}/******************************** end of decthread.c ********************************/

⌨️ 快捷键说明

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