📄 qcdmp4.c
字号:
fseek(f, 0, SEEK_END); end = ftell(f); fseek(f, cur, SEEK_SET); return end;}static void show_error(HWND hwnd, char *message, ...){ if (m_show_errors) MessageBox(hwnd, message, "Error", MB_OK);}static void config_init(){ //char *p=INI_FILE; //GetModuleFileName(NULL,INI_FILE,_MAX_PATH); //while (*p) p++; //while (p >= INI_FILE && *p != '.') p--; //strcpy(p+1,"ini"); module.QCDCallbacks.Service(opGetPluginSettingsFile, INI_FILE, MAX_PATH, 0);}void config_read(){ char priority[10]; char resolution[10]; char show_errors[10]; char use_for_aac[10]; char downmix[10]; char vbr_display[10]; config_init(); strcpy(show_errors, "1"); strcpy(priority, "3"); strcpy(resolution, "0"); strcpy(use_for_aac, "1"); strcpy(downmix, "0"); strcpy(vbr_display, "1"); //strcpy(titleformat, "%7"); RS(priority); RS(resolution); RS(show_errors); RS(use_for_aac); RS(downmix); RS(vbr_display); //RS(titleformat); m_priority = atoi(priority); m_resolution = atoi(resolution); m_show_errors = atoi(show_errors); m_use_for_aac = atoi(use_for_aac); m_downmix = atoi(downmix); m_vbr_display = atoi(vbr_display);}void config_write(){ char priority[10]; char resolution[10]; char show_errors[10]; char use_for_aac[10]; char downmix[10]; char vbr_display[10]; itoa(m_priority, priority, 10); itoa(m_resolution, resolution, 10); itoa(m_show_errors, show_errors, 10); itoa(m_use_for_aac, use_for_aac, 10); itoa(m_downmix, downmix, 10); itoa(m_vbr_display, vbr_display, 10); WS(priority); WS(resolution); WS(show_errors); WS(use_for_aac); WS(downmix); WS(vbr_display); //WS(titleformat);}int Initialize(QCDModInfo *ModInfo, int flags){ ModInfo->moduleString = "MP4 Plug-in v" FAAD2_VERSION; module.hMainWindow = (HWND)module.QCDCallbacks.Service(opGetParentWnd, 0, 0, 0); // read config from config file config_read(); ModInfo->moduleExtensions = !m_use_for_aac ? "MP4:M4A" : "MP4:M4A:AAC"; // return TRUE for successful initialization return 1;}//----------------------------------------------------------------------------void ShutDown(int flags) { Stop(mp4state.filename, STOPFLAG_FORCESTOP);}///* Convert UNICODE to UTF-8// Return number of bytes written *///int unicodeToUtf8 ( const WCHAR* lpWideCharStr, char* lpMultiByteStr, int cwcChars )//{// const unsigned short* pwc = (unsigned short *)lpWideCharStr;// unsigned char* pmb = (unsigned char *)lpMultiByteStr;// const unsigned short* pwce;// size_t cBytes = 0;//// if ( cwcChars >= 0 ) {// pwce = pwc + cwcChars;// } else {// pwce = (unsigned short *)((size_t)-1);// }//// while ( pwc < pwce ) {// unsigned short wc = *pwc++;//// if ( wc < 0x00000080 ) {// *pmb++ = (char)wc;// cBytes++;// } else// if ( wc < 0x00000800 ) {// *pmb++ = (char)(0xC0 | ((wc >> 6) & 0x1F));// cBytes++;// *pmb++ = (char)(0x80 | (wc & 0x3F));// cBytes++;// } else// if ( wc < 0x00010000 ) {// *pmb++ = (char)(0xE0 | ((wc >> 12) & 0x0F));// cBytes++;// *pmb++ = (char)(0x80 | ((wc >> 6) & 0x3F));// cBytes++;// *pmb++ = (char)(0x80 | (wc & 0x3F));// cBytes++;// }// if ( wc == L'\0' )// return cBytes;// }//// return cBytes;//}/////* Convert UTF-8 coded string to UNICODE// Return number of characters converted *///int utf8ToUnicode ( const char* lpMultiByteStr, WCHAR* lpWideCharStr, int cmbChars )//{// const unsigned char* pmb = (unsigned char *)lpMultiByteStr;// unsigned short* pwc = (unsigned short *)lpWideCharStr;// const unsigned char* pmbe;// size_t cwChars = 0;//// if ( cmbChars >= 0 ) {// pmbe = pmb + cmbChars;// } else {// pmbe = (unsigned char *)((size_t)-1);// }//// while ( pmb < pmbe ) {// char mb = *pmb++;// unsigned int cc = 0;// unsigned int wc;//// while ( (cc < 7) && (mb & (1 << (7 - cc)))) {// cc++;// }//// if ( cc == 1 || cc > 6 ) // illegal character combination for UTF-8// continue;//// if ( cc == 0 ) {// wc = mb;// } else {// wc = (mb & ((1 << (7 - cc)) - 1)) << ((cc - 1) * 6);// while ( --cc > 0 ) {// if ( pmb == pmbe ) // reached end of the buffer// return cwChars;// mb = *pmb++;// if ( ((mb >> 6) & 0x03) != 2 ) // not part of multibyte character// return cwChars;// wc |= (mb & 0x3F) << ((cc - 1) * 6);// }// }//// if ( wc & 0xFFFF0000 )// wc = L'?';// *pwc++ = wc;// cwChars++;// if ( wc == L'\0' )// return cwChars;// }//// return cwChars;//}/////* convert Windows ANSI to UTF-8 *///int ConvertANSIToUTF8 ( const char* ansi, char* utf8 )//{// WCHAR* wszValue; // Unicode value// size_t ansi_len;// size_t len;//// *utf8 = '\0';// if ( ansi == NULL )// return 0;//// ansi_len = strlen ( ansi );//// if ( (wszValue = (WCHAR *)malloc ( (ansi_len + 1) * 2 )) == NULL )// return 0;//// /* Convert ANSI value to Unicode */// if ( (len = MultiByteToWideChar ( CP_ACP, 0, ansi, ansi_len + 1, wszValue, (ansi_len + 1) * 2 )) == 0 ) {// free ( wszValue );// return 0;// }//// /* Convert Unicode value to UTF-8 */// if ( (len = unicodeToUtf8 ( wszValue, utf8, -1 )) == 0 ) {// free ( wszValue );// return 0;// }//// free ( wszValue );//// return len-1;//}/////* convert UTF-8 to Windows ANSI *///int ConvertUTF8ToANSI ( const char* utf8, char* ansi )//{// WCHAR* wszValue; // Unicode value// size_t utf8_len;// size_t len;//// *ansi = '\0';// if ( utf8 == NULL )// return 0;//// utf8_len = strlen ( utf8 );//// if ( (wszValue = (WCHAR *)malloc ( (utf8_len + 1) * 2 )) == NULL )// return 0;//// /* Convert UTF-8 value to Unicode */// if ( (len = utf8ToUnicode ( utf8, wszValue, utf8_len + 1 )) == 0 ) {// free ( wszValue );// return 0;// }//// /* Convert Unicode value to ANSI */// if ( (len = WideCharToMultiByte ( CP_ACP, 0, wszValue, -1, ansi, (utf8_len + 1) * 2, NULL, NULL )) == 0 ) {// free ( wszValue );// return 0;// }//// free ( wszValue );//// return len-1;//}////BOOL uSetDlgItemText(HWND hwnd, int id, const char *str)//{// char *temp;// size_t len;// int r;//// if (!str) return FALSE;// if (!*str) return TRUE;// len = strlen(str);// temp = malloc(len+1);// if (!temp) return FALSE;// r = ConvertUTF8ToANSI(str, temp);// if (r > 0)// SetDlgItemText(hwnd, id, temp);// free(temp);//// return r>0 ? TRUE : FALSE;//}////UINT uGetDlgItemText(HWND hwnd, int id, char *str, int max)//{// char *temp, *utf8;// int len;// HWND w;//// if (!str || !max) return 0;// *str = '\0';// w = GetDlgItem(hwnd, id);// len = GetWindowTextLength(w);// temp = malloc(len+1);// if (!temp) return 0;// utf8 = malloc((len+1)*4);// if (!utf8)// {// free(temp);// return 0;// }//// len = GetWindowText(w, temp, len+1);// if (len > 0)// {// len = ConvertANSIToUTF8(temp, utf8);// if (len > max-1)// {// len = max-1;// utf8[max] = '\0';// }// memcpy(str, utf8, len+1);// }//// free(temp);// free(utf8);//// return len;//}////BOOL CALLBACK mp4_info_dialog_proc(HWND hwndDlg, UINT message,// WPARAM wParam, LPARAM lParam)//{// char *file_info;// MP4FileHandle file;// char *pVal, dummy1[1024], dummy3;// short dummy, dummy2;// char temp[1024];// struct medialib_tags tags;// tags.count = 0;// tags.tags = NULL;////#ifdef DEBUG_OUTPUT// in_mp4_DebugOutput("mp4_info_dialog_proc");//#endif//// switch (message) {// case WM_INITDIALOG:// EnableWindow(GetDlgItem(hwndDlg,IDC_CONVERT), FALSE);// ShowWindow(GetDlgItem(hwndDlg,IDC_CONVERT), SW_HIDE);// EnableWindow(GetDlgItem(hwndDlg,IDC_CONVERT1), FALSE);// ShowWindow(GetDlgItem(hwndDlg,IDC_CONVERT1), SW_HIDE);// EnableWindow(GetDlgItem(hwndDlg,IDC_CONVERT2), FALSE);// ShowWindow(GetDlgItem(hwndDlg,IDC_CONVERT2), SW_HIDE);//// file = MP4Read(info_fn, 0);//// if (file == MP4_INVALID_FILE_HANDLE)// return FALSE;//// file_info = MP4Info(file, MP4_INVALID_TRACK_ID);// SetDlgItemText(hwndDlg, IDC_INFOTEXT, file_info);// free(file_info);//// /* get Metadata *///// pVal = NULL;// if (MP4GetMetadataName(file, &pVal))// uSetDlgItemText(hwndDlg,IDC_METANAME, pVal);//// pVal = NULL;// if (MP4GetMetadataArtist(file, &pVal))// uSetDlgItemText(hwndDlg,IDC_METAARTIST, pVal);//// pVal = NULL;// if (MP4GetMetadataWriter(file, &pVal))// uSetDlgItemText(hwndDlg,IDC_METAWRITER, pVal);//// pVal = NULL;// if (MP4GetMetadataComment(file, &pVal))// uSetDlgItemText(hwndDlg,IDC_METACOMMENTS, pVal);//// pVal = NULL;// if (MP4GetMetadataAlbum(file, &pVal))// uSetDlgItemText(hwndDlg,IDC_METAALBUM, pVal);//// pVal = NULL;// if (MP4GetMetadataGenre(file, &pVal))// uSetDlgItemText(hwndDlg,IDC_METAGENRE, pVal);//// dummy = 0;// MP4GetMetadataTempo(file, &dummy);// if (dummy)// {// wsprintf(dummy1, "%d", dummy);// SetDlgItemText(hwndDlg,IDC_METATEMPO, dummy1);// }//// dummy = 0; dummy2 = 0;// MP4GetMetadataTrack(file, &dummy, &dummy2);// if (dummy)// {// wsprintf(dummy1, "%d", dummy);// SetDlgItemText(hwndDlg,IDC_METATRACK1, dummy1);// }// if (dummy2)// {// wsprintf(dummy1, "%d", dummy2);// SetDlgItemText(hwndDlg,IDC_METATRACK2, dummy1);// }//// dummy = 0; dummy2 = 0;// MP4GetMetadataDisk(file, &dummy, &dummy2);// if (dummy)// {// wsprintf(dummy1, "%d", dummy);// SetDlgItemText(hwndDlg,IDC_METADISK1, dummy1);// }// if (dummy2)// {// wsprintf(dummy1, "%d", dummy2);// SetDlgItemText(hwndDlg,IDC_METADISK2, dummy1);// }//// pVal = NULL;// if (MP4GetMetadataYear(file, &pVal))// uSetDlgItemText(hwndDlg,IDC_METAYEAR, pVal);//// dummy3 = 0;// MP4GetMetadataCompilation(file, &dummy3);// if (dummy3)// SendMessage(GetDlgItem(hwndDlg, IDC_METACOMPILATION), BM_SETCHECK, BST_CHECKED, 0);//// /* ! Metadata *///// MP4Close(file);//// return TRUE;//// case WM_COMMAND:// switch (LOWORD(wParam)) {// case IDCANCEL:// EndDialog(hwndDlg, wParam);// return TRUE;// case IDOK://// /* save Metadata changes *///// tag_delete(&tags);// file = MP4Read(info_fn, 0);// if (file != MP4_INVALID_FILE_HANDLE)// {// ReadMP4Tag(file, &tags);// MP4Close(file);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -