msvideo: Add a codec to the compressors list only if it supports
specified input format. Return a compressor handle in COMPVARS structure.
This commit is contained in:
parent
0df8b0a020
commit
75c436246d
|
@ -705,19 +705,21 @@ struct choose_compressor
|
||||||
COMPVARS cv;
|
COMPVARS cv;
|
||||||
};
|
};
|
||||||
|
|
||||||
static BOOL enum_compressors(HWND list)
|
static BOOL enum_compressors(HWND list, COMPVARS *pcv)
|
||||||
{
|
{
|
||||||
UINT id;
|
UINT id, total = 0;
|
||||||
ICINFO icinfo;
|
ICINFO icinfo;
|
||||||
|
|
||||||
id = 0;
|
id = 0;
|
||||||
|
|
||||||
while (ICInfo(ICTYPE_VIDEO, id, &icinfo))
|
while (ICInfo(pcv->fccType, id, &icinfo))
|
||||||
{
|
{
|
||||||
ICINFO *ic;
|
ICINFO *ic;
|
||||||
DWORD idx;
|
DWORD idx;
|
||||||
HIC hic;
|
HIC hic;
|
||||||
|
|
||||||
|
id++;
|
||||||
|
|
||||||
hic = ICOpen(icinfo.fccType, icinfo.fccHandler, ICMODE_COMPRESS);
|
hic = ICOpen(icinfo.fccType, icinfo.fccHandler, ICMODE_COMPRESS);
|
||||||
|
|
||||||
if (hic)
|
if (hic)
|
||||||
|
@ -727,6 +729,17 @@ static BOOL enum_compressors(HWND list)
|
||||||
*/
|
*/
|
||||||
DWORD fccHandler = icinfo.fccHandler;
|
DWORD fccHandler = icinfo.fccHandler;
|
||||||
|
|
||||||
|
if (pcv->lpbiIn)
|
||||||
|
{
|
||||||
|
if (ICCompressQuery(hic, pcv->lpbiIn, NULL) != ICERR_OK)
|
||||||
|
{
|
||||||
|
TRACE("fccHandler %s doesn't support input DIB format %ld\n",
|
||||||
|
wine_dbgstr_fcc(icinfo.fccHandler), pcv->lpbiIn->bmiHeader.biCompression);
|
||||||
|
ICClose(hic);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ICGetInfo(hic, &icinfo, sizeof(icinfo));
|
ICGetInfo(hic, &icinfo, sizeof(icinfo));
|
||||||
icinfo.fccHandler = fccHandler;
|
icinfo.fccHandler = fccHandler;
|
||||||
ICClose(hic);
|
ICClose(hic);
|
||||||
|
@ -737,10 +750,10 @@ static BOOL enum_compressors(HWND list)
|
||||||
*ic = icinfo;
|
*ic = icinfo;
|
||||||
SendMessageW(list, CB_SETITEMDATA, idx, (LPARAM)ic);
|
SendMessageW(list, CB_SETITEMDATA, idx, (LPARAM)ic);
|
||||||
}
|
}
|
||||||
id++;
|
total++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return id != 0;
|
return total != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT_PTR CALLBACK icm_choose_compressor_dlgproc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
|
static INT_PTR CALLBACK icm_choose_compressor_dlgproc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
|
||||||
|
@ -764,7 +777,7 @@ static INT_PTR CALLBACK icm_choose_compressor_dlgproc(HWND hdlg, UINT msg, WPARA
|
||||||
ic->fccHandler = comptypeDIB;
|
ic->fccHandler = comptypeDIB;
|
||||||
SendDlgItemMessageW(hdlg, IDC_COMP_LIST, CB_SETITEMDATA, 0, (LPARAM)ic);
|
SendDlgItemMessageW(hdlg, IDC_COMP_LIST, CB_SETITEMDATA, 0, (LPARAM)ic);
|
||||||
|
|
||||||
enum_compressors(GetDlgItem(hdlg, IDC_COMP_LIST));
|
enum_compressors(GetDlgItem(hdlg, IDC_COMP_LIST), &choose_comp->cv);
|
||||||
|
|
||||||
SendDlgItemMessageW(hdlg, IDC_COMP_LIST, CB_SETCURSEL, 0, 0);
|
SendDlgItemMessageW(hdlg, IDC_COMP_LIST, CB_SETCURSEL, 0, 0);
|
||||||
SetFocus(GetDlgItem(hdlg, IDC_COMP_LIST));
|
SetFocus(GetDlgItem(hdlg, IDC_COMP_LIST));
|
||||||
|
@ -795,6 +808,7 @@ static INT_PTR CALLBACK icm_choose_compressor_dlgproc(HWND hdlg, UINT msg, WPARA
|
||||||
{
|
{
|
||||||
choose_comp->cv.fccType = ic->fccType;
|
choose_comp->cv.fccType = ic->fccType;
|
||||||
choose_comp->cv.fccHandler = ic->fccHandler;
|
choose_comp->cv.fccHandler = ic->fccHandler;
|
||||||
|
choose_comp->cv.hic = ICOpen(ic->fccType, ic->fccHandler, ICMODE_COMPRESS);
|
||||||
/* FIXME: fill everything else */
|
/* FIXME: fill everything else */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -860,6 +874,7 @@ BOOL VFWAPI ICCompressorChoose(HWND hwnd, UINT uiFlags, LPVOID pvIn,
|
||||||
if (pc->fccType == 0)
|
if (pc->fccType == 0)
|
||||||
pc->fccType = ICTYPE_VIDEO;
|
pc->fccType = ICTYPE_VIDEO;
|
||||||
|
|
||||||
|
choose_comp.cv = *pc;
|
||||||
choose_comp.flags = uiFlags;
|
choose_comp.flags = uiFlags;
|
||||||
choose_comp.title = lpszTitle;
|
choose_comp.title = lpszTitle;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue