1*4882a593SmuzhiyunFrom a7fabf2b02ae99611d2c06ab85fc0f0c6275a9bf Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jiajian Wu <jair.wu@rock-chips.com> 3*4882a593SmuzhiyunDate: Tue, 11 Jul 2023 16:10:23 +0800 4*4882a593SmuzhiyunSubject: [PATCH] camera: use H264 encoder and matroska muxer 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunSigned-off-by: Jiajian Wu <jair.wu@rock-chips.com> 7*4882a593Smuzhiyun--- 8*4882a593Smuzhiyun libcheese/cheese-camera.c | 25 ++++++++++++++++--------- 9*4882a593Smuzhiyun libcheese/cheese-fileutil.h | 2 +- 10*4882a593Smuzhiyun 2 files changed, 17 insertions(+), 10 deletions(-) 11*4882a593Smuzhiyun 12*4882a593Smuzhiyundiff --git a/libcheese/cheese-camera.c b/libcheese/cheese-camera.c 13*4882a593Smuzhiyunindex 2185892b..0201898a 100644 14*4882a593Smuzhiyun--- a/libcheese/cheese-camera.c 15*4882a593Smuzhiyun+++ b/libcheese/cheese-camera.c 16*4882a593Smuzhiyun@@ -441,12 +441,12 @@ cheese_camera_set_video_recording (CheeseCamera *camera, GError **error) 17*4882a593Smuzhiyun const gchar *video_preset; 18*4882a593Smuzhiyun gboolean res; 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun- /* Check if we can use global preset for vp8enc. */ 21*4882a593Smuzhiyun- video_enc = gst_element_factory_make ("mppvp8enc", "vp8enc"); 22*4882a593Smuzhiyun+ /* Check if we can use global preset for h264enc. */ 23*4882a593Smuzhiyun+ video_enc = gst_element_factory_make ("mpph264enc", "videnc"); 24*4882a593Smuzhiyun video_preset = (gchar *) &CHEESE_VIDEO_ENC_PRESET; 25*4882a593Smuzhiyun res = gst_preset_load_preset (GST_PRESET (video_enc), video_preset); 26*4882a593Smuzhiyun if (res == FALSE) { 27*4882a593Smuzhiyun- g_warning("Can't find vp8enc preset: \"%s\", using alternate preset:" 28*4882a593Smuzhiyun+ g_warning("Can't find h264enc preset: \"%s\", using alternate preset:" 29*4882a593Smuzhiyun " \"%s\". If you see this, make a bug report!", 30*4882a593Smuzhiyun video_preset, CHEESE_VIDEO_ENC_ALT_PRESET); 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun@@ -456,7 +456,7 @@ cheese_camera_set_video_recording (CheeseCamera *camera, GError **error) 33*4882a593Smuzhiyun video_preset = (gchar *) &CHEESE_VIDEO_ENC_ALT_PRESET; 34*4882a593Smuzhiyun res = gst_preset_load_preset (GST_PRESET (video_enc), video_preset); 35*4882a593Smuzhiyun if (res == FALSE) { 36*4882a593Smuzhiyun- g_warning ("Can't find vp8enc preset: \"%s\", " 37*4882a593Smuzhiyun+ g_warning ("Can't find h264enc preset: \"%s\", " 38*4882a593Smuzhiyun "creating new userspace preset.", video_preset); 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* Seems like we do first run and userspace preset do not exist. 41*4882a593Smuzhiyun@@ -469,14 +469,14 @@ cheese_camera_set_video_recording (CheeseCamera *camera, GError **error) 42*4882a593Smuzhiyun } 43*4882a593Smuzhiyun gst_object_unref(video_enc); 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun- /* create profile for webm encoding */ 46*4882a593Smuzhiyun- caps = gst_caps_from_string("video/webm"); 47*4882a593Smuzhiyun- prof = gst_encoding_container_profile_new("WebM audio/video", 48*4882a593Smuzhiyun- "Standard WebM/VP8/Vorbis", 49*4882a593Smuzhiyun+ /* create profile for matroska encoding */ 50*4882a593Smuzhiyun+ caps = gst_caps_from_string("video/x-matroska"); 51*4882a593Smuzhiyun+ prof = gst_encoding_container_profile_new("Matroska audio/video", 52*4882a593Smuzhiyun+ "Standard Matroska/H264/Vorbis", 53*4882a593Smuzhiyun caps, NULL); 54*4882a593Smuzhiyun gst_caps_unref (caps); 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun- caps = gst_caps_from_string("video/x-vp8"); 57*4882a593Smuzhiyun+ caps = gst_caps_from_string("video/x-h264"); 58*4882a593Smuzhiyun v_prof = gst_encoding_video_profile_new(caps, NULL, NULL, 0); 59*4882a593Smuzhiyun gst_encoding_video_profile_set_variableframerate(v_prof, TRUE); 60*4882a593Smuzhiyun gst_encoding_profile_set_preset((GstEncodingProfile*) v_prof, video_preset); 61*4882a593Smuzhiyun@@ -772,6 +772,13 @@ cheese_camera_set_new_caps (CheeseCamera *camera) 62*4882a593Smuzhiyun g_object_set (priv->effects_capsfilter, "caps", caps, NULL); 63*4882a593Smuzhiyun } 64*4882a593Smuzhiyun gst_caps_unref (caps); 65*4882a593Smuzhiyun+ 66*4882a593Smuzhiyun+ caps = gst_caps_from_string ("audio/x-raw,rate=44100,channels=1,format=F32LE"); 67*4882a593Smuzhiyun+ if (caps) 68*4882a593Smuzhiyun+ { 69*4882a593Smuzhiyun+ g_object_set (priv->camerabin, "audio-capture-caps", caps, NULL); 70*4882a593Smuzhiyun+ gst_caps_unref (caps); 71*4882a593Smuzhiyun+ } 72*4882a593Smuzhiyun } 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun void 75*4882a593Smuzhiyundiff --git a/libcheese/cheese-fileutil.h b/libcheese/cheese-fileutil.h 76*4882a593Smuzhiyunindex 87f827f6..0e420ef7 100644 77*4882a593Smuzhiyun--- a/libcheese/cheese-fileutil.h 78*4882a593Smuzhiyun+++ b/libcheese/cheese-fileutil.h 79*4882a593Smuzhiyun@@ -36,7 +36,7 @@ 80*4882a593Smuzhiyun * 81*4882a593Smuzhiyun * The filename suffix for videos saved by Cheese. 82*4882a593Smuzhiyun */ 83*4882a593Smuzhiyun-#define CHEESE_VIDEO_NAME_SUFFIX ".webm" 84*4882a593Smuzhiyun+#define CHEESE_VIDEO_NAME_SUFFIX ".mkv" 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun G_BEGIN_DECLS 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun-- 89*4882a593Smuzhiyun2.25.1 90*4882a593Smuzhiyun 91