2 * gstvaapiencoder_mpeg2_priv.h - MPEG-2 encoder (private definitions)
4 * Copyright (C) 2013 Intel Corporation
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public License
8 * as published by the Free Software Foundation; either version 2.1
9 * of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free
18 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301 USA
22 #ifndef GST_VAAPI_ENCODER_MPEG2_PRIV_H
23 #define GST_VAAPI_ENCODER_MPEG2_PRIV_H
26 #include <gst/vaapi/gstvaapiencoder.h>
27 #include <gst/vaapi/gstvaapiencoder_priv.h>
31 #define GST_VAAPI_ENCODER_MPEG2(encoder) \
32 ((GstVaapiEncoderMpeg2 *)(encoder))
33 #define GST_VAAPI_ENCODER_MPEG2_CAST(encoder) \
34 ((GstVaapiEncoderMpeg2 *)(encoder))
35 #define GST_VAAPI_ENCODER_MPEG2_CLASS(klass) \
36 ((GstVaapiEncoderMpeg2Class *)(klass))
37 #define GST_IS_VAAPI_ENCODER_MPEG2_CLASS(klass) \
39 #define GST_VAAPI_ENCODER_MPEG2_GET_CLASS(obj) \
40 GST_VAAPI_ENCODER_MPEG2_CLASS(GST_VAAPI_MINI_OBJECT_GET_CLASS(obj))
42 typedef struct _GstVaapiEncoderMpeg2Class GstVaapiEncoderMpeg2Class;
46 GST_ENCODER_MPEG2_PROFILE_SIMPLE,
47 GST_ENCODER_MPEG2_PROFILE_MAIN,
48 } GstEncoderMpeg2Level;
52 GST_VAAPI_ENCODER_MPEG2_LEVEL_LOW,
53 GST_VAAPI_ENCODER_MPEG2_LEVEL_MAIN,
54 GST_VAAPI_ENCODER_MPEG2_LEVEL_HIGH
55 } GstVaapiEncoderMpeg2Level;
57 #define GST_VAAPI_ENCODER_MPEG2_DEFAULT_PROFILE GST_ENCODER_MPEG2_PROFILE_MAIN
58 #define GST_VAAPI_ENCODER_MPEG2_DEFAULT_LEVEL GST_VAAPI_ENCODER_MPEG2_LEVEL_HIGH
59 #define GST_VAAPI_ENCODER_MPEG2_DEFAULT_RATE_CONTROL GST_VAAPI_RATECONTROL_CQP
61 #define GST_VAAPI_ENCODER_MPEG2_MIN_CQP 2
62 #define GST_VAAPI_ENCODER_MPEG2_MAX_CQP 62
63 #define GST_VAAPI_ENCODER_MPEG2_DEFAULT_CQP 8
65 #define GST_VAAPI_ENCODER_MPEG2_MAX_GOP_SIZE 512
66 #define GST_VAAPI_ENCODER_MPEG2_DEFAULT_GOP_SIZE 30
68 #define GST_VAAPI_ENCODER_MPEG2_MAX_MAX_BFRAMES 16
69 #define GST_VAAPI_ENCODER_MPEG2_DEFAULT_MAX_BFRAMES 2
71 #define GST_VAAPI_ENCODER_MPEG2_MAX_BITRATE 100*1024
73 #define START_CODE_PICUTRE 0x00000100
74 #define START_CODE_SLICE 0x00000101
75 #define START_CODE_USER 0x000001B2
76 #define START_CODE_SEQ 0x000001B3
77 #define START_CODE_EXT 0x000001B5
78 #define START_CODE_GOP 0x000001B8
80 #define CHROMA_FORMAT_RESERVED 0
81 #define CHROMA_FORMAT_420 1
82 #define CHROMA_FORMAT_422 2
83 #define CHROMA_FORMAT_444 3
85 struct _GstVaapiEncoderMpeg2
87 GstVaapiEncoder parent;
92 guint32 bitrate; /*kbps */
103 GstVaapiSurfaceProxy *forward;
104 GstVaapiSurfaceProxy *backward;
105 guint32 frame_num; /* same value picture header, but it's not mod by 1024 */
108 struct _GstVaapiEncoderMpeg2Class
111 GstVaapiEncoderClass parent_class;
116 #endif /* GST_VAAPI_ENCODER_MPEG2_PRIV_H */