video_mixer: fix build and crash, add to image

Change-Id: I3c58538666313e74134fb6f1f5fc0c697b213cca
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3033
Reviewed-by: Adrien Destugues <[email protected]>
Tested-by: Commit checker robot <[email protected]>
This commit is contained in:
X512
2026-02-04 09:49:13 +00:00
committed by Adrien Destugues
parent b8045ba67f
commit 685d305a5b
8 changed files with 108 additions and 101 deletions
+1
View File
@@ -224,6 +224,7 @@ SYSTEM_ADD_ONS_MEDIA += [ FFilterByBuildFeatures
opensound.media_addon opensound.media_addon
tone_producer_demo.media_addon tone_producer_demo.media_addon
usb_webcam.media_addon usb_webcam.media_addon
video_mixer.media_addon
video_producer_demo.media_addon video_producer_demo.media_addon
video_window_demo.media_addon video_window_demo.media_addon
vst_host.media_addon vst_host.media_addon
@@ -13,7 +13,7 @@ for architectureObject in [ MultiArchSubDirSetup ] {
VideoMixerAddOn.cpp VideoMixerAddOn.cpp
CpuCapabilities.cpp CpuCapabilities.cpp
BufferMixer.cpp BufferMixer.cpp
yuvrgb.nasm # yuvrgb.nasm
: be media [ TargetLibsupc++ ] [ TargetLibstdc++ ] : be media [ TargetLibsupc++ ] [ TargetLibstdc++ ]
; ;
} }
@@ -40,7 +40,7 @@ VideoMixerAddOn::~VideoMixerAddOn()
VideoMixerAddOn::VideoMixerAddOn(image_id image) : VideoMixerAddOn::VideoMixerAddOn(image_id image) :
BMediaAddOn(image) BMediaAddOn(image)
{ {
PRINT("VideoMixerAddOn::VideoMixerAddOn\n"); PRINT(("VideoMixerAddOn::VideoMixerAddOn\n"));
refCount = 0; refCount = 0;
} }
@@ -51,13 +51,13 @@ VideoMixerAddOn::VideoMixerAddOn(image_id image) :
status_t VideoMixerAddOn::InitCheck( status_t VideoMixerAddOn::InitCheck(
const char **out_failure_text) const char **out_failure_text)
{ {
PRINT("VideoMixerAddOn::InitCheck\n"); PRINT(("VideoMixerAddOn::InitCheck\n"));
return B_OK; return B_OK;
} }
int32 VideoMixerAddOn::CountFlavors() int32 VideoMixerAddOn::CountFlavors()
{ {
PRINT("VideoMixerAddOn::CountFlavors\n"); PRINT(("VideoMixerAddOn::CountFlavors\n"));
return 1; return 1;
} }
@@ -65,7 +65,7 @@ status_t VideoMixerAddOn::GetFlavorAt(
int32 n, int32 n,
const flavor_info **out_info) const flavor_info **out_info)
{ {
PRINT("VideoMixerAddOn::GetFlavorAt\n"); PRINT(("VideoMixerAddOn::GetFlavorAt\n"));
if (n != 0) { if (n != 0) {
fprintf(stderr,"<- B_BAD_INDEX\n"); fprintf(stderr,"<- B_BAD_INDEX\n");
return B_BAD_INDEX; return B_BAD_INDEX;
@@ -81,7 +81,7 @@ BMediaNode * VideoMixerAddOn::InstantiateNodeFor(
BMessage * config, BMessage * config,
status_t * out_error) status_t * out_error)
{ {
PRINT("VideoMixerAddOn::InstantiateNodeFor\n"); PRINT(("VideoMixerAddOn::InstantiateNodeFor\n"));
VideoMixerNode *node = new VideoMixerNode(info, config, this); VideoMixerNode *node = new VideoMixerNode(info, config, this);
if (node == NULL) { if (node == NULL) {
*out_error = B_NO_MEMORY; *out_error = B_NO_MEMORY;
@@ -96,7 +96,7 @@ status_t VideoMixerAddOn::GetConfigurationFor(
BMediaNode * your_node, BMediaNode * your_node,
BMessage * into_message) BMessage * into_message)
{ {
PRINT("VideoMixerAddOn::GetConfigurationFor\n"); PRINT(("VideoMixerAddOn::GetConfigurationFor\n"));
VideoMixerNode *node = dynamic_cast<VideoMixerNode *>(your_node); VideoMixerNode *node = dynamic_cast<VideoMixerNode *>(your_node);
if (node == NULL) { if (node == NULL) {
fprintf(stderr,"<- B_BAD_TYPE\n"); fprintf(stderr,"<- B_BAD_TYPE\n");
@@ -107,7 +107,7 @@ status_t VideoMixerAddOn::GetConfigurationFor(
bool VideoMixerAddOn::WantsAutoStart() bool VideoMixerAddOn::WantsAutoStart()
{ {
PRINT("VideoMixerAddOn::WantsAutoStart\n"); PRINT(("VideoMixerAddOn::WantsAutoStart\n"));
return false; return false;
} }
@@ -117,7 +117,7 @@ status_t VideoMixerAddOn::AutoStart(
int32 *out_internal_id, int32 *out_internal_id,
bool *out_has_more) bool *out_has_more)
{ {
PRINT("VideoMixerAddOn::AutoStart\n"); PRINT(("VideoMixerAddOn::AutoStart\n"));
return B_OK; return B_OK;
} }
@@ -93,7 +93,7 @@ VideoMixerNode::CreateInput(uint32 inputID) {
ClearInput(input); ClearInput(input);
// don't overwrite available space, and be sure to terminate // don't overwrite available space, and be sure to terminate
sprintf(input->name, "VideoMixer Input %ld", inputID); sprintf(input->name, "VideoMixer Input %" B_PRIu32, inputID);
return input; return input;
} }
@@ -185,7 +185,7 @@ BMediaAddOn *VideoMixerNode::AddOn(
void VideoMixerNode::Start(bigtime_t performance_time) void VideoMixerNode::Start(bigtime_t performance_time)
{ {
fprintf(stderr,"VideoMixerNode::Start(pt=%lld)\n", performance_time); fprintf(stderr, "VideoMixerNode::Start(pt=%" B_PRIdBIGTIME ")\n", performance_time);
BMediaEventLooper::Start(performance_time); BMediaEventLooper::Start(performance_time);
} }
@@ -194,9 +194,11 @@ void VideoMixerNode::Stop(
bool immediate) bool immediate)
{ {
if (immediate) { if (immediate) {
fprintf(stderr,"VideoMixerNode::Stop(pt=%lld,<immediate>)\n", performance_time); fprintf(stderr, "VideoMixerNode::Stop(pt=%" B_PRIdBIGTIME ",<immediate>)\n",
performance_time);
} else { } else {
fprintf(stderr,"VideoMixerNode::Stop(pt=%lld,<scheduled>)\n", performance_time); fprintf(stderr, "VideoMixerNode::Stop(pt=%" B_PRIdBIGTIME ",<scheduled>)\n",
performance_time);
} }
BMediaEventLooper::Stop(performance_time, immediate); BMediaEventLooper::Stop(performance_time, immediate);
} }
@@ -205,7 +207,8 @@ void VideoMixerNode::Seek(
bigtime_t media_time, bigtime_t media_time,
bigtime_t performance_time) bigtime_t performance_time)
{ {
fprintf(stderr,"VideoMixerNode::Seek(mt=%lld,pt=%lld)\n", media_time,performance_time); fprintf(stderr, "VideoMixerNode::Seek(mt=%" B_PRIdBIGTIME ",pt=%" B_PRIdBIGTIME ")\n",
media_time, performance_time);
BMediaEventLooper::Seek(media_time, performance_time); BMediaEventLooper::Seek(media_time, performance_time);
} }
@@ -219,7 +222,8 @@ void VideoMixerNode::TimeWarp(
bigtime_t at_real_time, bigtime_t at_real_time,
bigtime_t to_performance_time) bigtime_t to_performance_time)
{ {
fprintf(stderr,"VideoMixerNode::TimeWarp(rt=%lld,pt=%lld)\n", at_real_time, to_performance_time); fprintf(stderr, "VideoMixerNode::TimeWarp(rt=%" B_PRIdBIGTIME ",pt=%" B_PRIdBIGTIME ")\n",
at_real_time, to_performance_time);
BMediaEventLooper::TimeWarp(at_real_time, to_performance_time); BMediaEventLooper::TimeWarp(at_real_time, to_performance_time);
} }
@@ -305,8 +309,8 @@ void VideoMixerNode::GetFlavor(flavor_info *outInfo, int32 id)
if (outInfo != NULL) { if (outInfo != NULL) {
outInfo->internal_id = id; outInfo->internal_id = id;
strcpy(outInfo->name, "Haiku VideoMixer"); outInfo->name = strdup("Haiku VideoMixer");
strcpy(outInfo->info, "A VideoMixerNode node mixes multiple video" outInfo->info = strdup("A VideoMixerNode node mixes multiple video"
" streams into a single stream."); " streams into a single stream.");
outInfo->kinds = B_BUFFER_CONSUMER | B_BUFFER_PRODUCER; outInfo->kinds = B_BUFFER_CONSUMER | B_BUFFER_PRODUCER;
outInfo->flavor_flags = B_FLAVOR_IS_LOCAL; outInfo->flavor_flags = B_FLAVOR_IS_LOCAL;
@@ -45,7 +45,7 @@ status_t VideoMixerNode::GetNextInput(
int32 *cookie, int32 *cookie,
media_input *out_input) media_input *out_input)
{ {
fprintf(stderr,"VideoMixerNode(BBufferConsumer)::GetNextInput (%ld)\n",*cookie); fprintf(stderr, "VideoMixerNode(BBufferConsumer)::GetNextInput (%" B_PRId32 ")\n", *cookie);
// Cookie 0 is the connecting input, all others are connected inputs // Cookie 0 is the connecting input, all others are connected inputs
if (uint32(*cookie) == fConnectedInputs.size()) { if (uint32(*cookie) == fConnectedInputs.size()) {
@@ -168,7 +168,7 @@ status_t VideoMixerNode::Connected(
// compute the latency or just guess // compute the latency or just guess
fInternalLatency = 500; // just a guess fInternalLatency = 500; // just a guess
fprintf(stderr," internal latency guessed = %lld\n", fInternalLatency); fprintf(stderr, " internal latency guessed = %" B_PRIdBIGTIME "\n", fInternalLatency);
SetEventLatency(fInternalLatency); SetEventLatency(fInternalLatency);
@@ -49,7 +49,7 @@ void VideoMixerNode::HandleEvent(
HandleParameter(event,lateness,realTimeEvent); HandleParameter(event,lateness,realTimeEvent);
break; break;
default: default:
fprintf(stderr," unknown event type: %ld\n",event->type); fprintf(stderr, " unknown event type: %" B_PRId32 "\n", event->type);
break; break;
} }
} }
@@ -99,7 +99,8 @@ status_t VideoMixerNode::HandleSeek(
bigtime_t lateness, bigtime_t lateness,
bool realTimeEvent) bool realTimeEvent)
{ {
fprintf(stderr,"VideoMixerNode(BMediaEventLooper)::HandleSeek(t=%lld,d=%ld,bd=%lld)\n",event->event_time, event->data, event->bigdata); fprintf(stderr, "VideoMixerNode(BMediaEventLooper)::HandleSeek(t=%" B_PRIdBIGTIME ",d=%"
B_PRId32 ",bd=%" B_PRId64 ")\n", event->event_time, event->data, event->bigdata);
return B_OK; return B_OK;
} }
@@ -119,7 +120,8 @@ status_t VideoMixerNode::HandleStop(
{ {
fprintf(stderr, "VideoMixerNode(BMediaEventLooper)::HandleStop\n"); fprintf(stderr, "VideoMixerNode(BMediaEventLooper)::HandleStop\n");
// flush the queue so downstreamers don't get any more // flush the queue so downstreamers don't get any more
EventQueue()->FlushEvents(0, BTimedEventQueue::B_ALWAYS, true, BTimedEventQueue::B_HANDLE_BUFFER); EventQueue()->FlushEvents(0, BTimedEventQueue::B_ALWAYS, true,
BTimedEventQueue::B_HANDLE_BUFFER);
return B_OK; return B_OK;
} }
@@ -99,7 +99,7 @@ status_t VideoMixerNode::GetNextOutput( /* cookie starts as 0 */
int32 *cookie, int32 *cookie,
media_output *out_output) media_output *out_output)
{ {
fprintf(stderr,"VideoMixerNode(BBufferProducer)::GetNextOutput (%ld)\n",*cookie); fprintf(stderr, "VideoMixerNode(BBufferProducer)::GetNextOutput (%" B_PRId32 ")\n", *cookie);
// only 1 output // only 1 output
if (*cookie != 0) { if (*cookie != 0) {
@@ -240,7 +240,7 @@ void VideoMixerNode::Connect(
void VideoMixerNode::ComputeInternalLatency() { void VideoMixerNode::ComputeInternalLatency() {
fprintf(stderr, "VideoMixerNode(BBufferProducer)::ComputeInternalLatency\n"); fprintf(stderr, "VideoMixerNode(BBufferProducer)::ComputeInternalLatency\n");
fInternalLatency = 100; // just guess fInternalLatency = 100; // just guess
fprintf(stderr," internal latency guessed = %lld\n",fInternalLatency); fprintf(stderr, " internal latency guessed = %" B_PRIdBIGTIME "\n", fInternalLatency);
} }
void VideoMixerNode::Disconnect( void VideoMixerNode::Disconnect(