@@ -22,14 +22,14 @@ typedef struct _VERTEX {
22
22
23
23
// Vertices for drawing whole texture
24
24
static VERTEX Vertices[NUMVERTICES] =
25
- {
26
- {XMFLOAT3 (-1 .0f , -1 .0f , 0 ), XMFLOAT2 (0 .0f , 1 .0f )},
27
- {XMFLOAT3 (-1 .0f , 1 .0f , 0 ), XMFLOAT2 (0 .0f , 0 .0f )},
28
- {XMFLOAT3 (1 .0f , -1 .0f , 0 ), XMFLOAT2 (1 .0f , 1 .0f )},
29
- {XMFLOAT3 (1 .0f , -1 .0f , 0 ), XMFLOAT2 (1 .0f , 1 .0f )},
30
- {XMFLOAT3 (-1 .0f , 1 .0f , 0 ), XMFLOAT2 (0 .0f , 0 .0f )},
31
- {XMFLOAT3 (1 .0f , 1 .0f , 0 ), XMFLOAT2 (1 .0f , 0 .0f )},
32
- };
25
+ {
26
+ {XMFLOAT3 (-1 .0f , -1 .0f , 0 ), XMFLOAT2 (0 .0f , 1 .0f )},
27
+ {XMFLOAT3 (-1 .0f , 1 .0f , 0 ), XMFLOAT2 (0 .0f , 0 .0f )},
28
+ {XMFLOAT3 (1 .0f , -1 .0f , 0 ), XMFLOAT2 (1 .0f , 1 .0f )},
29
+ {XMFLOAT3 (1 .0f , -1 .0f , 0 ), XMFLOAT2 (1 .0f , 1 .0f )},
30
+ {XMFLOAT3 (-1 .0f , 1 .0f , 0 ), XMFLOAT2 (0 .0f , 0 .0f )},
31
+ {XMFLOAT3 (1 .0f , 1 .0f , 0 ), XMFLOAT2 (1 .0f , 0 .0f )},
32
+ };
33
33
34
34
static FLOAT blendFactor[4 ] = {0 .f , 0 .f , 0 .f , 0 .f };
35
35
@@ -65,7 +65,7 @@ Nv12ToBgra::~Nv12ToBgra() {
65
65
}
66
66
67
67
bool Nv12ToBgra::compileShader () {
68
- ID3DBlob* errs;
68
+ ID3DBlob * errs;
69
69
70
70
QFile f1 (" :/shader/nv12bgra_vertex.hlsl" );
71
71
f1.open (QIODevice::ReadOnly);
@@ -84,7 +84,7 @@ bool Nv12ToBgra::compileShader() {
84
84
" PS" , " ps_5_0" , 0 , 0 , _pixel_shader.GetAddressOf (), &errs);
85
85
if (FAILED (hr)) {
86
86
qCritical () << " failed compiling nv12bgra pixel shader" ;
87
- auto e = std::string ((char *) errs->GetBufferPointer (), errs->GetBufferSize ());
87
+ auto e = std::string ((char *) errs->GetBufferPointer (), errs->GetBufferSize ());
88
88
qCritical (" %s" , e.c_str ());
89
89
return false ;
90
90
}
@@ -110,7 +110,7 @@ void Nv12ToBgra::releaseSharedSurf() {
110
110
this ->_height = 0 ;
111
111
}
112
112
113
- ID3D11Device* Nv12ToBgra::getDevice () {
113
+ ID3D11Device * Nv12ToBgra::getDevice () {
114
114
_d3d11_device->AddRef ();
115
115
return _d3d11_device.Get ();
116
116
}
@@ -124,35 +124,35 @@ bool Nv12ToBgra::init() {
124
124
125
125
// Driver types supported
126
126
D3D_DRIVER_TYPE DriverTypes[] =
127
- {
128
- D3D_DRIVER_TYPE_UNKNOWN,
129
- // D3D_DRIVER_TYPE_HARDWARE,
130
- // D3D_DRIVER_TYPE_WARP,
131
- // D3D_DRIVER_TYPE_REFERENCE,
132
- };
127
+ {
128
+ D3D_DRIVER_TYPE_UNKNOWN,
129
+ // D3D_DRIVER_TYPE_HARDWARE,
130
+ // D3D_DRIVER_TYPE_WARP,
131
+ // D3D_DRIVER_TYPE_REFERENCE,
132
+ };
133
133
UINT NumDriverTypes = ARRAYSIZE (DriverTypes);
134
134
135
135
// Feature levels supported
136
136
D3D_FEATURE_LEVEL FeatureLevels[] =
137
- {
138
- D3D_FEATURE_LEVEL_11_0,
139
- };
137
+ {
138
+ D3D_FEATURE_LEVEL_11_0,
139
+ };
140
140
UINT NumFeatureLevels = ARRAYSIZE (FeatureLevels);
141
141
D3D_FEATURE_LEVEL FeatureLevel;
142
142
// This flag adds support for surfaces with a different color channel ordering
143
143
// than the default. It is required for compatibility with Direct2D.
144
144
UINT creationFlags =
145
- D3D11_CREATE_DEVICE_SINGLETHREADED |
146
- D3D11_CREATE_DEVICE_BGRA_SUPPORT;
145
+ D3D11_CREATE_DEVICE_SINGLETHREADED |
146
+ D3D11_CREATE_DEVICE_BGRA_SUPPORT;
147
147
148
148
if (IsDebuggerPresent () && DX_DEBUG_LAYER) {
149
149
creationFlags |= D3D11_CREATE_DEVICE_DEBUG;
150
150
}
151
151
152
152
// We need dxgi to share texture
153
- IDXGIFactory2* pDXGIFactory;
154
- IDXGIAdapter* pAdapter = NULL ;
155
- hr = CreateDXGIFactory (IID_IDXGIFactory2, (void **)&pDXGIFactory);
153
+ IDXGIFactory2 * pDXGIFactory;
154
+ IDXGIAdapter * pAdapter = NULL ;
155
+ hr = CreateDXGIFactory (IID_IDXGIFactory2, (void **) &pDXGIFactory);
156
156
if (FAILED (hr))
157
157
return false ;
158
158
@@ -202,14 +202,14 @@ bool Nv12ToBgra::init() {
202
202
qDebug () << " nv12bgra create vertex shader" ;
203
203
204
204
constexpr std::array<D3D11_INPUT_ELEMENT_DESC, 2 > Layout =
205
- {
206
- {
207
- // 3D 32bit float vector
208
- {" POSITION" , 0 , DXGI_FORMAT_R32G32B32_FLOAT, 0 , 0 , D3D11_INPUT_PER_VERTEX_DATA, 0 },
209
- // 2D 32bit float vector
210
- {" TEXCOORD" , 0 , DXGI_FORMAT_R32G32_FLOAT, 0 , 12 , D3D11_INPUT_PER_VERTEX_DATA, 0 },
211
- }
212
- };
205
+ {
206
+ {
207
+ // 3D 32bit float vector
208
+ {" POSITION" , 0 , DXGI_FORMAT_R32G32B32_FLOAT, 0 , 0 , D3D11_INPUT_PER_VERTEX_DATA, 0 },
209
+ // 2D 32bit float vector
210
+ {" TEXCOORD" , 0 , DXGI_FORMAT_R32G32_FLOAT, 0 , 12 , D3D11_INPUT_PER_VERTEX_DATA, 0 },
211
+ }
212
+ };
213
213
214
214
hr = this ->_d3d11_device ->CreateInputLayout (Layout.data (), Layout.size (),
215
215
_vertex_shader->GetBufferPointer (), _vertex_shader->GetBufferSize (),
@@ -268,9 +268,9 @@ void Nv12ToBgra::resetDeviceContext() {
268
268
qDebug () << " nv12bgra set context params" ;
269
269
270
270
// SharedSurf
271
- std::array<ID3D11ShaderResourceView*, 2 > const textureViews = {
272
- this ->_luminanceView .Get (),
273
- this ->_chrominanceView .Get ()
271
+ std::array<ID3D11ShaderResourceView *, 2 > const textureViews = {
272
+ this ->_luminanceView .Get (),
273
+ this ->_chrominanceView .Get ()
274
274
};
275
275
this ->_d3d11_deviceCtx ->PSSetShaderResources (0 , textureViews.size (), textureViews.data ());
276
276
this ->_d3d11_deviceCtx ->OMSetRenderTargets (1 , this ->_renderTargetView .GetAddressOf (), nullptr );
@@ -287,9 +287,9 @@ void Nv12ToBgra::resetDeviceContext() {
287
287
this ->_d3d11_deviceCtx ->RSSetViewports (1 , &VP);
288
288
// this->_d3d11_deviceCtx->Dispatch(8, 8, 1);
289
289
this ->_d3d11_deviceCtx ->Dispatch (
290
- (UINT)ceil (_width * 1.0 / 8 ),
291
- (UINT)ceil (_height * 2 * 1.0 / 8 ),
292
- 1 );
290
+ (UINT) ceil (_width * 1.0 / 8 ),
291
+ (UINT) ceil (_height * 2 * 1.0 / 8 ),
292
+ 1 );
293
293
294
294
qDebug () << " nv12bgra set context viewport" ;
295
295
}
@@ -323,8 +323,8 @@ bool Nv12ToBgra::createSharedSurf() {
323
323
324
324
//
325
325
D3D11_SHADER_RESOURCE_VIEW_DESC const luminancePlaneDesc
326
- = CD3D11_SHADER_RESOURCE_VIEW_DESC (this ->_texture_nv12 .Get (), D3D11_SRV_DIMENSION_TEXTURE2D,
327
- DXGI_FORMAT_R8_UNORM);
326
+ = CD3D11_SHADER_RESOURCE_VIEW_DESC (this ->_texture_nv12 .Get (), D3D11_SRV_DIMENSION_TEXTURE2D,
327
+ DXGI_FORMAT_R8_UNORM);
328
328
hr = this ->_d3d11_device ->CreateShaderResourceView (this ->_texture_nv12 .Get (), &luminancePlaneDesc,
329
329
this ->_luminanceView .GetAddressOf ());
330
330
if (FAILED (hr))
@@ -334,8 +334,8 @@ bool Nv12ToBgra::createSharedSurf() {
334
334
335
335
//
336
336
D3D11_SHADER_RESOURCE_VIEW_DESC const chrominancePlaneDesc
337
- = CD3D11_SHADER_RESOURCE_VIEW_DESC (this ->_texture_nv12 .Get (), D3D11_SRV_DIMENSION_TEXTURE2D,
338
- DXGI_FORMAT_R8G8_UNORM);
337
+ = CD3D11_SHADER_RESOURCE_VIEW_DESC (this ->_texture_nv12 .Get (), D3D11_SRV_DIMENSION_TEXTURE2D,
338
+ DXGI_FORMAT_R8G8_UNORM);
339
339
hr = this ->_d3d11_device ->CreateShaderResourceView (this ->_texture_nv12 .Get (), &chrominancePlaneDesc,
340
340
this ->_chrominanceView .GetAddressOf ());
341
341
if (FAILED (hr))
@@ -373,8 +373,8 @@ bool Nv12ToBgra::createSharedSurf() {
373
373
374
374
qDebug () << " nv12bgra create texture copy bgra" ;
375
375
376
- IDXGIResource* pDXGIResource = NULL ;
377
- _texture_rgba_copy->QueryInterface (__uuidof (IDXGIResource), (LPVOID*) &pDXGIResource);
376
+ IDXGIResource * pDXGIResource = NULL ;
377
+ _texture_rgba_copy->QueryInterface (__uuidof (IDXGIResource), (LPVOID *) &pDXGIResource);
378
378
pDXGIResource->GetSharedHandle (&_texture_rgba_copy_shared);
379
379
pDXGIResource->Release ();
380
380
if (!_texture_rgba_copy_shared) {
@@ -400,7 +400,7 @@ bool Nv12ToBgra::createSharedSurf() {
400
400
return true ;
401
401
}
402
402
403
- bool Nv12ToBgra::nv12ToBgra (AVFrame* f) {
403
+ bool Nv12ToBgra::nv12ToBgra (AVFrame * f) {
404
404
HRESULT hr{0 };
405
405
406
406
if (!_inited) {
@@ -414,14 +414,14 @@ bool Nv12ToBgra::nv12ToBgra(AVFrame* f) {
414
414
415
415
D3D11_BOX srcBox = {0 , 0 , 0 , _width, _height * 2 , 1 };
416
416
417
- ID3D11Texture2D* textureRgb = (ID3D11Texture2D*) f->data [0 ];
418
- const int textureRgbIndex = (int )f->data [1 ];
417
+ ID3D11Texture2D * textureRgb = (ID3D11Texture2D *) f->data [0 ];
418
+ const int textureRgbIndex = (int ) f->data [1 ];
419
419
// qDebug() << "copy rgb" << textureRgb << textureRgbIndex;
420
420
421
421
// bind/copy ffmpeg hw texture -> local d3d11 texture
422
422
this ->_d3d11_deviceCtx ->CopySubresourceRegion (
423
- this ->_texture_nv12 .Get (), 0 , 0 , 0 , 0 ,
424
- textureRgb, textureRgbIndex, &srcBox
423
+ this ->_texture_nv12 .Get (), 0 , 0 , 0 , 0 ,
424
+ textureRgb, textureRgbIndex, &srcBox
425
425
);
426
426
427
427
// saveTextureToFile(_d3d11_deviceCtx.Get(), _texture_nv12.Get(), "./nv12_bgra_input.png");
@@ -435,7 +435,6 @@ bool Nv12ToBgra::nv12ToBgra(AVFrame* f) {
435
435
436
436
lock.lock ();
437
437
438
-
439
438
// qDebug() << "copy to buffer";
440
439
this ->_d3d11_deviceCtx ->CopyResource (this ->_texture_rgba_copy .Get (), this ->_texture_rgba_target .Get ());
441
440
this ->_d3d11_deviceCtx ->Flush ();
@@ -446,40 +445,39 @@ bool Nv12ToBgra::nv12ToBgra(AVFrame* f) {
446
445
return true ;
447
446
}
448
447
449
- bool Nv12ToBgra::copyTo (ID3D11Device* dev, ID3D11DeviceContext* ctx, ID3D11Texture2D* dest) {
448
+ bool Nv12ToBgra::copyTo (ID3D11Device * dev, ID3D11DeviceContext * ctx, ID3D11Texture2D * dest) {
450
449
if (!_inited)
451
450
return false ;
452
451
453
452
// qDebug() << "copy from buffer";
454
453
455
454
lock.lock ();
456
455
457
- ID3D11Texture2D* src;
458
- dev->OpenSharedResource (_texture_rgba_copy_shared, __uuidof (ID3D11Texture2D), (LPVOID*)&src);
459
- if (src == nullptr )
460
- return false ;
461
-
462
- D3D11_BOX box = {0 , 0 , 0 , _width, _height, 1 };
463
- ctx->CopySubresourceRegion (dest, 0 , 0 , 0 , 0 , src, 0 , &box);
464
- ctx->Flush ();
465
-
466
- src->Release ();
456
+ ID3D11Texture2D *src;
457
+ dev->OpenSharedResource (_texture_rgba_copy_shared, __uuidof (ID3D11Texture2D), (LPVOID *) &src);
458
+ if (src != nullptr ) {
459
+ D3D11_BOX box = {0 , 0 , 0 , _width, _height, 1 };
460
+ ctx->CopySubresourceRegion (dest, 0 , 0 , 0 , 0 , src, 0 , &box);
461
+ ctx->Flush ();
462
+ src->Release ();
463
+ }
467
464
468
465
lock.unlock ();
469
466
470
467
return true ;
471
468
}
472
469
473
- ID3D11Texture2D* Nv12ToBgra::getSharedTargetTexture (ID3D11Device* dev, ID3D11DeviceContext* ctx) {
470
+ ID3D11Texture2D * Nv12ToBgra::getSharedTargetTexture (ID3D11Device * dev, ID3D11DeviceContext * ctx) {
474
471
if (!_inited)
475
472
return nullptr ;
476
473
474
+ if (!_texture_rgba_copy_shared)
475
+ return nullptr ;
476
+
477
477
lock.lock ();
478
478
479
- ID3D11Texture2D* src;
480
- dev->OpenSharedResource (_texture_rgba_copy_shared, __uuidof (ID3D11Texture2D), (LPVOID*)&src);
481
- if (src == nullptr )
482
- return nullptr ;
479
+ ID3D11Texture2D *src;
480
+ dev->OpenSharedResource (_texture_rgba_copy_shared, __uuidof (ID3D11Texture2D), (LPVOID *) &src);
483
481
484
482
lock.unlock ();
485
483
@@ -495,8 +493,7 @@ ComPtr<ID3D11Texture2D> DxFrameBuffer::getFree() {
495
493
if (!free.empty ()) {
496
494
ret = free.front ();
497
495
free.pop ();
498
- }
499
- else if (!queue.empty ()) {
496
+ } else if (!queue.empty ()) {
500
497
ret = queue.front ();
501
498
queue.pop ();
502
499
}
0 commit comments