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