summaryrefslogtreecommitdiff
path: root/gst/videoparsers
diff options
context:
space:
mode:
authorJan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>2021-02-02 18:25:31 +0100
committerJan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>2021-02-02 18:44:49 +0100
commit0f084d46247f9009584b482cea8196b5b871cc73 (patch)
treebf042839e5bcf75e15296d55014c9ddded7f3943 /gst/videoparsers
parent956d6e8ff7eaa663a4f8ebcb6d7d7d6ef3b18e33 (diff)
downloadgstreamer-plugins-bad-0f084d46247f9009584b482cea8196b5b871cc73.tar.gz
h264/h265parse: Add VideoTimeCodeMeta to the outgoing buffer
The parsers attempted to add the meta to the incoming buffer, which might not be the outgoing buffer or may not have been writable yet. To fix this, call `gst_buffer_make_writable` earlier and make sure to use the `parse_buffer` to add the meta. Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1521 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2002>
Diffstat (limited to 'gst/videoparsers')
-rw-r--r--gst/videoparsers/gsth264parse.c18
-rw-r--r--gst/videoparsers/gsth265parse.c16
2 files changed, 17 insertions, 17 deletions
diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c
index d5f2816e5..a7808b4de 100644
--- a/gst/videoparsers/gsth264parse.c
+++ b/gst/videoparsers/gsth264parse.c
@@ -3134,7 +3134,14 @@ gst_h264_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
}
#endif
- if (!gst_buffer_get_video_time_code_meta (buffer)) {
+ if (frame->out_buffer) {
+ parse_buffer = frame->out_buffer =
+ gst_buffer_make_writable (frame->out_buffer);
+ } else {
+ parse_buffer = frame->buffer = gst_buffer_make_writable (frame->buffer);
+ }
+
+ if (!gst_buffer_get_video_time_code_meta (parse_buffer)) {
guint i = 0;
for (i = 0; i < 3 && h264parse->num_clock_timestamp; i++) {
@@ -3197,7 +3204,7 @@ gst_h264_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
"Add time code meta %02u:%02u:%02u:%02u",
tim->hours_value, tim->minutes_value, tim->seconds_value, n_frames);
- gst_buffer_add_video_time_code_meta_full (buffer,
+ gst_buffer_add_video_time_code_meta_full (parse_buffer,
h264parse->parsed_fps_n,
h264parse->parsed_fps_d,
NULL,
@@ -3210,13 +3217,6 @@ gst_h264_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
h264parse->num_clock_timestamp = 0;
}
- if (frame->out_buffer) {
- parse_buffer = frame->out_buffer =
- gst_buffer_make_writable (frame->out_buffer);
- } else {
- parse_buffer = frame->buffer = gst_buffer_make_writable (frame->buffer);
- }
-
if (is_interlaced) {
GST_BUFFER_FLAG_SET (parse_buffer, GST_VIDEO_BUFFER_FLAG_INTERLACED);
if (h264parse->sei_pic_struct == GST_H264_SEI_PIC_STRUCT_TOP_FIELD)
diff --git a/gst/videoparsers/gsth265parse.c b/gst/videoparsers/gsth265parse.c
index e94f86d24..774783646 100644
--- a/gst/videoparsers/gsth265parse.c
+++ b/gst/videoparsers/gsth265parse.c
@@ -2748,6 +2748,13 @@ gst_h265_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
}
}
+ if (frame->out_buffer) {
+ parse_buffer = frame->out_buffer =
+ gst_buffer_make_writable (frame->out_buffer);
+ } else {
+ parse_buffer = frame->buffer = gst_buffer_make_writable (frame->buffer);
+ }
+
{
guint i = 0;
@@ -2809,7 +2816,7 @@ gst_h265_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
gst_util_uint64_scale_int (h265parse->time_code.n_frames[i], 1,
2 - h265parse->time_code.units_field_based_flag[i]);
- gst_buffer_add_video_time_code_meta_full (buffer,
+ gst_buffer_add_video_time_code_meta_full (parse_buffer,
h265parse->parsed_fps_n,
h265parse->parsed_fps_d,
NULL,
@@ -2823,13 +2830,6 @@ gst_h265_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
}
}
- if (frame->out_buffer) {
- parse_buffer = frame->out_buffer =
- gst_buffer_make_writable (frame->out_buffer);
- } else {
- parse_buffer = frame->buffer = gst_buffer_make_writable (frame->buffer);
- }
-
if (h265parse->sei_pic_struct != GST_H265_SEI_PIC_STRUCT_FRAME) {
GST_BUFFER_FLAG_SET (parse_buffer, GST_VIDEO_BUFFER_FLAG_INTERLACED);
if (h265parse->sei_pic_struct == GST_H265_SEI_PIC_STRUCT_TOP_FIELD)