-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add per_buffer metadata as VideoCaptionMeta for ndisink and ndisrc #80
base: master
Are you sure you want to change the base?
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.