AJA NTV2 SDK  18.0.0.2122
NTV2 SDK 18.0.0.2122
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
int64_t frameTime
Capture time stamp.
AJA_PixelFormat
Definition: videotypes.h:121
uint32_t * pAudioBuffer
Pointer to host audio buffer.
NTV2FrameBufferFormat
Identifies a particular video frame buffer pixel format. See Device Frame Buffer Formats for details...
Definition: ntv2enums.h:219
AJAStatus
Definition: types.h:380
Declares the AJADebug class.
enum _NTV2VideoFormat NTV2VideoFormat
Identifies a particular video format.
uint32_t videoBufferSize
Size of host video buffer (bytes)
AJAStatus CreateAiffFile(const std::string &inFileName, uint32_t numChannels, uint32_t maxFrames, uint32_t bufferSize)
uint32_t ULWord
Definition: ajatypes.h:223
AJA_FrameRate GetAJAFrameRate(NTV2FrameRate frameRate)
AJAStatus DetermineInputFormat(NTV2VideoFormat sdiFormat, bool quad, NTV2VideoFormat &videoFormat)
uint32_t timeCodeHigh
Time code data high.
uint32_t audioBufferSize
Size of host audio buffer (bytes)
uint32_t infoBufferSize
Size of the host information buffer (bytes)
M31VideoPreset
Definition: ntv2m31enums.h:13
NTV2FrameRate
Identifies a particular video frame rate.
Definition: ntv2enums.h:412
AJAStatus CreateEncFile(const std::string &inFileName, uint32_t maxFrames)
Declares the CRP188 class. See SMPTE RP188 standard for details.
AJAStatus SetupHEVC(CNTV2m31 *pM31, M31VideoPreset preset, M31Channel encodeChannel, bool multiStream, bool withInfo)
AJA_PixelFormat GetAJAPixelFormat(NTV2FrameBufferFormat pixelFormat)
void WriteEncData(void *pBuffer, uint32_t bufferSize)
uint32_t AlignDataBuffer(void *pBuffer, uint32_t bufferSize, uint32_t dataSize, uint32_t alignBytes, uint8_t fill)
void WriteAiffData(void *pBuffer, uint32_t numChannels, uint32_t numSamples)
uint32_t timeCodeLow
Time code data low.
void WriteHevcData(void *pBuffer, uint32_t bufferSize)
AJAStatus ReadYuv420Frame(void *pBuffer, uint32_t numFrame)
uint32_t audioDataSize
Size of audio data (bytes)
Declaration of AJACircularBuffer template class.
M31Channel
Definition: ntv2m31enums.h:226
uint32_t videoDataSize2
Size of field 2 video data (bytes)
AJAStatus CreateRawFile(const std::string &inFileName, uint32_t maxFrames)
void WriteRawData(void *pBuffer, uint32_t bufferSize)
bool lastFrame
Indicates last captured frame.
uint32_t * pVideoBuffer
Pointer to host video buffer.
This structure encapsulates the video and audio buffers used by the HEVC demo applications. The demo programs that employ producer/consumer threads use a fixed number of these buffers.
AJAStatus OpenYuv420File(const std::string &inFileName, const uint32_t width, const uint32_t height)
uint32_t * pInfoBuffer
Picture information (raw) or encode information (hevc)
This file contains some structures, constants, classes and functions that are used in some of the dem...
AJAStatus ConvertYuv420FrameToNV12(void *pSrcBuffer, void *pDstBuffer, uint32_t bufferSize)
uint32_t videoDataSize
Size of video data (bytes)
uint32_t infoDataSize2
Size of the field 2 information data (bytes)
Declares the enumeration constants used in the ajabase library.
uint32_t infoDataSize
Size of the information data (bytes)
AJAStatus CreateHevcFile(const std::string &inFileName, uint32_t maxFrames)
AJA_FrameRate
Definition: videotypes.h:210
uint32_t timeCodeDBB
Time code data dbb.