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:
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user