h264parse: Fix conversion to AVC if a SPS/PPS not from the first indizes is used
https://bugzilla.gnome.org/show_bug.cgi?id=707974
This commit is contained in:
parent
c57be26ed9
commit
4b5d560092
@ -1000,9 +1000,7 @@ gst_h264_parse_make_codec_data (GstH264Parse * h264parse)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (i = 0;
|
for (i = 0; i < GST_H264_MAX_PPS_COUNT; i++) {
|
||||||
i < GST_H264_MAX_PPS_COUNT
|
|
||||||
&& h264parse->format != GST_H264_PARSE_FORMAT_AVC3; i++) {
|
|
||||||
if ((nal = h264parse->pps_nals[i])) {
|
if ((nal = h264parse->pps_nals[i])) {
|
||||||
num_pps++;
|
num_pps++;
|
||||||
/* size bytes also count */
|
/* size bytes also count */
|
||||||
@ -1010,8 +1008,10 @@ gst_h264_parse_make_codec_data (GstH264Parse * h264parse)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* AVC3 has SPS/PPS inside the stream, not in the codec_data */
|
||||||
if (h264parse->format == GST_H264_PARSE_FORMAT_AVC3) {
|
if (h264parse->format == GST_H264_PARSE_FORMAT_AVC3) {
|
||||||
num_sps = sps_size = 0;
|
num_sps = sps_size = 0;
|
||||||
|
num_pps = pps_size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (h264parse,
|
GST_DEBUG_OBJECT (h264parse,
|
||||||
@ -1034,23 +1034,27 @@ gst_h264_parse_make_codec_data (GstH264Parse * h264parse)
|
|||||||
data[5] = 0xe0 | num_sps; /* number of SPSs */
|
data[5] = 0xe0 | num_sps; /* number of SPSs */
|
||||||
|
|
||||||
data += 6;
|
data += 6;
|
||||||
for (i = 0; i < num_sps; i++) {
|
if (h264parse->format != GST_H264_PARSE_FORMAT_AVC3) {
|
||||||
if ((nal = h264parse->sps_nals[i])) {
|
for (i = 0; i < GST_H264_MAX_SPS_COUNT; i++) {
|
||||||
gsize nal_size = gst_buffer_get_size (nal);
|
if ((nal = h264parse->sps_nals[i])) {
|
||||||
GST_WRITE_UINT16_BE (data, nal_size);
|
gsize nal_size = gst_buffer_get_size (nal);
|
||||||
gst_buffer_extract (nal, 0, data + 2, nal_size);
|
GST_WRITE_UINT16_BE (data, nal_size);
|
||||||
data += 2 + nal_size;
|
gst_buffer_extract (nal, 0, data + 2, nal_size);
|
||||||
|
data += 2 + nal_size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data[0] = num_pps;
|
data[0] = num_pps;
|
||||||
data++;
|
data++;
|
||||||
for (i = 0; i < num_pps; i++) {
|
if (h264parse->format != GST_H264_PARSE_FORMAT_AVC3) {
|
||||||
if ((nal = h264parse->pps_nals[i])) {
|
for (i = 0; i < GST_H264_MAX_PPS_COUNT; i++) {
|
||||||
gsize nal_size = gst_buffer_get_size (nal);
|
if ((nal = h264parse->pps_nals[i])) {
|
||||||
GST_WRITE_UINT16_BE (data, nal_size);
|
gsize nal_size = gst_buffer_get_size (nal);
|
||||||
gst_buffer_extract (nal, 0, data + 2, nal_size);
|
GST_WRITE_UINT16_BE (data, nal_size);
|
||||||
data += 2 + nal_size;
|
gst_buffer_extract (nal, 0, data + 2, nal_size);
|
||||||
|
data += 2 + nal_size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user