#include #include #include #include #include #include "ConsumerNode.h" #include "misc.h" #include "ProducerNode.h" BMediaRoster *roster; ProducerNode *producer; ConsumerNode *consumer; status_t rv; int main() { out("Basic BBufferProducer, BBufferConsumer, BMediaRoster test\n"); out("for Haiku by Marcus Overhagen \n\n"); out("Creating BApplication now\n"); BApplication app("application/x-vnd.OpenBeOS-NodeTest"); out("Creating MediaRoster\n"); roster = BMediaRoster::Roster(); val(roster); out("Creating ProducerNode\n"); producer = new ProducerNode(); val(producer); out("Creating ConsumerNode\n"); consumer = new ConsumerNode(); val(consumer); out("Registering ProducerNode\n"); rv = roster->RegisterNode(producer); val(rv); out("Registering ConsumerNode\n"); rv = roster->RegisterNode(consumer); val(rv); media_node sourceNode; media_node destinationNode; out("Calling producer->Node()\n"); sourceNode = producer->Node(); out("Calling consumer->Node()\n"); destinationNode = consumer->Node(); live_node_info live_nodes[100]; int32 live_count; media_format liveformat; memset(&liveformat, 0, sizeof(liveformat)); liveformat.type = B_MEDIA_RAW_AUDIO; out("Calling GetLiveNodes(), has_input = B_MEDIA_RAW_AUDIO\n"); live_count = 100; rv = roster->GetLiveNodes(live_nodes, &live_count, &liveformat); val(rv); out("Found %ld\n",live_count); out("Calling GetLiveNodes(), has_output = B_MEDIA_RAW_AUDIO\n"); live_count = 100; rv = roster->GetLiveNodes(live_nodes, &live_count, NULL, &liveformat); val(rv); out("Found %ld\n",live_count); out("Calling GetLiveNodes(), has_input = has_output = B_MEDIA_RAW_AUDIO\n"); live_count = 100; rv = roster->GetLiveNodes(live_nodes, &live_count, &liveformat, &liveformat); val(rv); out("Found %ld\n",live_count); liveformat.type = B_MEDIA_RAW_VIDEO; out("Calling GetLiveNodes(), has_input = B_MEDIA_RAW_VIDEO\n"); live_count = 100; rv = roster->GetLiveNodes(live_nodes, &live_count, &liveformat); val(rv); out("Found %ld\n",live_count); out("Calling GetLiveNodes(), has_output = B_MEDIA_RAW_VIDEO\n"); live_count = 100; rv = roster->GetLiveNodes(live_nodes, &live_count, NULL, &liveformat); val(rv); out("Found %ld\n",live_count); out("Calling GetLiveNodes(), has_input = has_output = B_MEDIA_RAW_VIDEO\n"); live_count = 100; rv = roster->GetLiveNodes(live_nodes, &live_count, &liveformat, &liveformat); val(rv); out("Found %ld\n",live_count); media_output output; media_input input; media_output outputs[2]; media_input inputs[2]; int32 count; out("Calling GetAllOutputsFor(source)\n"); rv = roster->GetAllOutputsFor(sourceNode,outputs,2,&count); val(rv); out("Found %ld\n",count); rv = (count == 1) ? B_OK : B_ERROR; val(rv); out("Calling GetAllInputsFor(destination)\n"); rv = roster->GetAllInputsFor(destinationNode,inputs,2,&count); val(rv); out("Found %ld\n",count); rv = (count == 1) ? B_OK : B_ERROR; val(rv); out("Calling GetAllInputsFor(source) (should fail)\n"); rv = roster->GetAllInputsFor(sourceNode,inputs,2,&count); val(rv); out("Found %ld\n",count); out("Calling GetAllOutputsFor(destination) (should fail)\n"); rv = roster->GetAllOutputsFor(destinationNode,outputs,2,&count); val(rv); out("Found %ld\n",count); out("Calling GetConnectedOutputsFor(source)\n"); rv = roster->GetConnectedOutputsFor(sourceNode,outputs,2,&count); val(rv); out("Found %ld\n",count); rv = (count == 0) ? B_OK : B_ERROR; val(rv); out("Calling GetConnectedInputsFor(destination)\n"); rv = roster->GetConnectedInputsFor(destinationNode,inputs,2,&count); val(rv); out("Found %ld\n",count); rv = (count == 0) ? B_OK : B_ERROR; val(rv); out("Calling GetConnectedInputsFor(source) (should fail)\n"); rv = roster->GetConnectedInputsFor(sourceNode,inputs,2,&count); val(rv); out("Found %ld\n",count); out("Calling GetConnectedOutputsFor(destination) (should fail)\n"); rv = roster->GetConnectedOutputsFor(destinationNode,outputs,2,&count); val(rv); out("Found %ld\n",count); out("Calling GetFreeOutputsFor(source)\n"); rv = roster->GetFreeOutputsFor(sourceNode,&output,1,&count,B_MEDIA_RAW_AUDIO); val(rv); out("Found %ld\n",count); rv = (count == 1) ? B_OK : B_ERROR; val(rv); out("Calling GetFreeInputsFor(destination)\n"); rv = roster->GetFreeInputsFor(destinationNode,&input,1,&count,B_MEDIA_RAW_AUDIO); val(rv); out("Found %ld\n",count); rv = (count == 1) ? B_OK : B_ERROR; val(rv); out("Calling GetFreeOutputsFor(destination) (should fail)\n"); rv = roster->GetFreeOutputsFor(destinationNode,outputs,2,&count,B_MEDIA_RAW_AUDIO); val(rv); out("Found %ld\n",count); out("Calling GetFreeInputsFor(source) (should fail)\n"); rv = roster->GetFreeInputsFor(sourceNode,inputs,2,&count,B_MEDIA_RAW_AUDIO); val(rv); out("Found %ld\n",count); out("Calling GetAttNodeAttributesFor(source)\n"); media_node_attribute attr[10]; ssize_t size = roster->GetNodeAttributesFor(sourceNode, attr, 10); val_size(size); out("Found %" B_PRIdSSIZE "\n", size); media_format format; format.type = B_MEDIA_RAW_AUDIO; format.u.raw_audio = media_raw_audio_format::wildcard; out("Connecting nodes\n"); rv = roster->Connect(output.source, input.destination, &format, &output, &input); val(rv); out("Prerolling Producer()\n"); rv = roster->PrerollNode(sourceNode); val(rv); out("Prerolling Consumer\n"); rv = roster->PrerollNode(destinationNode); val(rv); bigtime_t time1; bigtime_t time2; bigtime_t start; out("Getting Producer startlatency\n"); rv = roster->GetStartLatencyFor(destinationNode, &time1); val(rv); out("Getting Consumer startlatency\n"); rv = roster->GetStartLatencyFor(sourceNode, &time2); val(rv); start = max_c(time1,time2) + producer->TimeSource()->PerformanceTimeFor(BTimeSource::RealTime() + 2000000); out("Starting Consumer in 2 sec\n"); rv = roster->StartNode(destinationNode, start); val(rv); out("Starting Producer in 2 sec\n"); rv = roster->StartNode(sourceNode, start); val(rv); out("Testing SyncToNode performance time set is 5 sec\n"); rv = roster->SyncToNode(sourceNode, producer->TimeSource()->PerformanceTimeFor( BTimeSource::RealTime() + 5000000), B_INFINITE_TIMEOUT); val(rv); out("########################## PRESS ENTER TO QUIT ##########################\n"); getchar(); media_node_id sourceNodeID; media_node_id destinationNodeID; out("Calling producer->ID()\n"); sourceNodeID = producer->ID(); out("Calling consumer->ID()\n"); destinationNodeID = consumer->ID(); out("Stopping Producer()\n"); rv = roster->StopNode(sourceNode, 0, true); val(rv); out("Stopping Consumer\n"); rv = roster->StopNode(destinationNode, 0, true); val(rv); out("Disconnecting nodes\n"); rv = roster->Disconnect(sourceNodeID, output.source, destinationNodeID, input.destination); val(rv); out("Unregistering ProducerNode\n"); rv = roster->UnregisterNode(producer); val(rv); out("Unregistering ConsumerNode\n"); rv = roster->UnregisterNode(consumer); val(rv); out("Releasing ProducerNode\n"); rv = (producer->Release() == NULL) ? B_OK : B_ERROR; val(rv); out("Releasing ConsumerNode\n"); rv = (consumer->Release() == NULL) ? B_OK : B_ERROR; val(rv); return 0; }