2 #ifndef _GST_H264_ENCODER_H_
3 #define _GST_H264_ENCODER_H_
8 #include "gst/gstbuffer.h"
9 #include "gst/vaapi/gstvaapidisplay.h"
10 #include "gst/vaapi/gstvaapisurfacepool.h"
18 #define H264_ASSERT(exp) assert(exp)
20 #define H264_ASSERT(exp)
23 #define H264_NO_ERROR 0
24 #define H264_MEM_ERR -1
25 #define H264_DISPLAY_ERR -2
26 #define H264_CONFIG_ERR -3
27 #define H264_CONTEXT_ERR -3
28 #define H264_STATE_ERR -4
29 #define H264_ENC_RES_ERR -5
30 #define H264_PICTURE_ERR -6
31 #define H264_SURFACE_ERR -7
32 #define H264_QUERY_STATUS_ERR -8
33 #define H264_DATA_NOT_READY -9
34 #define H264_DATA_ERR -10
35 #define H264_PROFILE_ERR -11
36 #define H264_PARAMETER_ERR -12
39 #define H264_LOG_ERROR(...) fprintf(stdout, ## __VA_ARGS__)
40 #define H264_LOG_DEBUG(...) fprintf(stdout, ## __VA_ARGS__)
41 #define H264_LOG_INFO(...) fprintf(stdout, ## __VA_ARGS__)
44 typedef int H264Status;
45 typedef struct _GstH264Encoder GstH264Encoder;
46 typedef struct _GstH264EncoderPrivate GstH264EncoderPrivate;
47 typedef struct _GstH264EncoderClass GstH264EncoderClass;
50 #define GST_TYPE_H264_ENCODER (gst_h264_encoder_get_type())
51 #define GST_IS_H264_ENCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_H264_ENCODER))
52 #define GST_IS_H264_ENCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_H264_ENCODER))
53 #define GST_H264_ENCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_H264_ENCODER, GstH264EncoderClass))
54 #define GST_H264_ENCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_H264_ENCODER, GstH264Encoder))
55 #define GST_H264_ENCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_H264_ENCODER, GstH264EncoderClass))
56 #define GST_H264_ENCODER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj),GST_TYPE_H264_ENCODER,GstH264EncoderPrivate))
66 H264_PROFILE_BASELINE = 66,
67 H264_PROFILE_MAIN = 77,
68 H264_PROFILE_EXTENDED = 88,
69 H264_PROFILE_HIGH = 100,
70 H264_PROFILE_HIGH10 = 110,
71 H264_PROFILE_HIGH422 = 122,
72 H264_PROFILE_HIGH444 = 144,
73 H264_PROFILE_HIGH444_PREDICTIVE = 244,
77 H264_LEVEL_10 = 10, /* QCIF format, < 380160 samples/sec */
78 H264_LEVEL_11 = 11, /* CIF format, < 768000 samples/sec */
79 H264_LEVEL_12 = 12, /* CIF format, < 1536000 samples/sec */
80 H264_LEVEL_13 = 13, /* CIF format, < 3041280 samples/sec */
81 H264_LEVEL_20 = 20, /* CIF format, < 3041280 samples/sec */
82 H264_LEVEL_21 = 21, /* HHR format, < 5068800 samples/sec */
83 H264_LEVEL_22 = 22, /* SD/4CIF format, < 5184000 samples/sec */
84 H264_LEVEL_30 = 30, /* SD/4CIF format, < 10368000 samples/sec */
85 H264_LEVEL_31 = 31, /* 720pHD format, < 27648000 samples/sec */
86 H264_LEVEL_32 = 32, /* SXGA format, < 55296000 samples/sec */
87 H264_LEVEL_40 = 40, /* 2Kx1K format, < 62914560 samples/sec */
88 H264_LEVEL_41 = 41, /* 2Kx1K format, < 62914560 samples/sec */
89 H264_LEVEL_42 = 42, /* 2Kx1K format, < 125829120 samples/sec */
90 H264_LEVEL_50 = 50, /* 3672x1536 format, < 150994944 samples/sec */
91 H264_LEVEL_51 = 51, /* 4096x2304 format, < 251658240 samples/sec */
94 #define H264_DEFAULT_PROFILE H264_PROFILE_BASELINE
95 #define H264_DEFAULT_LEVEL H264_LEVEL_30
96 #define H264_DEFAULT_INIT_QP 24
97 #define H264_DEFAULT_MIN_QP 1
98 #define H264_DEFAULT_INTRA_PERIOD 30
99 #define H264_DEFAULT_FPS 30
100 #define H264_DEFAULT_SLICE_NUM 1
102 struct _GstH264Encoder {
103 GObject parent; /*based on gobject*/
111 uint32_t intra_period;
112 int32_t init_qp; /*default 24*/
113 int32_t min_qp; /*default 1*/
118 struct _GstH264EncoderClass {
119 GObjectClass parent_class;
123 GType gst_h264_encoder_get_type(void);
125 GstH264Encoder *gst_h264_encoder_new(void);
126 static inline void gst_h264_encoder_unref (GstH264Encoder * encoder)
128 g_object_unref (encoder);
131 void gst_h264_encoder_set_input_format(GstH264Encoder* encoder, uint32_t format);
132 void gst_h264_encoder_set_es_flag(GstH264Encoder* encoder, gboolean es);
133 gboolean gst_h264_encoder_set_display(GstH264Encoder* encoder, GstVaapiDisplay *display);
134 GstVaapiDisplay *gst_h264_encoder_get_display(GstH264Encoder* encoder);
137 H264Status gst_h264_encoder_initialize(GstH264Encoder* encoder);
138 H264Status gst_h264_encoder_uninitialize(GstH264Encoder* encoder);
140 gboolean gst_h264_validate_parameters(GstH264Encoder *encoder);
144 H264Status gst_h264_encoder_open(GstH264Encoder* encoder, GstVaapiSurfacePool *surfaces_pool);
146 H264Status gst_h264_encoder_open(GstH264Encoder* encoder);
149 H264Status gst_h264_encoder_close(GstH264Encoder* encoder);
152 H264Status gst_h264_encoder_encode(GstH264Encoder* encoder, GstBuffer *raw_pic, GList **coded_pics);
153 H264Status gst_h264_encoder_flush(GstH264Encoder* encoder, GList *coded_pics);
155 H264_Encode_State gst_h264_encoder_get_state(GstH264Encoder* encoder);
158 char *h264_dump_bytes(const uint8_t *buf, uint32_t num);
159 H264Status gst_h264_encoder_get_avcC_codec_data(GstH264Encoder* encoder, GstBuffer **buffer);
160 H264Status gst_h264_encoder_get_nal_codec_data(GstH264Encoder* encoder, GstBuffer **buffer);
167 #endif /*_GST_H264_ENCODER_H_ */