libvlc media thumbnail request results in event callback with null thumbnail when using "--no-video"
When using libvlc_media_thumbnail_request_by_pos
or libvlc_media_thumbnail_request_by_time
to generate a thumbnail, ordinarily the event callback will be invoked with a media_thumbnail_generated event
containing a valid p_thumbnail
.
If the libvlc instance was created with "--no-video", the media_thumbnail_generated event is still invoked when requesting the thumbnail, but the p_thumbnail pointer in the event is NULL.
Should thumbnail generation work even if the video output is suppressed?
Example code showing the issue:
#include <stdio.h>
#include <unistd.h>
#include "vlc.h"
static void thumbnail_generated_callback(const struct libvlc_event_t *p_event, void *p_data) {
printf("thumbnail generated\n");
libvlc_picture_t *p_picture = p_event->u.media_thumbnail_generated.p_thumbnail;
printf("picture is %p\n", p_picture);
}
void test(int argc, const char *const *args);
int main(char **argv, int argc) {
printf("Start test\n\n");
printf("Without no-video:\n");
const char *args1[] = {};
test(0, args1);
printf("With no-video:\n");
const char *args2[] = {"--no-video"};
test(1, args2);
printf("End test\n");
return 0;
}
void test(int argc, const char *const *argv) {
libvlc_instance_t *p_instance = libvlc_new(argc, argv);
libvlc_media_t *p_md = libvlc_media_new_path(p_instance, "./sample.mp4");
libvlc_event_manager_t *p_event_manager = libvlc_media_event_manager(p_md);
libvlc_event_attach(p_event_manager, libvlc_MediaThumbnailGenerated, thumbnail_generated_callback, p_md);
libvlc_media_thumbnail_request_t *p_request = libvlc_media_thumbnail_request_by_pos(p_md, 0.3f, libvlc_media_thumbnail_seek_fast, 240, 160, false, libvlc_picture_Png, 1000);
sleep(1);
libvlc_media_thumbnail_request_destroy(p_request);
libvlc_media_release(p_md);
libvlc_release(p_instance);
printf("\n");
}
With output:
Start test
Without no-video:
thumbnail generated
picture is 0x7f03bc0070a0
With no-video:
thumbnail generated
picture is (nil)
End test