@@ -40,6 +40,7 @@ VAAPIEncoder::VAAPIEncoder()
40
40
: m_core(NULL )
41
41
, m_width(-1 )
42
42
, m_height(-1 )
43
+ , m_caps()
43
44
, m_vaDisplay(0 )
44
45
, m_vaContextEncode(VA_INVALID_ID)
45
46
, m_vaConfig(VA_INVALID_ID)
@@ -108,6 +109,52 @@ mfxStatus VAAPIEncoder::CreateAuxilliaryDevice(
108
109
m_width = width;
109
110
m_height = height;
110
111
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
+
111
158
return MFX_ERR_NONE;
112
159
}
113
160
@@ -213,42 +260,7 @@ mfxStatus VAAPIEncoder::QueryEncodeCaps(JpegEncCaps & caps)
213
260
MFX_SAFE_CALL (hwCore_20->GetVAService (&m_vaDisplay));
214
261
}
215
262
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;
252
264
253
265
return MFX_ERR_NONE;
254
266
}
0 commit comments