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
38 #define H264_LOG_ERROR(...) fprintf(stdout, ## __VA_ARGS__)
39 #define H264_LOG_DEBUG(...) fprintf(stdout, ## __VA_ARGS__)
40 #define H264_LOG_INFO(...) fprintf(stdout, ## __VA_ARGS__)
43 typedef int H264Status;
44 typedef void* VADisplay;
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,
76 #define H264_DEFAULT_INIT_QP 26
78 struct _GstH264Encoder {
79 GObject parent; /*based on gobject*/
87 uint32_t intra_period;
88 int32_t init_qp; /*default 26*/
92 struct _GstH264EncoderClass {
93 GObjectClass parent_class;
97 GType gst_h264_encoder_get_type(void);
99 GstH264Encoder *gst_h264_encoder_new(void);
100 static inline void gst_h264_encoder_unref (GstH264Encoder * encoder)
102 g_object_unref (encoder);
105 void gst_h264_encoder_set_input_format(GstH264Encoder* encoder, uint32_t format);
106 void gst_h264_encoder_set_es_flag(GstH264Encoder* encoder, gboolean es);
107 gboolean gst_h264_encoder_set_display(GstH264Encoder* encoder, GstVaapiDisplay *display);
108 GstVaapiDisplay *gst_h264_encoder_get_display(GstH264Encoder* encoder);
111 H264Status gst_h264_encoder_initialize(GstH264Encoder* encoder);
112 H264Status gst_h264_encoder_uninitialize(GstH264Encoder* encoder);
117 void gst_h264_encoder_set_default_values(GstH264Encoder* encoder);
122 H264Status gst_h264_encoder_open(GstH264Encoder* encoder, GstVaapiSurfacePool *surfaces_pool);
124 H264Status gst_h264_encoder_open(GstH264Encoder* encoder);
127 H264Status gst_h264_encoder_close(GstH264Encoder* encoder);
130 H264Status gst_h264_encoder_encode(GstH264Encoder* encoder, GstBuffer *raw_pic, GList **coded_pics);
131 H264Status gst_h264_encoder_flush(GstH264Encoder* encoder, GList *coded_pics);
133 H264_Encode_State gst_h264_encoder_get_state(GstH264Encoder* encoder);
136 char *h264_dump_bytes(const uint8_t *buf, uint32_t num);
137 H264Status gst_h264_encoder_get_avcC_codec_data(GstH264Encoder* encoder, GstBuffer **buffer);
138 H264Status gst_h264_encoder_get_nal_codec_data(GstH264Encoder* encoder, GstBuffer **buffer);
145 #endif /*_GST_H264_ENCODER_H_ */