diff --git a/gst/isomp4/fourcc.h b/gst/isomp4/fourcc.h index 8643ce994f..51a65e9cd6 100644 --- a/gst/isomp4/fourcc.h +++ b/gst/isomp4/fourcc.h @@ -254,6 +254,7 @@ G_BEGIN_DECLS #define FOURCC_wide GST_MAKE_FOURCC('w','i','d','e') #define FOURCC_zlib GST_MAKE_FOURCC('z','l','i','b') +#define FOURCC_cfhd GST_MAKE_FOURCC('C','F','H','D') #define FOURCC_ap4x GST_MAKE_FOURCC('a','p','4','x') #define FOURCC_ap4h GST_MAKE_FOURCC('a','p','4','h') #define FOURCC_apch GST_MAKE_FOURCC('a','p','c','h') diff --git a/gst/isomp4/gstqtmux.c b/gst/isomp4/gstqtmux.c index a67b2e5e0a..e5b651c905 100644 --- a/gst/isomp4/gstqtmux.c +++ b/gst/isomp4/gstqtmux.c @@ -4380,6 +4380,9 @@ gst_qt_mux_video_sink_set_caps (GstQTPad * qtpad, GstCaps * caps) qtmux->interleave_time = 500 * GST_MSECOND; if (!qtmux->interleave_bytes_set) qtmux->interleave_bytes = width > 720 ? 4 * 1024 * 1024 : 2 * 1024 * 1024; + } else if (strcmp (mimetype, "video/x-cineform") == 0) { + entry.fourcc = FOURCC_cfhd; + sync = FALSE; } if (!entry.fourcc) diff --git a/gst/isomp4/gstqtmuxmap.c b/gst/isomp4/gstqtmuxmap.c index 1b95b9caa6..b8e08e08fc 100644 --- a/gst/isomp4/gstqtmuxmap.c +++ b/gst/isomp4/gstqtmuxmap.c @@ -84,6 +84,10 @@ "variant = (string) {standard, lt, hq, proxy, 4444, 4444xq}, " \ COMMON_VIDEO_CAPS +#define CINEFORM_CAPS \ + "video/x-cineform, " \ + COMMON_VIDEO_CAPS + #define SVQ_CAPS \ "video/x-svq, " \ "svqversion = (int) 3, " \ @@ -178,6 +182,7 @@ GstQTMuxFormatProp gst_qt_mux_format_list[] = { COMMON_VIDEO_CAPS "; " MPEG4V_CAPS "; " PRORES_CAPS "; " + CINEFORM_CAPS "; " H263_CAPS "; " H264_CAPS "; " H265_CAPS "; " diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c index 9e55a6cd6c..955eb10eeb 100644 --- a/gst/isomp4/qtdemux.c +++ b/gst/isomp4/qtdemux.c @@ -13747,6 +13747,10 @@ qtdemux_video_caps (GstQTDemux * qtdemux, QtDemuxStream * stream, gst_caps_new_simple ("video/x-prores", "variant", G_TYPE_STRING, "4444xq", NULL); break; + case FOURCC_cfhd: + _codec ("GoPro CineForm"); + caps = gst_caps_from_string ("video/x-cineform"); + break; case FOURCC_vc_1: case FOURCC_ovc1: _codec ("VC-1"); diff --git a/gst/isomp4/qtdemux_types.c b/gst/isomp4/qtdemux_types.c index 15a6184963..d6cdf81189 100644 --- a/gst/isomp4/qtdemux_types.c +++ b/gst/isomp4/qtdemux_types.c @@ -94,6 +94,7 @@ static const QtNodeType qt_node_types[] = { {FOURCC_dfLa, "dfLa", 0, qtdemux_dump_dfLa}, {FOURCC_wave, "wave", QT_FLAG_CONTAINER}, {FOURCC_appl, "appl", QT_FLAG_CONTAINER}, + {FOURCC_cfhd, "cfhd", QT_FLAG_CONTAINER}, {FOURCC_esds, "esds", 0}, {FOURCC_hnti, "hnti", QT_FLAG_CONTAINER}, {FOURCC_rtp_, "rtp ", 0, qtdemux_dump_unknown},