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

📄 qcdmp4.c

📁 BHE的解码程序
💻 C
📖 第 1 页 / 共 5 页
字号:
//}


#ifdef DEBUG_OUTPUT
void in_mp4_DebugOutput(char *message)
{
    char s[1024];

    sprintf(s, "in_mp4: %s: %s", mp4state.filename, message);
    OutputDebugString(s);
}
#endif

int file_length(FILE *f)
{
    long end = 0;
    long cur = ftell(f);
    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)
//        {

⌨️ 快捷键说明

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