Skip to content

Commit 05e12ff

Browse files
gfxVPLsdmkovakimy
andauthored
Removed multiple calls vaGetConfigAttributes (#716)
Co-authored-by: kovakimy <[email protected]>
1 parent f84640f commit 05e12ff

File tree

2 files changed

+49
-36
lines changed

2 files changed

+49
-36
lines changed

_studio/mfx_lib/encode_hw/mjpeg/include/mfx_mjpeg_encode_vaapi.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ namespace MfxHwMJpegEncode
101101
VideoCORE * m_core;
102102
mfxU32 m_width;
103103
mfxU32 m_height;
104+
JpegEncCaps m_caps;
104105
VADisplay m_vaDisplay;
105106
VAContextID m_vaContextEncode;
106107
VAConfigID m_vaConfig;

_studio/mfx_lib/encode_hw/mjpeg/src/mfx_mjpeg_encode_vaapi.cpp

Lines changed: 48 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ VAAPIEncoder::VAAPIEncoder()
4040
: m_core(NULL)
4141
, m_width(-1)
4242
, m_height(-1)
43+
, m_caps()
4344
, m_vaDisplay(0)
4445
, m_vaContextEncode(VA_INVALID_ID)
4546
, m_vaConfig(VA_INVALID_ID)
@@ -108,6 +109,52 @@ mfxStatus VAAPIEncoder::CreateAuxilliaryDevice(
108109
m_width = width;
109110
m_height = height;
110111

112+
// set caps
113+
memset(&m_caps, 0, sizeof(m_caps));
114+
m_caps.Baseline = 1;
115+
m_caps.Sequential = 1;
116+
m_caps.Huffman = 1;
117+
118+
m_caps.NonInterleaved = 0;
119+
m_caps.Interleaved = 1;
120+
121+
m_caps.SampleBitDepth = 8;
122+
m_caps.MaxNumComponent = 3;
123+
m_caps.MaxNumScan = 1;
124+
m_caps.MaxNumHuffTable = 2;
125+
m_caps.MaxNumQuantTable = 2;
126+
127+
std::map<VAConfigAttribType, int> attrib_map;
128+
129+
VAConfigAttribType attrib_types[] = {
130+
VAConfigAttribEncJPEG,
131+
VAConfigAttribMaxPictureWidth,
132+
VAConfigAttribMaxPictureHeight,
133+
VAConfigAttribContextPriority
134+
};
135+
136+
std::vector<VAConfigAttrib> attrib;
137+
attrib.reserve(sizeof(attrib_types) / sizeof(attrib_types[0]));
138+
for (size_t i = 0; i < sizeof(attrib_types) / sizeof(attrib_types[0]); i++)
139+
{
140+
attrib.push_back(VAConfigAttrib{attrib_types[i], 0});
141+
attrib_map[attrib_types[i]] = i;
142+
}
143+
144+
vaSts = vaGetConfigAttributes(m_vaDisplay,
145+
VAProfileJPEGBaseline,
146+
VAEntrypointEncPicture,
147+
attrib.data(), attrib.size());
148+
149+
VAConfigAttribValEncJPEG encAttribVal;
150+
encAttribVal.value = attrib[attrib_map[VAConfigAttribEncJPEG]].value;
151+
m_caps.MaxNumComponent = encAttribVal.bits.max_num_components;
152+
m_caps.MaxNumScan = encAttribVal.bits.max_num_scans;
153+
m_caps.MaxNumHuffTable = encAttribVal.bits.max_num_huffman_tables;
154+
m_caps.MaxNumQuantTable = encAttribVal.bits.max_num_quantization_tables;
155+
m_caps.MaxPicWidth = attrib[attrib_map[VAConfigAttribMaxPictureWidth]].value;
156+
m_caps.MaxPicHeight = attrib[attrib_map[VAConfigAttribMaxPictureHeight]].value;
157+
111158
return MFX_ERR_NONE;
112159
}
113160

@@ -213,42 +260,7 @@ mfxStatus VAAPIEncoder::QueryEncodeCaps(JpegEncCaps & caps)
213260
MFX_SAFE_CALL(hwCore_20->GetVAService(&m_vaDisplay));
214261
}
215262

216-
memset(&caps, 0, sizeof(caps));
217-
caps.Baseline = 1;
218-
caps.Sequential = 1;
219-
caps.Huffman = 1;
220-
221-
caps.NonInterleaved = 0;
222-
caps.Interleaved = 1;
223-
224-
caps.SampleBitDepth = 8;
225-
caps.MaxNumComponent = 3;
226-
caps.MaxNumScan = 1;
227-
caps.MaxNumHuffTable = 2;
228-
caps.MaxNumQuantTable = 2;
229-
230-
VAStatus vaSts;
231-
232-
// Configuration
233-
VAConfigAttrib attrib;
234-
235-
attrib.type = VAConfigAttribMaxPictureWidth;
236-
vaSts = vaGetConfigAttributes(m_vaDisplay,
237-
VAProfileJPEGBaseline,
238-
VAEntrypointEncPicture,
239-
&attrib, 1);
240-
MFX_CHECK_WITH_ASSERT(VA_STATUS_SUCCESS == vaSts, MFX_ERR_DEVICE_FAILED);
241-
242-
caps.MaxPicWidth = attrib.value;
243-
244-
attrib.type = VAConfigAttribMaxPictureHeight;
245-
vaSts = vaGetConfigAttributes(m_vaDisplay,
246-
VAProfileJPEGBaseline,
247-
VAEntrypointEncPicture,
248-
&attrib, 1);
249-
MFX_CHECK_WITH_ASSERT(VA_STATUS_SUCCESS == vaSts, MFX_ERR_DEVICE_FAILED);
250-
251-
caps.MaxPicHeight = attrib.value;
263+
caps = m_caps;
252264

253265
return MFX_ERR_NONE;
254266
}

0 commit comments

Comments
 (0)