1739250ed2dd7dad210808049d6b4ddc3395af88
[profile/ivi/gstreamer-vaapi.git] / gst / vaapiencode / gstvaapih264encoder.h
1
2 #ifndef _GST_H264_ENCODER_H_
3 #define _GST_H264_ENCODER_H_
4
5
6 #include "gst/vaapi/gstvaapisurfacepool.h"
7
8 #include "gstvaapibaseencoder.h"
9
10 G_BEGIN_DECLS
11
12 typedef struct _GstH264Encoder              GstH264Encoder;
13 typedef struct _GstH264EncoderPrivate       GstH264EncoderPrivate;
14 typedef struct _GstH264EncoderClass         GstH264EncoderClass;
15
16
17 #define GST_TYPE_H264_ENCODER             (gst_h264_encoder_get_type())
18 #define GST_IS_H264_ENCODER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_H264_ENCODER))
19 #define GST_IS_H264_ENCODER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_H264_ENCODER))
20 #define GST_H264_ENCODER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_H264_ENCODER, GstH264EncoderClass))
21 #define GST_H264_ENCODER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_H264_ENCODER, GstH264Encoder))
22 #define GST_H264_ENCODER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_H264_ENCODER, GstH264EncoderClass))
23 #define GST_H264_ENCODER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj),GST_TYPE_H264_ENCODER,GstH264EncoderPrivate))
24
25 typedef enum {
26   H264_PROFILE_BASELINE = 66,
27   H264_PROFILE_MAIN     = 77,
28   H264_PROFILE_EXTENDED = 88,
29   H264_PROFILE_HIGH    = 100,
30   H264_PROFILE_HIGH10  = 110,
31   H264_PROFILE_HIGH422 = 122,
32   H264_PROFILE_HIGH444 = 144,
33   H264_PROFILE_HIGH444_PREDICTIVE = 244,
34 } H264_Profile;
35
36 typedef enum {
37   H264_LEVEL_10 = 10,  /* QCIF format, < 380160 samples/sec */
38   H264_LEVEL_11 = 11,  /* CIF format,   < 768000 samples/sec */
39   H264_LEVEL_12 = 12,  /* CIF format,   < 1536000  samples/sec */
40   H264_LEVEL_13 = 13,  /* CIF format,   < 3041280  samples/sec */
41   H264_LEVEL_20 = 20,  /* CIF format,   < 3041280  samples/sec */
42   H264_LEVEL_21 = 21,  /* HHR format,  < 5068800  samples/sec */
43   H264_LEVEL_22 = 22,  /* SD/4CIF format,     < 5184000      samples/sec */
44   H264_LEVEL_30 = 30,  /* SD/4CIF format,     < 10368000    samples/sec */
45   H264_LEVEL_31 = 31,  /* 720pHD format,      < 27648000    samples/sec */
46   H264_LEVEL_32 = 32,  /* SXGA  format,         < 55296000    samples/sec */
47   H264_LEVEL_40 = 40,  /* 2Kx1K format,         < 62914560    samples/sec */
48   H264_LEVEL_41 = 41,  /* 2Kx1K format,         < 62914560    samples/sec */
49   H264_LEVEL_42 = 42,  /* 2Kx1K format,         < 125829120  samples/sec */
50   H264_LEVEL_50 = 50,  /* 3672x1536 format,  < 150994944  samples/sec */
51   H264_LEVEL_51 = 51,  /* 4096x2304 format,  < 251658240  samples/sec */
52 } H264_Level;
53
54 #define H264_DEFAULT_PROFILE      H264_PROFILE_BASELINE
55 #define H264_DEFAULT_LEVEL        H264_LEVEL_30
56 #define H264_DEFAULT_INIT_QP      24
57 #define H264_DEFAULT_MIN_QP       1
58 #define H264_DEFAULT_INTRA_PERIOD 30
59 #define H264_DEFAULT_FPS          30
60 #define H264_DEFAULT_SLICE_NUM    1
61
62 struct _GstH264Encoder {
63   GstVaapiBaseEncoder parent;   /*based on gobject*/
64
65   guint32         profile;
66   guint32         level;
67   guint32         bitrate;
68   guint32         intra_period;
69   guint32         init_qp;  /*default 24*/
70   guint32         min_qp;   /*default 1*/
71   guint32         slice_num;
72   guint32         b_frame_num;
73 };
74
75 struct _GstH264EncoderClass {
76     GstVaapiBaseEncoderClass parent_class;
77 };
78
79
80 GType    gst_h264_encoder_get_type(void);
81
82 GstH264Encoder *gst_h264_encoder_new(void);
83 static inline void gst_h264_encoder_unref (GstH264Encoder * encoder)
84 {
85   g_object_unref (encoder);
86 }
87
88 void     gst_h264_encoder_set_es_flag(GstH264Encoder* encoder, gboolean es);
89
90
91 G_END_DECLS
92
93 #endif /*_GST_H264_ENCODER_H_ */
94