📄 decthread.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 + -