21 const string fileName,
22 const uint32_t frameWidth,
23 const uint32_t frameHeight,
34 mDeviceSpecifier (inDeviceSpecifier),
36 mFrameWidth (frameWidth),
37 mFrameHeight (frameHeight),
38 mInputChannel (inChannel),
48 mLastFrameInput (
false),
49 mLastFrameRaw (
false),
50 mLastFrameHevc (
false),
51 mLastFrameVideo (
false),
53 mVideoInputFrameCount (0),
54 mVideoProcessFrameCount (0),
55 mCodecRawFrameCount (0),
56 mCodecHevcFrameCount (0),
57 mVideoFileFrameCount (0)
59 ::memset (mFileInputBuffer, 0x0,
sizeof (mFileInputBuffer));
60 ::memset (mVideoRawBuffer, 0x0,
sizeof (mVideoRawBuffer));
61 ::memset (mVideoHevcBuffer, 0x0,
sizeof (mVideoHevcBuffer));
86 if (mFileInputBuffer[bufferNdx].pVideoBuffer)
91 if (mFileInputBuffer[bufferNdx].pInfoBuffer)
97 if (mVideoRawBuffer[bufferNdx].pVideoBuffer)
102 if (mVideoRawBuffer[bufferNdx].pInfoBuffer)
108 if (mVideoHevcBuffer[bufferNdx].pVideoBuffer)
113 if (mVideoHevcBuffer[bufferNdx].pInfoBuffer)
125 if (mM31 && !mLastFrame && !mGlobalQuit)
133 for (i = 0; i < timeout; i++)
135 if (mLastFrameVideo)
break;
139 { cerr <<
"## ERROR: Wait for last frame timeout" << endl; }
143 { cerr <<
"## ERROR: ChangeEHState ready to stop failed" << endl; }
146 { cerr <<
"## ERROR: ChangeEHState stop failed" << endl; }
150 { cerr <<
"## ERROR: ChangeVInState stop failed" << endl; }
156 { cerr <<
"## ERROR: ChangeMainState to init failed" << endl; }
163 while (mFileInputThread.
Active())
166 while (mVideoProcessThread.
Active())
169 while (mCodecRawThread.
Active())
172 while (mCodecHevcThread.
Active())
175 while (mVideoFileThread.
Active())
200 { cerr <<
"## ERROR: Device '" << mDeviceSpecifier <<
"' not found" << endl;
return AJA_STATUS_OPEN; }
214 if (!mDevice.
features().HasHEVCM31())
216 cerr <<
"## ERROR: M31 not found" << endl;
221 mM31 =
new CNTV2m31 (&mDevice);
232 if (CNTV2m31::IsPresetVIF(mPreset))
236 mVideoFormat = CNTV2m31::GetPresetVideoFormat(mPreset);
237 mPixelFormat = CNTV2m31::GetPresetFrameBufferFormat(mPreset);
238 mQuad = CNTV2m31::IsPresetUHD(mPreset);
239 mInterlaced = CNTV2m31::IsPresetInterlaced(mPreset);
250 switch (mInputChannel)
261 status = mHevcCommon->
SetupHEVC (mM31, mPreset, mEncodeChannel, mMultiStream,
false);
272 cerr <<
"OpenYuv420File " << mFileName <<
" failed " << status << endl;
278 ostringstream fileName;
280 fileName <<
"raw_" << (mInputChannel+1) <<
".hevc";
282 fileName <<
"raw.hevc";
306 for (
unsigned bufferNdx = 0; bufferNdx <
VIDEO_RING_SIZE; bufferNdx++ )
309 mFileInputBuffer[bufferNdx].
pVideoBuffer =
new uint32_t [mVideoBufferSize/4];
313 mFileInputBuffer[bufferNdx].
pInfoBuffer =
new uint32_t [mPicInfoBufferSize/4];
317 mFileInputCircularBuffer.
Add (& mFileInputBuffer[bufferNdx]);
322 for (
unsigned bufferNdx = 0; bufferNdx <
VIDEO_RING_SIZE; bufferNdx++ )
325 mVideoRawBuffer[bufferNdx].
pVideoBuffer =
new uint32_t [mVideoBufferSize/4];
329 mVideoRawBuffer[bufferNdx].
pInfoBuffer =
new uint32_t [mPicInfoBufferSize/4];
333 mVideoRawCircularBuffer.
Add (& mVideoRawBuffer[bufferNdx]);
338 for (
unsigned bufferNdx = 0; bufferNdx <
VIDEO_RING_SIZE; bufferNdx++ )
341 mVideoHevcBuffer[bufferNdx].
pVideoBuffer =
new uint32_t [mVideoBufferSize/4];
345 mVideoHevcBuffer[bufferNdx].
pInfoBuffer =
new uint32_t [mEncInfoBufferSize/4];
349 mVideoHevcCircularBuffer.
Add (& mVideoHevcBuffer[bufferNdx]);
374 mFileInputThread.
Start();
397 if (mVideoInputFrameCount < mHevcCommon->YuvNumFrames())
407 printf(
"Error reading frame %d\n", mVideoInputFrameCount);
414 if (mVideoInputFrameCount == mHevcCommon->
YuvNumFrames())
419 if(pVideoData->
lastFrame && !mLastFrameInput)
421 printf (
"Read last frame number %d\n", mVideoInputFrameCount );
422 mLastFrameInput =
true;
424 mVideoInputFrameCount++;
444 mVideoProcessThread.
Start();
475 mVideoProcessFrameCount++;
495 mCodecRawThread.
Start();
518 { cerr <<
"## ERROR: Device '" << mDeviceSpecifier <<
"' not found" << endl;
return; }
521 m31 =
new CNTV2m31 (&ntv2Device);
534 m31->RawTransfer(mPreset, mEncodeChannel,
539 m31->RawTransfer(mPreset, mEncodeChannel,
546 m31->RawTransfer(mEncodeChannel,
553 mLastFrameRaw =
true;
556 mCodecRawFrameCount++;
574 mCodecHevcThread.
Start();
597 { cerr <<
"## ERROR: Device '" << mDeviceSpecifier <<
"' not found" << endl;
return; }
600 m31 =
new CNTV2m31 (&ntv2Device);
613 uint8_t* pVideoBuffer = (uint8_t*)pFrameData->
pVideoBuffer;
614 uint8_t* pInfoBuffer = (uint8_t*)pFrameData->
pInfoBuffer;
619 m31->EncTransfer(mEncodeChannel,
646 m31->EncTransfer(mEncodeChannel,
669 m31->EncTransfer(mEncodeChannel,
692 mLastFrameHevc =
true;
695 mCodecHevcFrameCount++;
712 mVideoFileThread.
Start();
736 if (!mLastFrameVideo)
743 printf (
"Video file last frame number %d\n", mVideoFileFrameCount );
744 mLastFrameVideo =
true;
747 mVideoFileFrameCount++;