mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-08 18:39:54 +00:00
openh264enc: fix broken sps/pps header generation
This was putting a truncated SPS into the initial header instead
of the PPS because it was always reading from the beginning of the
bitstream buffer (pBsBuf) and not from the offset where the current
NAL is at in the bitstream buffer (psBsBuf + nal_offset).
This was broken in commit 17113695
.
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1576
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2178>
This commit is contained in:
parent
fe4ec03a4b
commit
42a7edd40f
1 changed files with 7 additions and 2 deletions
|
@ -1042,8 +1042,13 @@ gst_openh264enc_handle_frame (GstVideoEncoder * encoder,
|
||||||
if (j > 0)
|
if (j > 0)
|
||||||
nal_offset = nal_offset + frame_info.sLayerInfo[i].pNalLengthInByte[j-1];
|
nal_offset = nal_offset + frame_info.sLayerInfo[i].pNalLengthInByte[j-1];
|
||||||
nal_type = ((* (frame_info.sLayerInfo[i].pBsBuf + nal_offset + 4)) & 0x1f);
|
nal_type = ((* (frame_info.sLayerInfo[i].pBsBuf + nal_offset + 4)) & 0x1f);
|
||||||
if (nal_type == NAL_SPS || nal_type == NAL_PPS)
|
/* Note: This only works if SPS/PPS are the first two NALs in which case
|
||||||
gst_buffer_fill (hdr, nal_offset, frame_info.sLayerInfo[i].pBsBuf, frame_info.sLayerInfo[i].pNalLengthInByte[j]);
|
* nal_offset is the same for both the output and the bitstream buffer */
|
||||||
|
if (nal_type == NAL_SPS || nal_type == NAL_PPS) {
|
||||||
|
gst_buffer_fill (hdr, nal_offset,
|
||||||
|
frame_info.sLayerInfo[i].pBsBuf + nal_offset,
|
||||||
|
frame_info.sLayerInfo[i].pNalLengthInByte[j]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
headers = g_list_append (headers, gst_buffer_ref (hdr));
|
headers = g_list_append (headers, gst_buffer_ref (hdr));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue