mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
x264enc: Avoid format decision per frame
Avoid switch/case per frame for format decision and detect the format only if where it could be changed. Note that, whenever encoder->input_state is changed, gst_x264_enc_init_encoder() is called. https://bugzilla.gnome.org/show_bug.cgi?id=797164
This commit is contained in:
parent
6c37b359ee
commit
7e63943361
2 changed files with 7 additions and 4 deletions
|
@ -1582,7 +1582,8 @@ gst_x264_enc_init_encoder (GstX264Enc * encoder)
|
||||||
encoder->x264param.i_bitdepth = GST_VIDEO_INFO_COMP_DEPTH (info, 0);
|
encoder->x264param.i_bitdepth = GST_VIDEO_INFO_COMP_DEPTH (info, 0);
|
||||||
#endif
|
#endif
|
||||||
encoder->x264param.i_csp =
|
encoder->x264param.i_csp =
|
||||||
gst_x264_enc_gst_to_x264_video_format (info->finfo->format, NULL);
|
gst_x264_enc_gst_to_x264_video_format (info->finfo->format,
|
||||||
|
&encoder->x264_nplanes);
|
||||||
if (info->fps_d == 0 || info->fps_n == 0) {
|
if (info->fps_d == 0 || info->fps_n == 0) {
|
||||||
/* No FPS so must use VFR
|
/* No FPS so must use VFR
|
||||||
* This raises latency apparently see http://mewiki.project357.com/wiki/X264_Encoding_Suggestions */
|
* This raises latency apparently see http://mewiki.project357.com/wiki/X264_Encoding_Suggestions */
|
||||||
|
@ -2378,7 +2379,7 @@ gst_x264_enc_handle_frame (GstVideoEncoder * video_enc,
|
||||||
x264_picture_t pic_in;
|
x264_picture_t pic_in;
|
||||||
gint i_nal, i;
|
gint i_nal, i;
|
||||||
FrameData *fdata;
|
FrameData *fdata;
|
||||||
gint nplanes = 0;
|
gint nplanes = encoder->x264_nplanes;
|
||||||
|
|
||||||
if (G_UNLIKELY (encoder->x264enc == NULL))
|
if (G_UNLIKELY (encoder->x264enc == NULL))
|
||||||
goto not_inited;
|
goto not_inited;
|
||||||
|
@ -2393,8 +2394,7 @@ gst_x264_enc_handle_frame (GstVideoEncoder * video_enc,
|
||||||
if (!fdata)
|
if (!fdata)
|
||||||
goto invalid_frame;
|
goto invalid_frame;
|
||||||
|
|
||||||
pic_in.img.i_csp =
|
pic_in.img.i_csp = encoder->x264param.i_csp;
|
||||||
gst_x264_enc_gst_to_x264_video_format (info->finfo->format, &nplanes);
|
|
||||||
pic_in.img.i_plane = nplanes;
|
pic_in.img.i_plane = nplanes;
|
||||||
for (i = 0; i < nplanes; i++) {
|
for (i = 0; i < nplanes; i++) {
|
||||||
pic_in.img.plane[i] = GST_VIDEO_FRAME_COMP_DATA (&fdata->vframe, i);
|
pic_in.img.plane[i] = GST_VIDEO_FRAME_COMP_DATA (&fdata->vframe, i);
|
||||||
|
|
|
@ -123,6 +123,9 @@ struct _GstX264Enc
|
||||||
const gchar *peer_profile;
|
const gchar *peer_profile;
|
||||||
gboolean peer_intra_profile;
|
gboolean peer_intra_profile;
|
||||||
gint peer_level_idc;
|
gint peer_level_idc;
|
||||||
|
|
||||||
|
/* cached values to set x264_picture_t */
|
||||||
|
gint x264_nplanes;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstX264EncClass
|
struct _GstX264EncClass
|
||||||
|
|
Loading…
Reference in a new issue