Add per_buffer metadata as VideoCaptionMeta for ndisink and ndisrc#80
Add per_buffer metadata as VideoCaptionMeta for ndisink and ndisrc#80darksidds wants to merge 1 commit into
Conversation
|
Tested under both Linux and Windows. |
| let c_str_1 = CString::new(s1).expect("CString::new failed"); | ||
| let view = c_str_1.as_ptr() as *const u8; | ||
| unsafe { | ||
| gst_buffer_add_video_caption_meta(my_buffer.as_mut_ptr(), GST_VIDEO_CAPTION_TYPE_CEA608_RAW, view, length_of_s1); |
There was a problem hiding this comment.
There's also safe API for this FWIW
|
The caption meta is meant for storing CEA608/708 captions, not arbitrary strings. What kind of metadata is it that you're trying to store here? You probably want to implement your own |
|
I'm trying to store an arbitrary string. Am I supposed to create a new implementation for GstMeta and call it something like NdiPerFrameMeta? |
|
Yeah, or with GStreamer 1.20 you can also use the stringly-typed "custom meta" API. |
|
However there's NDI metadata that maps directly to existing |
Unfortunatelly, GStreamer 1.20 is not out there yet. And probably it would be nice to have a dedicated class for ndi per-buffer metadata. How do you think?
Could you please clarify me a couple of things. I would appreciate that a lot:
while ((gst_meta = gst_buffer_iterate_meta(buffer, &state))) {
if (gst_meta->info == gst_video_caption_meta_get_info()) {
auto video_caption = (GstVideoCaptionMeta *) gst_meta;
// do stuff
} else if (gst_meta->info == gst_video_time_code_meta_get_info()) {
auto timecode_meta = (GstVideoTimeCodeMeta *) gst_meta;
// do stuff
} else if (gst_meta->info == gst_meta_get_info("GstNdiSrcMeta")) {
// do stuff
}
}
|
By using the relevant GStreamer APIs for those metas. I'm not sure I understand the question :)
You have to know the meta for being able to access its fields. You need to call the corresponding C API or e.g. make use of the public struct definition from the C headers.
With some effort, yes. But you can't really do anything with them unless you explicitly know how to handle each. I think there's some misunderstanding on your side how this API works and is supposed to be used. Maybe I can give some useful suggestion if we take a step back and you explain what exactly you're trying to do. |
No description provided.