AJA NTV2 SDK  17.5.0.1242
NTV2 SDK 17.5.0.1242
ntv2demohevccommon.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
11 #ifndef _NTV2DEMOHEVCCOMMON_H
12 #define _NTV2DEMOHEVCCOMMON_H
13 
14 #include "ntv2rp188.h"
17 #include "ajabase/system/debug.h"
18 #include "ntv2democommon.h"
19 #include "ntv2m31enums.h"
20 #include "ntv2m31.h"
21 #include <string>
22 
27 typedef struct
28 {
29  uint32_t * pVideoBuffer;
30  uint32_t videoBufferSize;
31  uint32_t videoDataSize;
32  uint32_t videoDataSize2;
33  uint32_t * pInfoBuffer;
34  uint32_t infoBufferSize;
35  uint32_t infoDataSize;
36  uint32_t infoDataSize2;
37  uint32_t * pAudioBuffer;
38  uint32_t audioBufferSize;
39  uint32_t audioDataSize;
40  uint32_t timeCodeDBB;
41  uint32_t timeCodeLow;
42  uint32_t timeCodeHigh;
43  int64_t frameTime;
44  bool lastFrame;
46 
47 
48 typedef struct
49 {
53 } AVHevcStatus;
54 
55 
57 {
58  // Public Instance Methods
59  public:
62 
65 
66  AJAStatus CreateHevcFile(const std::string & inFileName, uint32_t maxFrames);
67  void CloseHevcFile(void);
68  void WriteHevcData(void* pBuffer, uint32_t bufferSize);
69 
70  AJAStatus CreateEncFile(const std::string & inFileName, uint32_t maxFrames);
71  void CloseEncFile(void);
72  void WriteEncData(void* pBuffer, uint32_t bufferSize);
73 
74  AJAStatus CreateAiffFile(const std::string & inFileName, uint32_t numChannels, uint32_t maxFrames, uint32_t bufferSize);
75  void CloseAiffFile(void);
76  void WriteAiffHeader(void);
77  void WriteAiffData(void* pBuffer, uint32_t numChannels, uint32_t numSamples);
78 
79  AJAStatus CreateRawFile(const std::string & inFileName, uint32_t maxFrames);
80  void CloseRawFile(void);
81  void WriteRawData(void* pBuffer, uint32_t bufferSize);
82 
83  AJAStatus OpenYuv420File(const std::string & inFileName, const uint32_t width, const uint32_t height);
84  void CloseYuv420File(void);
85  AJAStatus ReadYuv420Frame(void* pBuffer, uint32_t numFrame);
86  AJAStatus ConvertYuv420FrameToNV12(void* pSrcBuffer, void* pDstBuffer, uint32_t bufferSize);
87  uint64_t YuvFileSize() { return mYuvFileSize; }
88  uint32_t YuvNumFrames() { return mYuvNumTotalFrames; }
89  uint32_t YuvWidth() { return mYuvFrameWidth; }
90  uint32_t YuvHeight() { return mYuvFrameHeight; }
91 
92  uint32_t AlignDataBuffer(void* pBuffer, uint32_t bufferSize, uint32_t dataSize, uint32_t alignBytes, uint8_t fill);
93  AJAStatus DetermineInputFormat(NTV2VideoFormat sdiFormat, bool quad, NTV2VideoFormat& videoFormat);
94 
95  AJAStatus SetupHEVC (CNTV2m31 * pM31, M31VideoPreset preset, M31Channel encodeChannel, bool multiStream, bool withInfo);
96 
97  // Private Member Data
98  private:
99  FILE * mHevcFd;
100  FILE * mEncFd;
101  FILE * mAiffFd;
102  FILE * mYuvFd;
103  FILE * mRawFd;
104 
105  uint32_t mHevcFileFrameCount;
106  uint32_t mMaxHevcFrames;
107 
108  uint32_t mEncFileFrameCount;
109  uint32_t mMaxEncFrames;
110 
111  uint32_t mAiffFileFrameCount;
112  uint32_t mMaxAiffFrames;
113 
114  uint32_t mAiffTotalSize;
115  uint32_t mAiffNumSamples;
116  uint32_t mAiffNumChannels;
117  uint8_t* mAiffWriteBuffer;
118 
119  uint64_t mYuvFileSize;
120  uint32_t mYuvFrameWidth;
121  uint32_t mYuvFrameHeight;
122  uint32_t mYuvNumTotalFrames;
123  uint32_t mYuvFrameSize;
124 
125  uint32_t mRawFileFrameCount;
126  uint32_t mMaxRawFrames;
127 
128 }; // CNTV2DemoHevcCommon
129 
130 
131 #endif // _NTV2DEMOHEVCCOMMON_H
CNTV2DemoHevcCommon::WriteAiffData
void WriteAiffData(void *pBuffer, uint32_t numChannels, uint32_t numSamples)
Definition: ntv2demohevccommon.cpp:355
CNTV2DemoHevcCommon::WriteRawData
void WriteRawData(void *pBuffer, uint32_t bufferSize)
Definition: ntv2demohevccommon.cpp:526
CNTV2DemoHevcCommon::GetAJAPixelFormat
AJA_PixelFormat GetAJAPixelFormat(NTV2FrameBufferFormat pixelFormat)
Definition: ntv2demohevccommon.cpp:65
AVHevcDataBuffer::timeCodeLow
uint32_t timeCodeLow
Time code data low.
Definition: ntv2demohevccommon.h:41
CNTV2DemoHevcCommon::CNTV2DemoHevcCommon
CNTV2DemoHevcCommon()
Definition: ntv2demohevccommon.cpp:27
AVHevcDataBuffer::videoDataSize2
uint32_t videoDataSize2
Size of field 2 video data (bytes)
Definition: ntv2demohevccommon.h:32
AVHevcDataBuffer::audioDataSize
uint32_t audioDataSize
Size of audio data (bytes)
Definition: ntv2demohevccommon.h:39
CNTV2DemoHevcCommon::WriteHevcData
void WriteHevcData(void *pBuffer, uint32_t bufferSize)
Definition: ntv2demohevccommon.cpp:134
CNTV2DemoHevcCommon::YuvHeight
uint32_t YuvHeight()
Definition: ntv2demohevccommon.h:90
AVHevcDataBuffer::lastFrame
bool lastFrame
Indicates last captured frame.
Definition: ntv2demohevccommon.h:44
CNTV2DemoHevcCommon::CreateRawFile
AJAStatus CreateRawFile(const std::string &inFileName, uint32_t maxFrames)
Definition: ntv2demohevccommon.cpp:495
CNTV2DemoHevcCommon
Definition: ntv2demohevccommon.h:56
CNTV2DemoHevcCommon::ConvertYuv420FrameToNV12
AJAStatus ConvertYuv420FrameToNV12(void *pSrcBuffer, void *pDstBuffer, uint32_t bufferSize)
Definition: ntv2demohevccommon.cpp:467
AVHevcDataBuffer::pVideoBuffer
uint32_t * pVideoBuffer
Pointer to host video buffer.
Definition: ntv2demohevccommon.h:29
CNTV2DemoHevcCommon::CloseHevcFile
void CloseHevcFile(void)
Definition: ntv2demohevccommon.cpp:123
CNTV2DemoHevcCommon::WriteEncData
void WriteEncData(void *pBuffer, uint32_t bufferSize)
Definition: ntv2demohevccommon.cpp:183
NTV2FrameBufferFormat
NTV2FrameBufferFormat
Identifies a particular video frame buffer format. See Device Frame Buffer Formats for details.
Definition: ntv2enums.h:210
CNTV2DemoHevcCommon::CloseRawFile
void CloseRawFile(void)
Definition: ntv2demohevccommon.cpp:515
CNTV2DemoHevcCommon::DetermineInputFormat
AJAStatus DetermineInputFormat(NTV2VideoFormat sdiFormat, bool quad, NTV2VideoFormat &videoFormat)
Definition: ntv2demohevccommon.cpp:567
AVHevcDataBuffer::infoDataSize
uint32_t infoDataSize
Size of the information data (bytes)
Definition: ntv2demohevccommon.h:35
AVHevcStatus::framesDropped
ULWord framesDropped
Definition: ntv2demohevccommon.h:51
NTV2FrameRate
NTV2FrameRate
Identifies a particular video frame rate.
Definition: ntv2enums.h:399
AVHevcDataBuffer::pInfoBuffer
uint32_t * pInfoBuffer
Picture information (raw) or encode information (hevc)
Definition: ntv2demohevccommon.h:33
CNTV2DemoHevcCommon::YuvFileSize
uint64_t YuvFileSize()
Definition: ntv2demohevccommon.h:87
AVHevcDataBuffer::infoDataSize2
uint32_t infoDataSize2
Size of the field 2 information data (bytes)
Definition: ntv2demohevccommon.h:36
AJA_FrameRate
AJA_FrameRate
Definition: videotypes.h:210
AVHevcDataBuffer::videoDataSize
uint32_t videoDataSize
Size of video data (bytes)
Definition: ntv2demohevccommon.h:31
AJAStatus
AJAStatus
Definition: types.h:378
ULWord
uint32_t ULWord
Definition: ajatypes.h:255
CNTV2DemoHevcCommon::CloseYuv420File
void CloseYuv420File(void)
Definition: ntv2demohevccommon.cpp:431
CNTV2DemoHevcCommon::CloseAiffFile
void CloseAiffFile(void)
Definition: ntv2demohevccommon.cpp:269
AVHevcDataBuffer::frameTime
int64_t frameTime
Capture time stamp.
Definition: ntv2demohevccommon.h:43
AVHevcStatus::bufferLevel
ULWord bufferLevel
Definition: ntv2demohevccommon.h:52
CNTV2DemoHevcCommon::WriteAiffHeader
void WriteAiffHeader(void)
Definition: ntv2demohevccommon.cpp:288
AVHevcDataBuffer::pAudioBuffer
uint32_t * pAudioBuffer
Pointer to host audio buffer.
Definition: ntv2demohevccommon.h:37
CNTV2DemoHevcCommon::CreateEncFile
AJAStatus CreateEncFile(const std::string &inFileName, uint32_t maxFrames)
Definition: ntv2demohevccommon.cpp:152
M31VideoPreset
M31VideoPreset
Definition: ntv2m31enums.h:12
AVHevcDataBuffer::timeCodeDBB
uint32_t timeCodeDBB
Time code data dbb.
Definition: ntv2demohevccommon.h:40
CNTV2DemoHevcCommon::~CNTV2DemoHevcCommon
~CNTV2DemoHevcCommon()
Definition: ntv2demohevccommon.cpp:55
ntv2democommon.h
This file contains some structures, constants, classes and functions that are used in some of the dem...
videotypes.h
Declares the enumeration constants used in the ajabase library.
ntv2m31enums.h
Enumerations for controlling NTV2 devices with m31 HEVC encoders.
NTV2VideoFormat
enum _NTV2VideoFormat NTV2VideoFormat
Identifies a particular video format.
AVHevcStatus
Definition: ntv2demohevccommon.h:48
CNTV2DemoHevcCommon::CreateAiffFile
AJAStatus CreateAiffFile(const std::string &inFileName, uint32_t numChannels, uint32_t maxFrames, uint32_t bufferSize)
Definition: ntv2demohevccommon.cpp:234
ntv2rp188.h
Declares the CRP188 class. See SMPTE RP188 standard for details.
M31Channel
M31Channel
Definition: ntv2m31enums.h:225
CNTV2DemoHevcCommon::CloseEncFile
void CloseEncFile(void)
Definition: ntv2demohevccommon.cpp:172
AJA_PixelFormat
AJA_PixelFormat
Definition: videotypes.h:121
CNTV2DemoHevcCommon::CreateHevcFile
AJAStatus CreateHevcFile(const std::string &inFileName, uint32_t maxFrames)
Definition: ntv2demohevccommon.cpp:103
AVHevcDataBuffer::videoBufferSize
uint32_t videoBufferSize
Size of host video buffer (bytes)
Definition: ntv2demohevccommon.h:30
AVHevcDataBuffer::timeCodeHigh
uint32_t timeCodeHigh
Time code data high.
Definition: ntv2demohevccommon.h:42
AVHevcDataBuffer::infoBufferSize
uint32_t infoBufferSize
Size of the host information buffer (bytes)
Definition: ntv2demohevccommon.h:34
CNTV2DemoHevcCommon::YuvWidth
uint32_t YuvWidth()
Definition: ntv2demohevccommon.h:89
CNTV2DemoHevcCommon::AlignDataBuffer
uint32_t AlignDataBuffer(void *pBuffer, uint32_t bufferSize, uint32_t dataSize, uint32_t alignBytes, uint8_t fill)
Definition: ntv2demohevccommon.cpp:544
circularbuffer.h
Declaration of AJACircularBuffer template class.
CNTV2DemoHevcCommon::GetAJAFrameRate
AJA_FrameRate GetAJAFrameRate(NTV2FrameRate frameRate)
Definition: ntv2demohevccommon.cpp:82
AVHevcDataBuffer
This structure encapsulates the video and audio buffers used by the HEVC demo applications....
Definition: ntv2demohevccommon.h:27
CNTV2DemoHevcCommon::ReadYuv420Frame
AJAStatus ReadYuv420Frame(void *pBuffer, uint32_t numFrame)
Definition: ntv2demohevccommon.cpp:446
AVHevcStatus::framesProcessed
ULWord framesProcessed
Definition: ntv2demohevccommon.h:50
CNTV2DemoHevcCommon::YuvNumFrames
uint32_t YuvNumFrames()
Definition: ntv2demohevccommon.h:88
AVHevcDataBuffer::audioBufferSize
uint32_t audioBufferSize
Size of host audio buffer (bytes)
Definition: ntv2demohevccommon.h:38
CNTV2DemoHevcCommon::OpenYuv420File
AJAStatus OpenYuv420File(const std::string &inFileName, const uint32_t width, const uint32_t height)
Definition: ntv2demohevccommon.cpp:400
debug.h
Declares the AJADebug class.
CNTV2DemoHevcCommon::SetupHEVC
AJAStatus SetupHEVC(CNTV2m31 *pM31, M31VideoPreset preset, M31Channel encodeChannel, bool multiStream, bool withInfo)
Definition: ntv2demohevccommon.cpp:618