1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright 2017 Rockchip Electronics Co., Ltd 3*4882a593Smuzhiyun * Author: Randy Li <randy.li@rock-chips.com> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright 2021 Rockchip Electronics Co., Ltd 6*4882a593Smuzhiyun * Author: Jeffy Chen <jeffy.chen@rock-chips.com> 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * This library is free software; you can redistribute it and/or 9*4882a593Smuzhiyun * modify it under the terms of the GNU Library General Public 10*4882a593Smuzhiyun * License as published by the Free Software Foundation; either 11*4882a593Smuzhiyun * version 2 of the License, or (at your option) any later version. 12*4882a593Smuzhiyun * 13*4882a593Smuzhiyun * This library is distributed in the hope that it will be useful, 14*4882a593Smuzhiyun * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*4882a593Smuzhiyun * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16*4882a593Smuzhiyun * Library General Public License for more details. 17*4882a593Smuzhiyun * 18*4882a593Smuzhiyun * You should have received a copy of the GNU Library General Public 19*4882a593Smuzhiyun * License along with this library; if not, write to the 20*4882a593Smuzhiyun * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 21*4882a593Smuzhiyun * Boston, MA 02110-1301, USA. 22*4882a593Smuzhiyun * 23*4882a593Smuzhiyun */ 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #ifndef __GST_MPP_ENC_H__ 26*4882a593Smuzhiyun #define __GST_MPP_ENC_H__ 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun #include <gst/video/gstvideoencoder.h> 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun #include "gstmpp.h" 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun G_BEGIN_DECLS; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #define GST_TYPE_MPP_ENC (gst_mpp_enc_get_type()) 35*4882a593Smuzhiyun G_DECLARE_FINAL_TYPE (GstMppEnc, gst_mpp_enc, GST, MPP_ENC, GstVideoEncoder); 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #define GST_MPP_ENC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ 38*4882a593Smuzhiyun GST_TYPE_MPP_ENC, GstMppEnc)) 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun struct _GstMppEnc 41*4882a593Smuzhiyun { 42*4882a593Smuzhiyun GstVideoEncoder parent; 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun GMutex mutex; 45*4882a593Smuzhiyun GstAllocator *allocator; 46*4882a593Smuzhiyun GstVideoCodecState *input_state; 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun /* final input video info */ 49*4882a593Smuzhiyun GstVideoInfo info; 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun /* stop handling new frame when flushing */ 52*4882a593Smuzhiyun gboolean flushing; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /* drop frames when flushing but not draining */ 55*4882a593Smuzhiyun gboolean draining; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun guint pending_frames; 58*4882a593Smuzhiyun GMutex event_mutex; 59*4882a593Smuzhiyun GCond event_cond; 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /* flow return from pad task */ 62*4882a593Smuzhiyun GstFlowReturn task_ret; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun MppEncHeaderMode header_mode; 65*4882a593Smuzhiyun MppEncRcMode rc_mode; 66*4882a593Smuzhiyun MppEncSeiMode sei_mode; 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun gint rotation; 69*4882a593Smuzhiyun gint width; 70*4882a593Smuzhiyun gint height; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun gint gop; 73*4882a593Smuzhiyun guint max_reenc; 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun guint bps; 76*4882a593Smuzhiyun guint bps_min; 77*4882a593Smuzhiyun guint bps_max; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun gboolean zero_copy_pkt; 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun gboolean arm_afbc; 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun gboolean prop_dirty; 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun MppEncCfg mpp_cfg; 86*4882a593Smuzhiyun MppFrame mpp_frame; 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun MppCodingType mpp_type; 89*4882a593Smuzhiyun MppCtx mpp_ctx; 90*4882a593Smuzhiyun MppApi *mpi; 91*4882a593Smuzhiyun }; 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun #define MPP_ENC_IN_FORMATS \ 94*4882a593Smuzhiyun "NV12, I420, YUY2, UYVY, " \ 95*4882a593Smuzhiyun "BGR16, RGB16, " \ 96*4882a593Smuzhiyun "ABGR, ARGB, BGRA, RGBA, xBGR, xRGB, BGRx, RGBx" 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun #ifdef HAVE_RGA 99*4882a593Smuzhiyun #define MPP_ENC_FORMATS MPP_ENC_IN_FORMATS "," GST_RGA_FORMATS 100*4882a593Smuzhiyun #else 101*4882a593Smuzhiyun #define MPP_ENC_FORMATS MPP_ENC_IN_FORMATS 102*4882a593Smuzhiyun #endif 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun gboolean gst_mpp_enc_apply_properties (GstVideoEncoder * encoder); 105*4882a593Smuzhiyun gboolean gst_mpp_enc_set_src_caps (GstVideoEncoder * encoder, GstCaps * caps); 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun gboolean gst_mpp_enc_supported (MppCodingType mpp_type); 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun G_END_DECLS; 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun #endif /* __GST_MPP_ENC_H__ */ 112