MMFMWK-8088 Enalbe grecorder in imx8mm

1. update video source and sink to autovideo source/sink
2. Added VP8 encoding format
3. change audio recoder to mp1 layer2 to use opensource encoder
4. Remove videodetect with compiling macro
5. update grecorder command option

Signed-off-by: Jian Li <jian.li@nxp.com>
diff --git a/tools/grecorder/grecorder.c b/tools/grecorder/grecorder.c
index bb334ae..a79c9a8 100644
--- a/tools/grecorder/grecorder.c
+++ b/tools/grecorder/grecorder.c
@@ -303,7 +303,9 @@
   /* Video time stamp and video effect */
   recorder->add_time_stamp ((RecorderEngineHandle)recorder, pOpt->add_time_stamp);
   recorder->add_video_effect ((RecorderEngineHandle)recorder, pOpt->video_effect);
+#ifdef SUPPORT_VIDEO_DETECT
   recorder->add_video_detect ((RecorderEngineHandle)recorder, pOpt->video_detect);
+#endif
 
   /* Audio encoder interface */
   {
@@ -601,7 +603,7 @@
       {"audio input: 0->default(mic), 1->mic, 2->audiotestsrc"},
       {"audio sample rate"},
       {"audio channel"},
-      {"video input: 0->default(camera), 1->camera, 2->screen, 3->videotestsrc"},
+      {"video input: 0->default(camera), 1->camera, 2->videotestsrc"},
       {"camera id: 0->/dev/video0, 1->/dev/video1"},
       {"camera output video format: 0->default(I420), 1->I420, 2->NV12, 3->YUYV, 4->UYVY"},
       {"camera output video width"},
@@ -609,7 +611,9 @@
       {"camera output video FPS"},
       {"add date/time onto video"},
       {"video effect: 0->default(no effect),1:cube,2:mirror,3:squeeze,4:fisheye,5:gray,6:tunnel,7:twirl"},
+#ifdef SUPPORT_VIDEO_DETECT
       {"video detect: 0->default(no detect),1:face detect,2:faceblur"},
+#endif
       {"preview video left"},
       {"preview video top"},
       {"preview video width"},
@@ -618,9 +622,9 @@
       {"need preview buffer"},
       {"audio encoder type: 0->default(MP3), 1->MP3"},
       {"audio encoder bitrate(kbps)"},
-      {"video encoder type: 0->default(H264), 1->H264, 2->MPEG4, 3->H263, 4->MPEG"},
+      {"video encoder type: 0->default(H264), 1->H264, 2->MPEG4, 3->H263, 4->MPEG, 5->VP8"},
       {"video encoder bitrate(kbps)"},
-      {"media container format: 0->default(MOV), 1->MOV, 2->MKV, 3->AVI, 4->FLV, 5->TS"},
+      {"media container format: 0->default(MP4), 1->MP4, 2->MKV, 3->AVI, 4->FLV, 5->TS"},
       {"output path"},
       {"RTP streaming host IP address"},
       {"RTP streaming port"},
@@ -645,7 +649,9 @@
       {"fps",    required_argument, 0, 'f'},
       {"date_time", no_argument,       &add_time_stamp, 1},
       {"video_effect",    required_argument, 0, 'q'},
+#ifdef SUPPORT_VIDEO_DETECT
       {"video_detect",    required_argument, 0, 'x'},
+#endif
       {"preview_left",    required_argument, 0, 'l'},
       {"preview_top",    required_argument, 0, 't'},
       {"preview_width",    required_argument, 0, 'b'},
@@ -667,7 +673,7 @@
       {0, 0, 0, 0}
     };
 
-    c = getopt_long (argc, argv, "abcdefg",
+    c = getopt_long (argc, argv, "a:s:w:e:u:f:k:t:q:i:v:n:z:o:r:x",
         long_options, &option_index);
 
     /* Detect the end of the options. */
@@ -806,6 +812,11 @@
   act.sa_flags = 0;
   sigaction(SIGINT, &act, NULL);
 
+  if (argc < 2) {
+      g_print ("Use -h to get usage help.\n");
+      return 0;
+  }
+
   memset(&options, 0, sizeof(REOptions));
   if (recorder_parse_options(argc,argv,&options)){
     LOG_ERROR ("recorder_parse_options fail.\n");
diff --git a/tools/grecorder/recorder_engine.c b/tools/grecorder/recorder_engine.c
index 549b7f0..3dbd17f 100644
--- a/tools/grecorder/recorder_engine.c
+++ b/tools/grecorder/recorder_engine.c
@@ -35,6 +35,7 @@
 #include <gst/pbutils/encoding-profile.h>
 #include <gst/pbutils/encoding-target.h>
 #include "recorder_engine.h"
+#include "gstimxcommon.h"
 /*
  * debug logging
  */
@@ -328,6 +329,16 @@
         gst_encoding_container_profile_add_profile (container, sprof);
         gst_caps_unref (caps);
         break;
+    case RE_VIDEO_ENCODER_VP8:
+        caps = gst_caps_new_simple ("video/x-vp8", NULL);
+        sprof = (GstEncodingProfile *)
+          gst_encoding_video_profile_new (caps, NULL, NULL, 1);
+        //FIXME: videorate has issue.
+        gst_encoding_video_profile_set_variableframerate ((GstEncodingVideoProfile
+              *) sprof, TRUE);
+        gst_encoding_container_profile_add_profile (container, sprof);
+        gst_caps_unref (caps);
+        break;
     default:
       break;
   }
@@ -336,7 +347,7 @@
     case RE_AUDIO_ENCODER_DEFAULT:
     case RE_AUDIO_ENCODER_MP3:
       caps = gst_caps_new_simple ("audio/mpeg",
-          "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3, NULL);
+          "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 2, NULL);
       gst_encoding_container_profile_add_profile (container, (GstEncodingProfile *)
           gst_encoding_audio_profile_new (caps, NULL, NULL, 1));
       gst_caps_unref (caps);
@@ -822,7 +833,8 @@
     else
       wrapper = gst_element_factory_make ("wrappercamerabinsrc", NULL);
 
-    if (g_strcmp0(recorder->videosrc_name, "imxv4l2src") == 0
+    if (g_strcmp0(recorder->videosrc_name, "v4l2src") == 0
+        || g_strcmp0(recorder->videosrc_name, "imxv4l2src") == 0
         || g_strcmp0(recorder->videosrc_name, "videotestsrc") == 0) {
       camerasrc = gst_element_factory_make (recorder->videosrc_name, NULL);
     } else {
@@ -893,7 +905,7 @@
     if (recorder->video_detect_name)
       recorder->vfsink_name = "imxv4l2sink";
     else
-      recorder->vfsink_name = "overlaysink";
+      recorder->vfsink_name = "autovideosink";
 
   /* configure used elements */
   res &=
@@ -1008,6 +1020,7 @@
         recorder->mode == MODE_VIDEO ? MODE_IMAGE : MODE_VIDEO, NULL);
   }
 
+#if 0
   //FIXME: shouldn't need those code. will check later.
   if (GST_IS_VIDEO_OVERLAY (recorder->viewfinder_sink)) {
     gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(recorder->viewfinder_sink),
@@ -1015,6 +1028,7 @@
   } else {
     g_warning ("view finder sink isn't video overlay.\n");
   }
+#endif
 
   if (GST_STATE_CHANGE_FAILURE ==
       gst_element_set_state (recorder->camerabin, GST_STATE_READY)) {
@@ -1436,12 +1450,13 @@
   RecorderEngine *h = (RecorderEngine *)(handle);
   gRecorderEngine *recorder = (gRecorderEngine *)(h->pData);
   CHECK_PARAM (vs, RE_VIDEO_SOURCE_LIST_END);
+  gchar *videosrc = NULL;
 
   static KeyMap kKeyMap[] = {
-    { RE_VIDEO_SOURCE_DEFAULT, (REchar *)"imxv4l2src" },
-    { RE_VIDEO_SOURCE_CAMERA, (REchar *)"imxv4l2src" },
-    { RE_VIDEO_SOURCE_SCREEN, (REchar *)"ximagesrc ! queue ! imxcompositor_ipu" },
+    { RE_VIDEO_SOURCE_DEFAULT, (REchar *)"autovideosrc" },
+    { RE_VIDEO_SOURCE_CAMERA, (REchar *)"autovideosrc" },
     { RE_VIDEO_SOURCE_TEST, (REchar *)"videotestsrc" },
+    { RE_VIDEO_SOURCE_SCREEN, (REchar *)"ximagesrc ! queue ! imxcompositor_ipu" },
   };
 
   recorder->videosrc_name = key_value_pair (vs, kKeyMap, sizeof(kKeyMap));
@@ -1658,7 +1673,12 @@
   gRecorderEngine *recorder = (gRecorderEngine *)(h->pData);
 
   if (bAddTimeStamp) {
-    recorder->date_time = "clockoverlay halignment=left valignment=top time-format=\"%Y/%m/%d  %H:%M:%S \" ! queue ! imxvideoconvert_ipu composition-meta-enable=true in-place=true ! queue";
+      if (IS_IMX8MM()) {
+          recorder->date_time = "clockoverlay halignment=left valignment=top time-format=\"%Y/%m/%d  %H:%M:%S \" ! queue ! imxvideoconvert_g2d composition-meta-enable=true in-place=true ! queue";
+      }
+      else {
+          recorder->date_time = "clockoverlay halignment=left valignment=top time-format=\"%Y/%m/%d  %H:%M:%S \" ! queue ! imxvideoconvert_ipu composition-meta-enable=true in-place=true ! queue";
+      }
   } else {
     recorder->date_time = NULL;
   }
@@ -1672,6 +1692,11 @@
   gRecorderEngine *recorder = (gRecorderEngine *)(h->pData);
   CHECK_PARAM (videoEffect, RE_VIDEO_EFFECT_LIST_END);
 
+  if (IS_IMX8MM()) {
+      g_print("***Video effect is not supported!\n");
+      return RE_RESULT_FEATURE_UNSUPPORTED;
+  }
+
 /* check gstreamer version, pipeline is different in 1.4.5 and 1.6.0 */
 /* gray shader effect has been removed in GST-1.8.0 */
 #if GST_CHECK_VERSION(1, 8, 0)
@@ -1719,6 +1744,11 @@
   gRecorderEngine *recorder = (gRecorderEngine *)(h->pData);
   CHECK_PARAM (videoDetect, RE_VIDEO_DETECT_LIST_END);
 
+  if (IS_IMX8MM()) {
+      g_print("***Video detect is not supported!\n");
+      return RE_RESULT_FEATURE_UNSUPPORTED;
+  }
+
   static KeyMap kKeyMap[] = {
     { RE_VIDEO_DETECT_DEFAULT, NULL },
     { RE_VIDEO_DETECT_FACEDETECT, (REchar *)"imxvideoconvert_ipu ! queue ! video/x-raw,width=176,height=144 ! queue ! facedetect profile=/usr/share/gst1.0-fsl-plugins/1.0/opencv_haarcascades/haarcascade_frontalface_old_format.xml display=true scale-factor=2 min-size-width=32 min-size-height=32 updates=2 min-neighbors=3 ! queue" },
diff --git a/tools/grecorder/recorder_engine.h b/tools/grecorder/recorder_engine.h
index 4766008..c03fce2 100644
--- a/tools/grecorder/recorder_engine.h
+++ b/tools/grecorder/recorder_engine.h
@@ -68,8 +68,8 @@
 
 #define RE_VIDEO_SOURCE_DEFAULT             ((REuint32) 0x00000000)
 #define RE_VIDEO_SOURCE_CAMERA              ((REuint32) 0x00000001)
-#define RE_VIDEO_SOURCE_SCREEN              ((REuint32) 0x00000002)
-#define RE_VIDEO_SOURCE_TEST                ((REuint32) 0x00000003)
+#define RE_VIDEO_SOURCE_TEST                ((REuint32) 0x00000002)
+#define RE_VIDEO_SOURCE_SCREEN              ((REuint32) 0x00000003)
 #define RE_VIDEO_SOURCE_LIST_END            ((REuint32) 0x00000004)
 
 #define RE_COLORFORMAT_DEFAULT              ((REuint32) 0x00000000)
@@ -116,7 +116,8 @@
 #define RE_VIDEO_ENCODER_MPEG4              ((REuint32) 0x00000002)
 #define RE_VIDEO_ENCODER_H263               ((REuint32) 0x00000003)
 #define RE_VIDEO_ENCODER_MJPEG              ((REuint32) 0x00000004)
-#define RE_VIDEO_ENCODER_LIST_END           ((REuint32) 0x00000005)
+#define RE_VIDEO_ENCODER_VP8                ((REuint32) 0x00000005)
+#define RE_VIDEO_ENCODER_LIST_END           ((REuint32) 0x00000006)
 
 #define RE_EVENT_NONE                       ((REuint32) 0x00000000)
 #define RE_EVENT_ERROR_UNKNOWN              ((REuint32) 0x00000001)