summaryrefslogtreecommitdiff
path: root/gst-libs/gst/vaapi/gstvaapiencoder_h264_priv.h
blob: a7027ae913fd30c1b93e09a8a7f42e257ffa7626 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
 *  gstvaapiencoder_h264_priv.h - H.264 encoder (private definitions)
 *
 *  Copyright (C) 2013 Intel Corporation
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public License
 *  as published by the Free Software Foundation; either version 2.1
 *  of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free
 *  Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 *  Boston, MA 02110-1301 USA
 */

#ifndef GST_VAAPI_ENCODER_H264_PRIV_H
#define GST_VAAPI_ENCODER_H264_PRIV_H

#include <glib.h>
#include <gst/base/gstbitwriter.h>
#include <gst/vaapi/gstvaapiencoder.h>
#include <gst/vaapi/gstvaapiencoder_priv.h>

G_BEGIN_DECLS

#define GST_VAAPI_ENCODER_H264(encoder) \
    ((GstVaapiEncoderH264 *)(encoder))
#define GST_VAAPI_ENCODER_H264_CAST(encoder) \
    ((GstVaapiEncoderH264 *)(encoder))
#define GST_VAAPI_ENCODER_H264_CLASS(klass) \
    ((GstVaapiEncoderH264Class *)(klass))
#define GST_IS_VAAPI_ENCODER_H264_CLASS(klass) \
    ((klass) != NULL)
#define GST_VAAPI_ENCODER_H264_GET_CLASS(obj) \
    GST_VAAPI_ENCODER_H264_CLASS(GST_VAAPI_MINI_OBJECT_GET_CLASS(obj))

typedef struct _GstVaapiEncoderH264Class GstVaapiEncoderH264Class;

typedef enum
{
  GST_VAAPI_ENCODER_H264_LEVEL_10 = 10, /* QCIF format, < 380160 samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_11 = 11, /* CIF format,   < 768000 samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_12 = 12, /* CIF format,   < 1536000  samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_13 = 13, /* CIF format,   < 3041280  samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_20 = 20, /* CIF format,   < 3041280  samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_21 = 21, /* HHR format,  < 5068800  samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_22 = 22, /* SD/4CIF format,     < 5184000      samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_30 = 30, /* SD/4CIF format,     < 10368000    samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_31 = 31, /* 720pHD format,      < 27648000    samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_32 = 32, /* SXGA  format,         < 55296000    samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_40 = 40, /* 2Kx1K format,         < 62914560    samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_41 = 41, /* 2Kx1K format,         < 62914560    samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_42 = 42, /* 2Kx1K format,         < 125829120  samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_50 = 50, /* 3672x1536 format,  < 150994944  samples/sec */
  GST_VAAPI_ENCODER_H264_LEVEL_51 = 51, /* 4096x2304 format,  < 251658240  samples/sec */
} GstVaapiEncoderH264Level;

#define GST_VAAPI_ENCODER_H264_DEFAULT_PROFILE      GST_VAAPI_PROFILE_H264_BASELINE
#define GST_VAAPI_ENCODER_H264_DEFAULT_LEVEL        GST_VAAPI_ENCODER_H264_LEVEL_31
#define GST_VAAPI_ENCODER_H264_DEFAULT_INIT_QP      26
#define GST_VAAPI_ENCODER_H264_DEFAULT_MIN_QP       1
#define GST_VAAPI_ENCODER_H264_DEFAULT_INTRA_PERIOD 30
#define GST_VAAPI_ENCODER_H264_MAX_INTRA_PERIOD     512
#define GST_VAAPI_ENCODER_H264_MAX_IDR_PERIOD       512

#define GST_VAAPI_ENCODER_H264_DEFAULT_SLICE_NUM    1

struct _GstVaapiEncoderH264
{
  GstVaapiEncoder parent;

  /* public */
  guint32 profile;
  guint32 level;
  guint32 bitrate;              /*kbps */
  guint32 intra_period;
  guint32 idr_period;
  guint32 init_qp;              /*default 24 */
  guint32 min_qp;               /*default 1 */
  guint32 slice_num;
  guint32 b_frame_num;

  /* private */
  gboolean is_avc;              /* avc or bytestream */
  /* re-ordering */
  GQueue reorder_frame_list;
  guint reorder_state;
  guint frame_index;
  guint cur_frame_num;
  guint cur_present_index;
  GstClockTime cts_offset;

  /* reference list */
  GQueue ref_list;
  guint max_ref_num;
  /* max reflist count */
  guint max_reflist0_count;
  guint max_reflist1_count;

  /* frame, poc */
  guint32 max_frame_num;
  guint32 log2_max_frame_num;
  guint32 max_pic_order_cnt;
  guint32 log2_max_pic_order_cnt;
  guint32 idr_num;

  GstBuffer *sps_data;
  GstBuffer *pps_data;

};

struct _GstVaapiEncoderH264Class
{
  /*< private > */
  GstVaapiEncoderClass parent_class;
};

G_END_DECLS

#endif /*GST_VAAPI_ENCODER_H264_PRIV_H */