From cc2160de5cc05dc3aa77f3a34358e66f6193c8c9 Mon Sep 17 00:00:00 2001 From: Michał Cichoń Date: Tue, 26 Jun 2012 20:35:30 +0200 Subject: Add support for AAC. --- faad2/src/aacDECdrop/main.c | 678 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 678 insertions(+) create mode 100644 faad2/src/aacDECdrop/main.c (limited to 'faad2/src/aacDECdrop/main.c') diff --git a/faad2/src/aacDECdrop/main.c b/faad2/src/aacDECdrop/main.c new file mode 100644 index 0000000..ca5f0c4 --- /dev/null +++ b/faad2/src/aacDECdrop/main.c @@ -0,0 +1,678 @@ +/* + * function: Main control program 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 +#include +#include +#include +#include + +#include "resource.h" +#include "decthread.h" +#include "decode.h" +#include "misc.h" + +#define LOSHORT(l) ((SHORT)(l)) +#define HISHORT(l) ((SHORT)(((DWORD)(l) >> 16) & 0xFFFF)) + +#define INI_FILE "aacDECdrop.ini" + +#define CREATEFONT(sz) \ + CreateFont((sz), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + VARIABLE_PITCH | FF_SWISS, "") + +HANDLE event = NULL; +int width = 130, height = 130; +RECT bar1, bar2, vbrBR; +int prog1 = 0, prog2 = 0; +int moving = 0; +POINT pt; +HINSTANCE hinst; +int frame = 0; +HBITMAP hbm[12], temp; +HMENU menu; +int decoding_done = 0; +int stop_decoding = 0; +double file_complete; +int totalfiles; +int numfiles; +HWND g_hwnd; +HWND qcwnd; +HFONT font2; +char *fileName; + +SettingsAAC iniSettings; // iniSettings holds the parameters for the aacDECdrop configuration + +int animate = 0; + +LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); + +BOOL CALLBACK QCProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) ; + + +/* + * Write the .ini file using the current aacDECdrop settings + */ + +int +WriteIniFile ( const char* Filename ) +{ + FILE* fp; + + if ( (fp = fopen (Filename, "w")) == NULL ) + return EOF; // could not open file + + fprintf (fp, "[aacDECdrop]\n"); + fprintf (fp, "Window_X=%i\n" , iniSettings.window_x ); + fprintf (fp, "Window_Y=%i\n" , iniSettings.window_y ); + fprintf (fp, "Always_on_top=%i\n" , iniSettings.always_on_top); + fprintf (fp, "Logerr=%i\n" , iniSettings.logerr ); + fprintf (fp, "DecodeMode=%i\n" , iniSettings.decode_mode ); + fprintf (fp, "OutputFormat=%i\n" , iniSettings.outputFormat ); + fprintf (fp, "FileType=%i\n" , iniSettings.fileType ); + fprintf (fp, "ObjectType=%i\n" , iniSettings.object_type ); + return fclose (fp); +} + +/* + * Read the .ini file and set the aacDECdrop settings + */ + +int +ReadIniFile ( FILE* fp ) +{ + char buff [256]; + int val; + + rewind ( fp ); + fgets ( buff, sizeof buff, fp ); + + if ( 0 != memcmp ( buff, "[aacDECdrop]", 12 ) ) + return EOF; + + while ( fgets ( buff, sizeof buff, fp ) != NULL ) { + if ( 1 == sscanf ( buff, "Window_X=%d" , &val ) ) iniSettings.window_x = val; + else if ( 1 == sscanf ( buff, "Window_Y=%d" , &val ) ) iniSettings.window_y = val; + else if ( 1 == sscanf ( buff, "Always_on_top=%d", &val ) ) iniSettings.always_on_top = val; + else if ( 1 == sscanf ( buff, "Logerr=%d" , &val ) ) iniSettings.logerr = val; + else if ( 1 == sscanf ( buff, "DecodeMode=%d" , &val ) ) iniSettings.decode_mode = val; + else if ( 1 == sscanf ( buff, "OutputFormat=%d" , &val ) ) iniSettings.outputFormat = val; + else if ( 1 == sscanf ( buff, "FileType=%d" , &val ) ) iniSettings.fileType = val; + else if ( 1 == sscanf ( buff, "ObjectType=%d" , &val ) ) iniSettings.object_type = val; + } + + return 0; +} + + +/* + * Get aacDECdrop settings at startup, writes .ini file, if not present + */ + +void +GetAACdecSettings ( void ) +{ + FILE* fp = NULL; + char PathAndName [] = {INI_FILE}; + + // set default values + iniSettings.window_x = 64; // default box position (x co-ord) + iniSettings.window_y = 64; // default box position (y co-ord) + iniSettings.always_on_top = 8; // default = on + iniSettings.logerr = 0; // default = off + iniSettings.decode_mode = 1; // default = 1 (decode to file) + iniSettings.outputFormat = 1; // default = 1 (16 bit PCM) + iniSettings.fileType = 1; // default = 1 (Microsoft WAV) + iniSettings.object_type = 1; // default = 1 (Low Complexity) + + // Read INI_FILE + if ( (fp = fopen (PathAndName, "r")) == NULL ) { // file does not exist: write it! + WriteIniFile ( PathAndName ); + } + else { // file does exist: read it! + ReadIniFile (fp); + fclose (fp); + } + + return; +} + +void set_always_on_top(HWND hwnd, int v) +{ + CheckMenuItem(menu, IDM_ONTOP, v ? MF_CHECKED : MF_UNCHECKED); + SetWindowPos(hwnd, v ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW | SWP_NOMOVE); + iniSettings.always_on_top = v; +} + +void set_logerr(HWND hwnd, int v) +{ + CheckMenuItem(menu, IDM_LOGERR, v ? MF_CHECKED : MF_UNCHECKED); + iniSettings.logerr = v; + set_use_dialogs(v); +} + +void set_decode_mode(int v) +{ + decthread_set_decode_mode(v); + iniSettings.decode_mode = v; +} + +void set_outputFormat(int v) +{ + decthread_set_outputFormat(v); + iniSettings.outputFormat = v; +} + +void set_fileType(int v) +{ + decthread_set_fileType(v); + iniSettings.fileType = v; +} + +void set_object_type(int v) +{ + decthread_set_object_type(v); + iniSettings.object_type = v; +} + +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) +{ + static char szAppName[] = "aacDECdrop"; + HWND hwnd; + MSG msg; + WNDCLASS wndclass; + const int width = 130; + const int height = 130; + int x; + int y; + + hinst = hInstance; + + wndclass.style = CS_HREDRAW | CS_VREDRAW; + wndclass.lpfnWndProc = WndProc; + wndclass.cbClsExtra = 0; + wndclass.cbWndExtra = 0; + wndclass.hInstance = hInstance; + wndclass.hIcon = LoadIcon(hinst, MAKEINTRESOURCE(IDI_ICON1)); + wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); + wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); + wndclass.lpszMenuName = NULL; + wndclass.lpszClassName = szAppName; + + RegisterClass(&wndclass); + + GetAACdecSettings(); + + x = max(min(iniSettings.window_x, GetSystemMetrics(SM_CXSCREEN) - width), 0); + y = max(min(iniSettings.window_y, GetSystemMetrics(SM_CYSCREEN) - height), 0); + + hwnd = CreateWindow(szAppName, "aacDECdrop", WS_POPUP | WS_DLGFRAME, x, y, + width, height, NULL, NULL, hInstance, NULL); + + g_hwnd = hwnd; + + ShowWindow(hwnd, iCmdShow); + UpdateWindow(hwnd); + + font2 = CREATEFONT(10); + + SetTimer(hwnd, 1, 80, NULL); + + set_always_on_top(hwnd, iniSettings.always_on_top); + set_logerr(hwnd, iniSettings.logerr); + set_decode_mode(iniSettings.decode_mode); + set_outputFormat(iniSettings.outputFormat); + set_fileType(iniSettings.fileType); + set_object_type(iniSettings.object_type); + + for (frame = 0; frame < 8; frame++) + hbm[frame] = LoadImage(hinst, MAKEINTRESOURCE(IDB_TF01 + frame), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); + frame = 0; + + while (GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + for (frame = 0; frame < 8; frame++) + DeleteObject(hbm[frame]); + + return msg.wParam; +} + +void HandleDrag(HWND hwnd, HDROP hDrop) +{ + int cFiles, i; + char szFile[MAX_PATH]; + char *ext; + int flag = 0; + + cFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); + for (i = 0; i < cFiles; i++) + { + DragQueryFile(hDrop, i, szFile, sizeof(szFile)); + + if (ext = strrchr(szFile, '.')) + { + if (stricmp(ext, ".aac") == 0 || stricmp(ext, ".mp4") == 0 || + stricmp(ext, ".m4a") == 0 || stricmp(ext, ".m4p") == 0) + { + flag = 1; + decthread_addfile(szFile); + stop_decoding = 0; + } + } + } + + DragFinish(hDrop); + + if (flag) + SetEvent(event); +} + +LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + HDC hdc, hmem; + static HDC offscreen; + PAINTSTRUCT ps; + RECT rect, rect2; + BITMAP bm; + POINT point; + static POINT start; + static int dragging = 0; + HDC desktop; + HBITMAP hbitmap; + HANDLE hdrop; + HFONT dfltFont; + int dfltBGMode; + double percomp; + + switch (message) + { + case WM_CREATE: + menu = LoadMenu(hinst, MAKEINTRESOURCE(IDR_MENU1)); + menu = GetSubMenu(menu, 0); + + offscreen = CreateCompatibleDC(NULL); + desktop = GetDC(GetDesktopWindow()); + hbitmap = CreateCompatibleBitmap(desktop, 200, 200); + ReleaseDC(GetDesktopWindow(), desktop); + SelectObject(offscreen, hbitmap); + + // Start the engines + decthread_init(); + + // We accept drag&drop + DragAcceptFiles(hwnd, TRUE); + return 0; + + case WM_PAINT: + hdc = BeginPaint(hwnd, &ps); + GetClientRect(hwnd, &rect); + width = rect.right + 1; + height = rect.bottom + 1; + + FillRect(offscreen, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH)); + DrawText(offscreen, "Drop Files Here", -1, &rect, DT_SINGLELINE | DT_CENTER); + SetRect(&rect2, 0, height - 110, width, height - 25); + DrawText(offscreen, "For Decoding", -1, &rect2, DT_SINGLELINE | DT_CENTER); + + hmem = CreateCompatibleDC(offscreen); + SelectObject(hmem, hbm[frame]); + GetObject(hbm[frame], sizeof(BITMAP), &bm); + BitBlt(offscreen, width / 2 - 33, height / 2 - 31, bm.bmWidth, bm.bmHeight, hmem, 0, 0, SRCCOPY); + DeleteDC(hmem); + + percomp = ((double)(totalfiles - numfiles) + 1 - (1 - file_complete)) / (double)totalfiles; + + SetRect(&vbrBR, 0, height - 35, width, height - 19); + + dfltBGMode = SetBkMode(offscreen, TRANSPARENT); + dfltFont = SelectObject(offscreen, font2); + + SetRect(&bar1, 0, height - 23, (int)(file_complete * width), height - 13); + SetRect(&bar2, 0, height - 12, (int)(percomp * width), height - 2); + + FillRect(offscreen, &bar1, (HBRUSH)GetStockObject(LTGRAY_BRUSH)); + FillRect(offscreen, &bar2, (HBRUSH)GetStockObject(DKGRAY_BRUSH)); + + if (fileName) + { + char* sep; + char fileCaption[80]; + + if ((sep = strrchr(fileName, '\\')) != 0) + fileName = sep+1; + + (void) strcpy(fileCaption, " "); + (void) strcat(fileCaption, fileName); + + DrawText(offscreen, fileCaption, -1, &bar1, DT_SINGLELINE | DT_LEFT); + } + + SelectObject(offscreen, dfltFont); + SetBkMode(offscreen, dfltBGMode); + + BitBlt(hdc, 0, 0, width, height, offscreen, 0, 0, SRCCOPY); + + EndPaint(hwnd, &ps); + + return DefWindowProc(hwnd, message, wParam, lParam); + //return 0; + + case WM_TIMER: + if (animate || frame) + { + frame++; + if (frame > 7) + frame -= 8; + } + else + { + frame = 0; + } + GetClientRect(hwnd, &rect); + InvalidateRect(hwnd, &rect, FALSE); + return 0; + + case WM_LBUTTONDOWN: + start.x = LOWORD(lParam); + start.y = HIWORD(lParam); + ClientToScreen(hwnd, &start); + GetWindowRect(hwnd, &rect); + start.x -= rect.left; + start.y -= rect.top; + dragging = 1; + SetCapture(hwnd); + return 0; + + case WM_LBUTTONUP: + if (dragging) + { + dragging = 0; + ReleaseCapture(); + } + return 0; + + case WM_MOUSEMOVE: + if (dragging) + { + point.x = LOSHORT(lParam); + point.y = HISHORT(lParam); + + /* lParam can contain negative coordinates ! + * point.x = LOWORD(lParam); + * point.y = HIWORD(lParam); + */ + + ClientToScreen(hwnd, &point); + SetWindowPos(hwnd, 0, point.x - start.x, point.y - start.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); + iniSettings.window_x = point.x - start.x; + iniSettings.window_y = point.y - start.y; + } + return 0; + + case WM_CAPTURECHANGED: + if (dragging) + { + dragging = 0; + ReleaseCapture(); + } + return 0; + + case WM_RBUTTONUP: + point.x = LOWORD(lParam); + point.y = HIWORD(lParam); + ClientToScreen(hwnd, &point); + TrackPopupMenu(menu, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL); + return 0; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDM_QUIT: + WriteIniFile(INI_FILE); + decoding_done = 1; + PostQuitMessage(0); + break; + case IDM_ONTOP: + set_always_on_top(hwnd, ~GetMenuState(menu, LOWORD(wParam), MF_BYCOMMAND) & MF_CHECKED); + break; + case IDM_LOGERR: + set_logerr(hwnd, ~GetMenuState(menu, LOWORD(wParam), MF_BYCOMMAND) & MF_CHECKED); + break; + case IDM_STOP_DEC: + { + int v = ~GetMenuState(menu, LOWORD(wParam), MF_BYCOMMAND) & MF_CHECKED; + if(v == 8) + stop_decoding = 1; + break; + } + case IDM_VOLUME: + { + int value = + DialogBox( + hinst, + MAKEINTRESOURCE(IDD_VOLUME), + hwnd, QCProc); + + if (value == -2) + break; + break; + } + case IDM_ABOUT: + { + int value = DialogBox(hinst, MAKEINTRESOURCE(IDD_ABOUT), hwnd, QCProc); + if (value == -7) + break; + break; + } + + } // LOWORD(wParam) + return 0; + + case WM_DROPFILES: + hdrop = (HANDLE)wParam; + HandleDrag(hwnd, hdrop); + return 0; + + case WM_DESTROY: + decoding_done = 1; + PostQuitMessage(0); + return 0; + } + + return DefWindowProc(hwnd, message, wParam, lParam); +} + +/* + * Encode parameters dialog procedures. + */ + +BOOL CALLBACK QCProc(HWND hwndDlg, UINT message, + WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG: + + if(iniSettings.decode_mode == 0) + { + CheckDlgButton(hwndDlg,IDC_PLAYBACK,TRUE); + CheckDlgButton(hwndDlg,IDC_WAV,TRUE); + if(iniSettings.outputFormat != 1 + && iniSettings.outputFormat != 5 + && iniSettings.outputFormat != 6 + && iniSettings.outputFormat != 7 + && iniSettings.outputFormat != 8) + CheckDlgButton(hwndDlg,IDC_16BIT,TRUE); + else if(iniSettings.outputFormat == 1) + CheckDlgButton(hwndDlg,IDC_16BIT,TRUE); + else if(iniSettings.outputFormat == 5) + CheckDlgButton(hwndDlg,IDC_16BIT_DITHER,TRUE); + else if(iniSettings.outputFormat == 6) + CheckDlgButton(hwndDlg,IDC_16BIT_L_SHAPE,TRUE); + else if(iniSettings.outputFormat == 7) + CheckDlgButton(hwndDlg,IDC_16BIT_M_SHAPE,TRUE); + else if(iniSettings.outputFormat == 8) + CheckDlgButton(hwndDlg,IDC_16BIT_H_SHAPE,TRUE); + CheckDlgButton(hwndDlg,IDC_WAV,TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_AIFF), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_SUNAU), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_DECAU), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_24BIT), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_32BIT), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_FLOATS), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_DITHER), TRUE); + } + else if(iniSettings.decode_mode == 1) + { + CheckDlgButton(hwndDlg,IDC_PLAYBACK,FALSE); + if(iniSettings.outputFormat == 1) + CheckDlgButton(hwndDlg,IDC_16BIT,TRUE); + else if(iniSettings.outputFormat == 2) + CheckDlgButton(hwndDlg,IDC_24BIT,TRUE); + else if(iniSettings.outputFormat == 3) + CheckDlgButton(hwndDlg,IDC_32BIT,TRUE); + else if(iniSettings.outputFormat == 4) + CheckDlgButton(hwndDlg,IDC_FLOATS,TRUE); + else if(iniSettings.outputFormat == 5) + CheckDlgButton(hwndDlg,IDC_16BIT_DITHER,TRUE); + else if(iniSettings.outputFormat == 6) + CheckDlgButton(hwndDlg,IDC_16BIT_L_SHAPE,TRUE); + else if(iniSettings.outputFormat == 7) + CheckDlgButton(hwndDlg,IDC_16BIT_M_SHAPE,TRUE); + else if(iniSettings.outputFormat == 8) + CheckDlgButton(hwndDlg,IDC_16BIT_H_SHAPE,TRUE); + + if(iniSettings.fileType == 1) + CheckDlgButton(hwndDlg,IDC_WAV,TRUE); + else if(iniSettings.fileType == 2) + CheckDlgButton(hwndDlg,IDC_AIFF,TRUE); + else if(iniSettings.fileType == 3) + CheckDlgButton(hwndDlg,IDC_SUNAU,TRUE); + else if(iniSettings.fileType == 4) + CheckDlgButton(hwndDlg,IDC_DECAU,TRUE); + } + + if(iniSettings.object_type == 0) + CheckDlgButton(hwndDlg,IDC_MAIN,TRUE); + else if(iniSettings.object_type == 1) + CheckDlgButton(hwndDlg,IDC_LC,TRUE); + else if(iniSettings.object_type == 3) + CheckDlgButton(hwndDlg,IDC_LTP,TRUE); + else if(iniSettings.object_type == 23) + CheckDlgButton(hwndDlg,IDC_LD,TRUE); + break; + + case WM_CLOSE: + EndDialog(hwndDlg, -1); + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_BUTTON1: + { + if (IsDlgButtonChecked(hwndDlg, IDC_PLAYBACK) == BST_CHECKED) + set_decode_mode(0); // Playback + else if (IsDlgButtonChecked(hwndDlg, IDC_DECODE) == BST_CHECKED) + set_decode_mode(1); // Decode to File + + if (IsDlgButtonChecked(hwndDlg, IDC_WAV) == BST_CHECKED) + set_fileType(1); // Microsoft WAV + else if (IsDlgButtonChecked(hwndDlg, IDC_AIFF) == BST_CHECKED) + set_fileType(2); // Apple/SGI AIFF + else if (IsDlgButtonChecked(hwndDlg, IDC_SUNAU) == BST_CHECKED) + set_fileType(3); // Sun/NeXT AU + else if (IsDlgButtonChecked(hwndDlg, IDC_DECAU) == BST_CHECKED) + set_fileType(4); // DEC AU + + if (IsDlgButtonChecked(hwndDlg, IDC_16BIT) == BST_CHECKED) + set_outputFormat(1); // 16 bit PCM + else if (IsDlgButtonChecked(hwndDlg, IDC_24BIT) == BST_CHECKED) + set_outputFormat(2); // 24 bit PCM + else if (IsDlgButtonChecked(hwndDlg, IDC_32BIT) == BST_CHECKED) + set_outputFormat(3); // 32 bit PCM + else if (IsDlgButtonChecked(hwndDlg, IDC_FLOATS) == BST_CHECKED) + set_outputFormat(4); // 32 bit floats + else if (IsDlgButtonChecked(hwndDlg, IDC_16BIT_DITHER) == BST_CHECKED) + set_outputFormat(5); // 16 bit PCM dithered + else if (IsDlgButtonChecked(hwndDlg, IDC_16BIT_L_SHAPE) == BST_CHECKED) + set_outputFormat(6); // dithered LIGHT noise shaping + else if (IsDlgButtonChecked(hwndDlg, IDC_16BIT_M_SHAPE) == BST_CHECKED) + set_outputFormat(7); // dithered MEDIUM noise shaping + else if (IsDlgButtonChecked(hwndDlg, IDC_16BIT_H_SHAPE) == BST_CHECKED) + set_outputFormat(8); // dithered HEAVY noise shaping + + if (IsDlgButtonChecked(hwndDlg, IDC_MAIN) == BST_CHECKED) + set_object_type(0); // Main + else if (IsDlgButtonChecked(hwndDlg, IDC_LC) == BST_CHECKED) + set_object_type(1); // Low Complexity + else if (IsDlgButtonChecked(hwndDlg, IDC_LTP) == BST_CHECKED) + set_object_type(3); // Long Term Prediction + else if (IsDlgButtonChecked(hwndDlg, IDC_LD) == BST_CHECKED) + set_object_type(23); // Low Delay + + EndDialog(hwndDlg, -2); + return TRUE; + } + case IDC_BUTTON6: + EndDialog(hwndDlg, -7); + return TRUE; + + case IDC_PLAYBACK: + CheckDlgButton(hwndDlg,IDC_WAV,TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_AIFF), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_SUNAU), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_DECAU), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_24BIT), FALSE); + CheckDlgButton(hwndDlg,IDC_24BIT,FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_32BIT), FALSE); + CheckDlgButton(hwndDlg,IDC_32BIT,FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_FLOATS), FALSE); + CheckDlgButton(hwndDlg,IDC_FLOATS,FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_DITHER), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_L_SHAPE), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_M_SHAPE), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_H_SHAPE), TRUE); + if (IsDlgButtonChecked(hwndDlg, IDC_16BIT_DITHER) != BST_CHECKED + && IsDlgButtonChecked(hwndDlg, IDC_16BIT_L_SHAPE) != BST_CHECKED + && IsDlgButtonChecked(hwndDlg, IDC_16BIT_M_SHAPE) != BST_CHECKED + && IsDlgButtonChecked(hwndDlg, IDC_16BIT_H_SHAPE) != BST_CHECKED) + CheckDlgButton(hwndDlg,IDC_16BIT,TRUE); + break; + case IDC_DECODE: + EnableWindow(GetDlgItem(hwndDlg, IDC_AIFF), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_SUNAU), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_DECAU), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_24BIT), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_32BIT), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_FLOATS), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_DITHER), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_L_SHAPE), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_M_SHAPE), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_16BIT_H_SHAPE), TRUE); + break; + default: + break; + } + } + return FALSE; +} + + +/******************************** end of main.c ********************************/ + -- cgit v1.2.3