AJA NTV2 SDK  18.0.0.2717
NTV2 SDK 18.0.0.2717
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:215
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:408
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:276
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:13
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
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:226
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