[libmm-camcorder] tv product specific control 35/76435/1
authorHyuntae, Kim <ht1211.kim@samsung.com>
Fri, 24 Jun 2016 02:33:31 +0000 (11:33 +0900)
committerHyuntae, Kim <ht1211.kim@samsung.com>
Fri, 24 Jun 2016 02:33:35 +0000 (11:33 +0900)
Change-Id: I8c25c2a169a531b7479805b3015841ac83127fec

configure.ac
packaging/libmm-camcorder.spec
src/Makefile.am
src/mm_camcorder_gstcommon.c
test/Makefile.am

index 3fb1db6..11e4a98 100644 (file)
@@ -147,6 +147,16 @@ PKG_CHECK_MODULES(DPM, dpm)
 AC_SUBST(DPM_CFLAGS)
 AC_SUBST(DPM_LIBS)
 
+AC_ARG_ENABLE(product-tv, AC_HELP_STRING([--enable-product-tv],[enable tv defined code]),
+[
+  case "${enableval}" in
+    yes) PRODUCT_TV=yes ;;
+    no)  PRODUCT_TV=no ;;
+    *) AC_MSG_ERROR([bad value ${enableval} for --enable-product-tv]) ;;
+  esac
+],[PRODUCT_TV=no])
+AM_CONDITIONAL([PRODUCT_TV], [test "x$PRODUCT_TV" = "xyes"])
+
 # Checks for header files.
 AC_HEADER_STDC
 AC_CHECK_HEADERS([fcntl.h memory.h stdlib.h string.h sys/time.h unistd.h])
index 47a19d9..45343a9 100644 (file)
@@ -2,7 +2,7 @@
 
 Name:       libmm-camcorder
 Summary:    Camera and recorder library
-Version:    0.10.55
+Version:    0.10.56
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
@@ -70,6 +70,7 @@ export CFLAGS+=" -D_LARGEFILE64_SOURCE -DSYSCONFDIR=\\\"%{_sysconfdir}\\\" -DTZ_
        --enable-murphy \
 %else
        --enable-rm \
+       --enable-product-tv \
 %endif
        --disable-static
 make %{?jobs:-j%jobs}
index 7939523..6e10e96 100644 (file)
@@ -89,6 +89,10 @@ libmmfcamcorder_la_CFLAGS += $(RM_CFLAGS) $(AUL_CFLAGS) -D_MMCAMCORDER_RM_SUPPOR
 libmmfcamcorder_la_LIBADD += $(RM_LIBS) $(AUL_LIBS)
 endif
 
+if PRODUCT_TV
+libmmfcamcorder_la_CFLAGS += -D_MMCAMCORDER_PRODUCT_TV
+endif
+
 install-exec-hook:
                                        mkdir -p $(DESTDIR)$(prefix)/share/sounds/mm-camcorder && \
                                        cp $(srcdir)/../sounds/* $(DESTDIR)$(prefix)/share/sounds/mm-camcorder/
index 1d7c2f3..a5efb16 100644 (file)
@@ -2220,6 +2220,13 @@ bool _mmcamcorder_set_videosrc_caps(MMHandleType handle, unsigned int fourcc, in
        gboolean do_set_caps = FALSE;
 
        GstCaps *caps = NULL;
+#ifdef _MMCAMCORDER_PRODUCT_TV
+       GstPad *sinkpad;
+       GstCaps *decsink_caps = NULL;
+       GstStructure *decsink_struct = NULL;
+       int maxwidth = 0;
+       int maxheight = 0;
+#endif /*_MMCAMCORDER_PRODUCT_TV */
 
        mmf_camcorder_t *hcamcorder = NULL;
        _MMCamcorderSubContext *sc = NULL;
@@ -2331,6 +2338,32 @@ bool _mmcamcorder_set_videosrc_caps(MMHandleType handle, unsigned int fourcc, in
                        gst_structure_get_int(structure, "fps", &caps_fps);
                        gst_structure_get_int(structure, "rotate", &caps_rotate);
 
+#ifdef _MMCAMCORDER_PRODUCT_TV
+                       if (sc->info_image->preview_format == MM_PIXEL_FORMAT_ENCODED_H264) {
+                               if (set_width == caps_width && set_height == caps_height && set_rotate == caps_rotate && fps == caps_fps) {
+                                       _mmcam_dbg_log("No need to replace caps.");
+                               } else {
+                                       _mmcam_dbg_log("current [%c%c%c%c %dx%d, fps %d, rot %d], new [%c%c%c%c %dx%d, fps %d, rot %d]",
+                                                      caps_fourcc, caps_fourcc>>8, caps_fourcc>>16, caps_fourcc>>24,
+                                                      caps_width, caps_height, caps_fps, caps_rotate,
+                                                      fourcc, fourcc>>8, fourcc>>16, fourcc>>24,
+                                                      set_width, set_height, fps, set_rotate);
+                                       do_set_caps = TRUE;
+                               }
+                       } else {
+                               if (set_width == caps_width && set_height == caps_height &&
+                                   fourcc == caps_fourcc && set_rotate == caps_rotate && fps == caps_fps) {
+                                       _mmcam_dbg_log("No need to replace caps.");
+                               } else {
+                                       _mmcam_dbg_log("current [%c%c%c%c %dx%d, fps %d, rot %d], new [%c%c%c%c %dx%d, fps %d, rot %d]",
+                                                      caps_fourcc, caps_fourcc>>8, caps_fourcc>>16, caps_fourcc>>24,
+                                                      caps_width, caps_height, caps_fps, caps_rotate,
+                                                      fourcc, fourcc>>8, fourcc>>16, fourcc>>24,
+                                                      set_width, set_height, fps, set_rotate);
+                                       do_set_caps = TRUE;
+                               }
+                       }
+#else /*_MMCAMCORDER_PRODUCT_TV */
                        if (set_width == caps_width && set_height == caps_height &&
                            fourcc == caps_fourcc && set_rotate == caps_rotate && fps == caps_fps) {
                                _mmcam_dbg_log("No need to replace caps.");
@@ -2342,6 +2375,7 @@ bool _mmcamcorder_set_videosrc_caps(MMHandleType handle, unsigned int fourcc, in
                                               set_width, set_height, fps, set_rotate);
                                do_set_caps = TRUE;
                        }
+#endif /*_MMCAMCORDER_PRODUCT_TV */
                } else {
                        _mmcam_dbg_log("can not get structure of caps. set new one...");
                        do_set_caps = TRUE;
@@ -2358,12 +2392,51 @@ bool _mmcamcorder_set_videosrc_caps(MMHandleType handle, unsigned int fourcc, in
 
        if (do_set_caps) {
                if (sc->info_image->preview_format == MM_PIXEL_FORMAT_ENCODED_H264) {
+#ifdef _MMCAMCORDER_PRODUCT_TV
+                       sinkpad = gst_element_get_static_pad(sc->element[_MMCAMCORDER_VIDEOSRC_DECODE].gst, "sink");
+                       if (!sinkpad) {
+                               _mmcam_dbg_err("There are no decoder caps");
+                               return FALSE;
+                       }
+
+                       decsink_caps = gst_pad_get_pad_template_caps(sinkpad);
+                       if (!decsink_caps) {
+                               gst_object_unref(sinkpad);
+                               _mmcam_dbg_err("There is no decoder sink caps");
+                               return FALSE;
+                       }
+
+                       decsink_struct = gst_caps_get_structure(decsink_caps,0);
+                       if (!decsink_struct) {
+                               _mmcam_dbg_err("There are no structure from caps");
+                               gst_object_unref(decsink_caps);
+                               gst_object_unref(sinkpad);
+                               return FALSE;
+                       }
+
+                       if(gst_structure_has_field(decsink_struct, "maxwidth")){
+                               gst_structure_get_int(decsink_struct, "maxwidth", &maxwidth);
+                       }
+                       if(gst_structure_has_field(decsink_struct, "maxheight")){
+                               gst_structure_get_int(decsink_struct, "maxheight", &maxheight);
+                       }
+#endif /* _MMCAMCORDER_PRODUCT_TV */
                        caps = gst_caps_new_simple("video/x-h264",
                                        "width", G_TYPE_INT, set_width,
                                        "height", G_TYPE_INT, set_height,
                                        "framerate", GST_TYPE_FRACTION, fps, 1,
                                        "stream-format", G_TYPE_STRING, "byte-stream",
+#ifdef _MMCAMCORDER_PRODUCT_TV
+                                       "maxwidth", G_TYPE_INT, maxwidth,
+                                       "maxheight", G_TYPE_INT, maxheight,
+                                       "alignment", G_TYPE_STRING, "au",
+#endif /* _MMCAMCORDER_PRODUCT_TV */
                                        NULL);
+
+#ifdef _MMCAMCORDER_PRODUCT_TV
+                       gst_object_unref(decsink_caps);
+                       gst_object_unref(sinkpad);
+#endif /* _MMCAMCORDER_PRODUCT_TV */
                } else {
                        char fourcc_string[sizeof(fourcc)+1];
                        strncpy(fourcc_string, (char*)&fourcc, sizeof(fourcc));
index ab50b32..7a3441c 100644 (file)
@@ -25,4 +25,8 @@ mm_camcorder_testsuite_LDADD = $(top_builddir)/src/libmmfcamcorder.la \
 if RM_SUPPORT
 mm_camcorder_testsuite_CFLAGS += $(RM_CFLAGS) -D_MMCAMCORDER_RM_SUPPORT
 mm_camcorder_testsuite_LDADD += $(RM_LIBS)
+endif
+
+if PRODUCT_TV
+mm_camcorder_testsuite_CFLAGS += -D_MMCAMCORDER_PRODUCT_TV
 endif
\ No newline at end of file