mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-20 07:16:55 +00:00
qtdemux: Support H264 fourcc
https://bugzilla.gnome.org/show_bug.cgi?id=704996
This commit is contained in:
parent
c12c9e7632
commit
2dcdfe07f7
2 changed files with 31 additions and 0 deletions
|
@ -5388,6 +5388,12 @@ qtdemux_parse_node (GstQTDemux * qtdemux, GNode * node, const guint8 * buffer,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case FOURCC_H264:
|
||||||
|
{
|
||||||
|
GST_MEMDUMP_OBJECT (qtdemux, "H264", buffer, end - buffer);
|
||||||
|
qtdemux_parse_container (qtdemux, node, buffer + 0x56, end);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case FOURCC_avc1:
|
case FOURCC_avc1:
|
||||||
{
|
{
|
||||||
GST_MEMDUMP_OBJECT (qtdemux, "avc1", buffer, end - buffer);
|
GST_MEMDUMP_OBJECT (qtdemux, "avc1", buffer, end - buffer);
|
||||||
|
@ -7300,6 +7306,7 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
|
||||||
gst_qtdemux_handle_esds (qtdemux, stream, esds, list);
|
gst_qtdemux_handle_esds (qtdemux, stream, esds, list);
|
||||||
} else {
|
} else {
|
||||||
switch (fourcc) {
|
switch (fourcc) {
|
||||||
|
case FOURCC_H264:
|
||||||
case FOURCC_avc1:
|
case FOURCC_avc1:
|
||||||
{
|
{
|
||||||
gint len = QT_UINT32 (stsd_data) - 0x66;
|
gint len = QT_UINT32 (stsd_data) - 0x66;
|
||||||
|
@ -7340,6 +7347,27 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case FOURCC_strf:
|
||||||
|
{
|
||||||
|
GstBuffer *buf;
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (qtdemux, "found strf codec_data in stsd");
|
||||||
|
|
||||||
|
/* First 4 bytes are the length of the atom, the next 4 bytes
|
||||||
|
* are the fourcc, next 40 bytes are BITMAPINFOHEADER,
|
||||||
|
* next 1 byte is the version, and the
|
||||||
|
* subsequent bytes are sequence parameter set like data. */
|
||||||
|
gst_codec_utils_h264_caps_set_level_and_profile (stream->caps,
|
||||||
|
avc_data + 8 + 40 + 1, size - 1);
|
||||||
|
|
||||||
|
buf = gst_buffer_new_and_alloc (size);
|
||||||
|
gst_buffer_fill (buf, 0, avc_data + 8 + 40, size);
|
||||||
|
gst_caps_set_simple (stream->caps,
|
||||||
|
"codec_data", GST_TYPE_BUFFER, buf, NULL);
|
||||||
|
gst_buffer_unref (buf);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
case FOURCC_btrt:
|
case FOURCC_btrt:
|
||||||
{
|
{
|
||||||
guint avg_bitrate, max_bitrate;
|
guint avg_bitrate, max_bitrate;
|
||||||
|
@ -10300,6 +10328,7 @@ qtdemux_video_caps (GstQTDemux * qtdemux, QtDemuxStream * stream,
|
||||||
_codec ("Apple video");
|
_codec ("Apple video");
|
||||||
caps = gst_caps_new_empty_simple ("video/x-apple-video");
|
caps = gst_caps_new_empty_simple ("video/x-apple-video");
|
||||||
break;
|
break;
|
||||||
|
case GST_MAKE_FOURCC ('H', '2', '6', '4'):
|
||||||
case GST_MAKE_FOURCC ('a', 'v', 'c', '1'):
|
case GST_MAKE_FOURCC ('a', 'v', 'c', '1'):
|
||||||
_codec ("H.264 / AVC");
|
_codec ("H.264 / AVC");
|
||||||
caps = gst_caps_new_simple ("video/x-h264",
|
caps = gst_caps_new_simple ("video/x-h264",
|
||||||
|
|
|
@ -139,6 +139,8 @@ G_BEGIN_DECLS
|
||||||
#define FOURCC_qtim GST_MAKE_FOURCC('q','t','i','m')
|
#define FOURCC_qtim GST_MAKE_FOURCC('q','t','i','m')
|
||||||
#define FOURCC_drms GST_MAKE_FOURCC('d','r','m','s')
|
#define FOURCC_drms GST_MAKE_FOURCC('d','r','m','s')
|
||||||
#define FOURCC_drmi GST_MAKE_FOURCC('d','r','m','i')
|
#define FOURCC_drmi GST_MAKE_FOURCC('d','r','m','i')
|
||||||
|
#define FOURCC_H264 GST_MAKE_FOURCC('H','2','6','4')
|
||||||
|
#define FOURCC_strf GST_MAKE_FOURCC('s','t','r','f')
|
||||||
#define FOURCC_avc1 GST_MAKE_FOURCC('a','v','c','1')
|
#define FOURCC_avc1 GST_MAKE_FOURCC('a','v','c','1')
|
||||||
#define FOURCC_avcC GST_MAKE_FOURCC('a','v','c','C')
|
#define FOURCC_avcC GST_MAKE_FOURCC('a','v','c','C')
|
||||||
#define FOURCC_btrt GST_MAKE_FOURCC('b','t','r','t')
|
#define FOURCC_btrt GST_MAKE_FOURCC('b','t','r','t')
|
||||||
|
|
Loading…
Reference in a new issue