source: https://git.archlinux.org/svntogit/community.git/plain/guvcview/repos/community-testing-x86_64/ffmpeg4.patch

Index: guvcview-src-2.0.5/guvcview/gui_gtk3_callbacks.c
===================================================================
--- guvcview/gui_gtk3_callbacks.c
+++ guvcview/gui_gtk3_callbacks.c
@@ -2158,9 +2158,9 @@
 	gtk_grid_attach (GTK_GRID(table), lbl_me_method, 0, line, 1 ,1);
 	gtk_widget_show (lbl_me_method);
 
-	GtkWidget *me_method = gtk_spin_button_new_with_range(1,10,1);
+	GtkWidget *me_method = gtk_entry_new();
 	gtk_editable_set_editable(GTK_EDITABLE(me_method),TRUE);
-	gtk_spin_button_set_value (GTK_SPIN_BUTTON(me_method), defaults->me_method);
+	gtk_entry_set_text(me_method, defaults->me_method);
 
 	gtk_grid_attach (GTK_GRID(table), me_method, 1, line, 1 ,1);
 	gtk_widget_show (me_method);
@@ -2246,7 +2246,7 @@
 			defaults->qblur = (float) gtk_spin_button_get_value (GTK_SPIN_BUTTON(qblur));
 			defaults->subq = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(subq));
 			defaults->framerefs = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(framerefs));
-			defaults->me_method = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(me_method));
+			defaults->me_method = gtk_entry_get_text (me_method);
 			defaults->mb_decision = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(mb_decision));
 			defaults->max_b_frames = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(max_b_frames));
 			defaults->num_threads = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(num_threads));Index: guvcview-src-2.0.5/guvcview/gui_qt5_callbacks.cpp
===================================================================
--- guvcview/gui_qt5_callbacks.cpp
+++ guvcview/gui_qt5_callbacks.cpp
@@ -1590,10 +1590,8 @@ void MainWindow::video_codec_properties(
 	framerefs->setValue(defaults->framerefs);
 	form.addRow(_("framerefs:   "), framerefs);
 	/*me method*/
-	QSpinBox *me_method = new QSpinBox(&dialog);
-	me_method->setRange(1, 10);
-	me_method->setSingleStep(1);						
-	me_method->setValue(defaults->me_method);
+	QLabel *me_method = new QLabel(&dialog);
+	me_method->setText(defaults->me_method);
 	form.addRow(_("me method:   "), me_method);
 	/*mb decision*/
 	QSpinBox *mb_decision = new QSpinBox(&dialog);
@@ -1645,7 +1643,7 @@ void MainWindow::video_codec_properties(
 		defaults->qblur = qblur->value();
 		defaults->subq = subq->value();
 		defaults->framerefs = framerefs->value();
-		defaults->me_method = me_method->value();
+		defaults->me_method = me_method->text().toLatin1().data();
 		defaults->mb_decision = mb_decision->value();
 		defaults->max_b_frames = max_b_frames->value();
 		defaults->num_threads = num_threads->value();
Index: guvcview-src-2.0.5/gview_encoder/encoder.c
===================================================================
--- gview_encoder/encoder.c
+++ gview_encoder/encoder.c
@@ -445,10 +445,8 @@ static encoder_video_context_t *encoder_
 #if !LIBAVCODEC_VER_AT_LEAST(56,60)
 	video_codec_data->codec_context->me_method = video_defaults->me_method;
 #else
-	if( video_defaults->codec_id == AV_CODEC_ID_H264 && video_defaults->me_method > 4)
-		video_defaults->me_method = X264_ME_HEX;
-
-	av_dict_set_int(&video_codec_data->private_options, "motion-est", video_defaults->me_method, 0);
+	if(video_defaults->me_method)
+		av_dict_set(&video_codec_data->private_options, "motion-est", video_defaults->me_method, 0);
 #endif
 
 #if !LIBAVCODEC_VER_AT_LEAST(57,00)
Index: guvcview-src-2.0.5/gview_encoder/gviewencoder.h
===================================================================
--- gview_encoder/gviewencoder.h
+++ gview_encoder/gviewencoder.h
@@ -104,7 +104,7 @@ typedef struct _video_codec_t
 	char codec_name[20];      //lavc codec_name
 	int mb_decision;          //lavc mb_decision
 	int trellis;              //lavc trellis quantization
-	int me_method;            //lavc motion estimation method
+	const char* me_method;            //lavc motion estimation method
 	int mpeg_quant;           //lavc mpeg quantization
 	int max_b_frames;         //lavc max b frames
 	int num_threads;          //lavc num threads
Index: guvcview-src-2.0.5/gview_encoder/video_codecs.c
===================================================================
--- gview_encoder/video_codecs.c
+++ gview_encoder/video_codecs.c
@@ -97,7 +97,7 @@ static video_codec_t listSupCodecs[] =
 		.codec_name   = "none",
 		.mb_decision  = 0,
 		.trellis      = 0,
-		.me_method    = 0,
+		.me_method    = NULL,
 		.mpeg_quant   = 0,
 		.max_b_frames = 0,
 		.num_threads  = 0,
@@ -133,7 +133,7 @@ static video_codec_t listSupCodecs[] =
 		.codec_name   = "mjpeg",
 		.mb_decision  = 0,
 		.trellis      = 0,
-		.me_method    = ME_EPZS,
+		.me_method    = "epsz",
 		.mpeg_quant   = 0,
 		.max_b_frames = 0,
 		.num_threads  = 0,
@@ -169,7 +169,7 @@ static video_codec_t listSupCodecs[] =
 		.codec_name   = "mpeg1video",
 		.mb_decision  = FF_MB_DECISION_RD,
 		.trellis      = 1,
-		.me_method    = ME_EPZS,
+		.me_method    = "epsz",
 		.mpeg_quant   = 0,
 		.max_b_frames = 0,
 		.num_threads  = 1,
@@ -205,11 +205,11 @@ static video_codec_t listSupCodecs[] =
 		.codec_name   = "flv",
 		.mb_decision  = FF_MB_DECISION_RD,
 		.trellis      = 1,
-		.me_method    = ME_EPZS,
+		.me_method    = "epsz",
 		.mpeg_quant   = 0,
 		.max_b_frames = 0,
 		.num_threads  = 1,
-		.flags        = CODEC_FLAG_4MV
+		.flags        = AV_CODEC_FLAG_4MV
 	},
 	{
 		.valid        = 1,
@@ -241,7 +241,7 @@ static video_codec_t listSupCodecs[] =
 		.codec_name   = "wmv1",
 		.mb_decision  = FF_MB_DECISION_RD,
 		.trellis      = 1,
-		.me_method    = ME_EPZS,
+		.me_method    = "epsz",
 		.mpeg_quant   = 0,
 		.max_b_frames = 0,
 		.num_threads  = 1,
@@ -277,7 +277,7 @@ static video_codec_t listSupCodecs[] =
 		.codec_name   = "mpeg2video",
 		.mb_decision  = FF_MB_DECISION_RD,
 		.trellis      = 1,
-		.me_method    = ME_EPZS,
+		.me_method    = "epsz",
 		.mpeg_quant   = 0,
 		.max_b_frames = 0,
 		.num_threads  = 1,
@@ -313,7 +313,7 @@ static video_codec_t listSupCodecs[] =
 		.codec_name   = "msmpeg4v3",
 		.mb_decision  = FF_MB_DECISION_RD,
 		.trellis      = 1,
-		.me_method    = ME_EPZS,
+		.me_method    = "epsz",
 		.mpeg_quant   = 0,
 		.max_b_frames = 0,
 		.num_threads  = 1,
@@ -349,7 +349,7 @@ static video_codec_t listSupCodecs[] =
 		.codec_name   = "mpeg4",
 		.mb_decision  = FF_MB_DECISION_RD,
 		.trellis      = 1,
-		.me_method    = ME_EPZS,
+		.me_method    = "epsz",
 		.mpeg_quant   = 1,
 		.max_b_frames = 0,
 		.num_threads  = 1,
@@ -385,7 +385,7 @@ static video_codec_t listSupCodecs[] =
 		.codec_name   = "libx264",
 		.mb_decision  = FF_MB_DECISION_RD,
 		.trellis      = 0,
-		.me_method    = X264_ME_HEX,
+		.me_method    = "hex",
 		.mpeg_quant   = 1,
 		.max_b_frames = 16,
 		.num_threads  = 4,
@@ -426,7 +426,7 @@ static video_codec_t listSupCodecs[] =
 		.codec_name   = "libx265",
 		.mb_decision  = FF_MB_DECISION_RD,
 		.trellis      = 0,
-		.me_method    = ME_HEX,
+		.me_method    = "hex",
 		.mpeg_quant   = 1,
 		.max_b_frames = 16,
 		.num_threads  = 4,
@@ -463,7 +463,7 @@ static video_codec_t listSupCodecs[] =
 		.codec_name   = "libvpx_vp8",
 		.mb_decision  = FF_MB_DECISION_RD,
 		.trellis      = 0,
-		.me_method    = ME_HEX,
+		.me_method    = "hex",
 		.mpeg_quant   = 1,
 		.max_b_frames = 0,
 		.num_threads  = 4,
@@ -500,7 +500,7 @@ static video_codec_t listSupCodecs[] =
 		.codec_name   = "libvpx_vp9",
 		.mb_decision  = FF_MB_DECISION_RD,
 		.trellis      = 0,
-		.me_method    = ME_HEX,
+		.me_method    = "hex",
 		.mpeg_quant   = 1,
 		.max_b_frames = 16,
 		.num_threads  = 4,
@@ -537,7 +537,7 @@ static video_codec_t listSupCodecs[] =
 		.codec_name   = "libtheora",
 		.mb_decision  = FF_MB_DECISION_RD,
 		.trellis      = 0,
-		.me_method    = ME_HEX,
+		.me_method    = "hex",
 		.mpeg_quant   = 1,
 		.max_b_frames = 0,
 		.num_threads  = 4,
Index: guvcview-src-2.0.5/gview_v4l2core/uvc_h264.c
===================================================================
--- gview_v4l2core/uvc_h264.c
+++ gview_v4l2core/uvc_h264.c
@@ -1039,7 +1039,7 @@ int h264_init_decoder(int width, int hei
 		exit(-1);
 	}
 	
-	h264_ctx->context->flags2 |= CODEC_FLAG2_FAST;
+	h264_ctx->context->flags2 |= AV_CODEC_FLAG2_FAST;
 	h264_ctx->context->pix_fmt = AV_PIX_FMT_YUV420P;
 	h264_ctx->context->width = width;
 	h264_ctx->context->height = height;

