Commit edb14541 authored by Laurent Aimar's avatar Laurent Aimar Committed by Jean-Baptiste Kempf

Prefered DXVA2_ConfigPictureDecode with guidConfigBitstreamEncryption equals to DXVA_NoEncrypt.

It should fix the performance issue with ATI hardware.
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent 02e63408
...@@ -133,6 +133,10 @@ static const GUID DXVA2_ModeVC1_D = { ...@@ -133,6 +133,10 @@ static const GUID DXVA2_ModeVC1_D = {
0x1b81beA3, 0xa0c7,0x11d3, {0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5} 0x1b81beA3, 0xa0c7,0x11d3, {0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5}
}; };
static const GUID DXVA_NoEncrypt = {
0x1b81bed0, 0xa0c7,0x11d3, {0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5}
};
/* */ /* */
typedef struct { typedef struct {
const char *name; const char *name;
...@@ -902,7 +906,7 @@ static int DxCreateVideoDecoder(vlc_va_dxva2_t *va, ...@@ -902,7 +906,7 @@ static int DxCreateVideoDecoder(vlc_va_dxva2_t *va,
msg_Dbg(va->log, "we got %d decoder configurations", cfg_count); msg_Dbg(va->log, "we got %d decoder configurations", cfg_count);
/* Select the best decoder configuration */ /* Select the best decoder configuration */
bool has_cfg = false; int cfg_score = 0;
for (unsigned i = 0; i < cfg_count; i++) { for (unsigned i = 0; i < cfg_count; i++) {
const DXVA2_ConfigPictureDecode *cfg = &cfg_list[i]; const DXVA2_ConfigPictureDecode *cfg = &cfg_list[i];
...@@ -911,14 +915,23 @@ static int DxCreateVideoDecoder(vlc_va_dxva2_t *va, ...@@ -911,14 +915,23 @@ static int DxCreateVideoDecoder(vlc_va_dxva2_t *va,
i, cfg->ConfigBitstreamRaw); i, cfg->ConfigBitstreamRaw);
/* */ /* */
if ((!has_cfg && cfg->ConfigBitstreamRaw == 1) || int score;
(codec_id == CODEC_ID_H264 && cfg->ConfigBitstreamRaw == 2)) { if (cfg->ConfigBitstreamRaw == 1)
score = 1;
else if (codec_id == CODEC_ID_H264 && cfg->ConfigBitstreamRaw == 2)
score = 2;
else
continue;
if (IsEqualGUID(&cfg->guidConfigBitstreamEncryption, &DXVA_NoEncrypt))
score += 16;
if (cfg_score < score) {
va->cfg = *cfg; va->cfg = *cfg;
has_cfg = true; cfg_score = score;
} }
} }
CoTaskMemFree(cfg_list); CoTaskMemFree(cfg_list);
if (!has_cfg) { if (cfg_score <= 0) {
msg_Err(va->log, "Failed to find a supported decoder configuration"); msg_Err(va->log, "Failed to find a supported decoder configuration");
return VLC_EGENERIC; return VLC_EGENERIC;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment