FreeRDP
Loading...
Searching...
No Matches
libfreerdp/codec/h264.h
1
21#ifndef FREERDP_LIB_CODEC_H264_H
22#define FREERDP_LIB_CODEC_H264_H
23
24#include <freerdp/api.h>
25#include <freerdp/config.h>
26#include <freerdp/codec/h264.h>
27
28#ifdef __cplusplus
29extern "C"
30{
31#endif
32
33 typedef BOOL (*pfnH264SubsystemInit)(H264_CONTEXT* h264);
34 typedef void (*pfnH264SubsystemUninit)(H264_CONTEXT* h264);
35
36 typedef int (*pfnH264SubsystemDecompress)(H264_CONTEXT* WINPR_RESTRICT h264,
37 const BYTE* WINPR_RESTRICT pSrcData, UINT32 SrcSize);
38 typedef int (*pfnH264SubsystemCompress)(H264_CONTEXT* WINPR_RESTRICT h264,
39 const BYTE** WINPR_RESTRICT pSrcYuv,
40 const UINT32* WINPR_RESTRICT pStride,
41 BYTE** WINPR_RESTRICT ppDstData,
42 UINT32* WINPR_RESTRICT pDstSize);
43
45 {
46 const char* name;
47 pfnH264SubsystemInit Init;
48 pfnH264SubsystemUninit Uninit;
49 pfnH264SubsystemDecompress Decompress;
50 pfnH264SubsystemCompress Compress;
51 };
52
54 {
55 BOOL Compressor;
56
57 UINT32 width;
58 UINT32 height;
59
60 H264_RATECONTROL_MODE RateControlMode;
61 UINT32 BitRate;
62 UINT32 FrameRate;
63 UINT32 QP;
64 UINT32 UsageType;
65 UINT32 hwAccel;
66 UINT32 NumberOfThreads;
67
68 UINT32 iStride[3];
69 BYTE* pOldYUVData[3];
70 BYTE* pYUVData[3];
71
72 UINT32 iYUV444Size[3];
73 UINT32 iYUV444Stride[3];
74 BYTE* pOldYUV444Data[3];
75 BYTE* pYUV444Data[3];
76
77 UINT32 numSystemData;
78 void* pSystemData;
79 const H264_CONTEXT_SUBSYSTEM* subsystem;
80 YUV_CONTEXT* yuv;
81
82 BOOL encodingBuffer;
83 BOOL firstLumaFrameDone;
84 BOOL firstChromaFrameDone;
85
86 void* lumaData;
87 wLog* log;
88 };
89
90 FREERDP_LOCAL BOOL avc420_ensure_buffer(H264_CONTEXT* h264, UINT32 stride, UINT32 width,
91 UINT32 height);
92
93#ifdef WITH_MEDIACODEC
94 extern const H264_CONTEXT_SUBSYSTEM g_Subsystem_mediacodec;
95#endif
96#if defined(_WIN32) && defined(WITH_MEDIA_FOUNDATION)
97 extern const H264_CONTEXT_SUBSYSTEM g_Subsystem_MF;
98#endif
99#ifdef WITH_OPENH264
100 extern const H264_CONTEXT_SUBSYSTEM g_Subsystem_OpenH264;
101#endif
102#ifdef WITH_VIDEO_FFMPEG
103 extern const H264_CONTEXT_SUBSYSTEM g_Subsystem_libavcodec;
104#endif
105
106#ifdef __cplusplus
107}
108#endif
109
110#endif /* FREERDP_LIB_CODEC_H264_H */