summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/AVStreams/Modify_QoS/sender.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/tests/AVStreams/Modify_QoS/sender.cpp')
-rw-r--r--TAO/orbsvcs/tests/AVStreams/Modify_QoS/sender.cpp446
1 files changed, 0 insertions, 446 deletions
diff --git a/TAO/orbsvcs/tests/AVStreams/Modify_QoS/sender.cpp b/TAO/orbsvcs/tests/AVStreams/Modify_QoS/sender.cpp
deleted file mode 100644
index ad3e12574cc..00000000000
--- a/TAO/orbsvcs/tests/AVStreams/Modify_QoS/sender.cpp
+++ /dev/null
@@ -1,446 +0,0 @@
-// $Id$
-
-#include "sender.h"
-#include "tao/debug.h"
-#include "ace/Get_Opt.h"
-#include "ace/High_Res_Timer.h"
-
-typedef ACE_Singleton<Sender, ACE_Null_Mutex> SENDER;
-// Create a singleton instance of the Sender.
-
-// The time that should lapse between two consecutive frames sent.
-ACE_Time_Value inter_frame_time;
-
-int
-Sender_StreamEndPoint::get_callback (const char *,
- TAO_AV_Callback *&callback)
-{
- // Create and return the sender application callback to AVStreams
- // for further upcalls.
- callback = &this->callback_;
- return 0;
-}
-
-int
-Sender_StreamEndPoint::set_protocol_object (const char *,
- TAO_AV_Protocol_Object *object)
-{
- // Set the sender protocol object corresponding to the transport
- // protocol selected.
- SENDER::instance ()->protocol_object (object);
- return 0;
-}
-
-CORBA::Boolean
-Sender_StreamEndPoint::modify_QoS (AVStreams::streamQoS &new_qos,
- const AVStreams::flowSpec &/* the_flows */,
- CORBA::Environment &/* ACE_TRY_ENV */)
-{
- ACE_DEBUG ((LM_DEBUG,
- "Sender_StreamEndPoint::modify_QoS\n"));
-
- // Check if the qos for the flow has changed.
- if (new_qos.length () != 0)
- {
- // Check which qos parameter has changed.
- if (strcmp (new_qos [0].QoSParams [0].property_name, "video_frame_rate") == 0)
- {
- // The video frame rate for this flow has changed.
-
- // Get the new value of the frame rate.
- CORBA::Any frame_rate_any =
- new_qos [0].QoSParams [0].property_value;
-
- CORBA::Short frame_rate;
- frame_rate_any >>= frame_rate;
-
- // Calculate the new inter frame time.
- inter_frame_time.set (1 / (double) frame_rate);
- }
- }
-
- return 1;
-}
-
-Sender::Sender (void)
- : sender_mmdevice_ (0),
- streamctrl_ (0),
- frame_count_ (0),
- filename_ ("input"),
- input_file_ (0),
- protocol_ ("UDP"),
- frame_rate_ (1),
- mb_ (BUFSIZ)
-{
-}
-
-void
-Sender::protocol_object (TAO_AV_Protocol_Object *object)
-{
- // Set the sender protocol object corresponding to the transport
- // protocol selected.
- this->protocol_object_ = object;
-}
-
-int
-Sender::parse_args (int argc,
- char **argv)
-{
- // Parse command line arguments
- ACE_Get_Opt opts (argc, argv, "f:p:r:d");
-
- int c;
- while ((c= opts ()) != -1)
- {
- switch (c)
- {
- case 'f':
- this->filename_ = opts.optarg;
- break;
- case 'p':
- this->protocol_ = opts.optarg;
- break;
- case 'r':
- this->frame_rate_ = ACE_OS::atoi (opts.optarg);
- break;
- case 'd':
- TAO_debug_level++;
- break;
- default:
- ACE_DEBUG ((LM_DEBUG, "Unknown Option\n"));
- return -1;
- }
- }
- return 0;
-}
-
-// Method to get the object reference of the receiver
-int
-Sender::bind_to_receiver (CORBA::Environment &ACE_TRY_ENV)
-{
- CosNaming::Name name (1);
- name.length (1);
- name [0].id =
- CORBA::string_dup ("Receiver");
-
- // Resolve the receiver object reference from the Naming Service
- CORBA::Object_var receiver_mmdevice_obj =
- this->naming_client_->resolve (name,
- ACE_TRY_ENV);
- ACE_CHECK_RETURN (-1);
-
- this->receiver_mmdevice_ =
- AVStreams::MMDevice::_narrow (receiver_mmdevice_obj.in (),
- ACE_TRY_ENV);
- ACE_CHECK_RETURN (-1);
-
- if (CORBA::is_nil (this->receiver_mmdevice_.in ()))
- ACE_ERROR_RETURN ((LM_ERROR,
- "Could not resolve Receiver_MMdevice in Naming service <%s>\n"),
- -1);
-
- return 0;
-}
-
-int
-Sender::init (int argc,
- char **argv,
- CORBA::Environment &ACE_TRY_ENV)
-{
- // Initialize the endpoint strategy with the orb and poa.
- int result =
- this->endpoint_strategy_.init (TAO_AV_CORE::instance ()->orb (),
- TAO_AV_CORE::instance ()->poa ());
- if (result != 0)
- return result;
-
- // Initialize the naming services
- result =
- this->naming_client_.init (TAO_AV_CORE::instance ()->orb ());
- if (result != 0)
- return result;
-
- // Parse the command line arguments
- result =
- this->parse_args (argc,
- argv);
- if (result != 0)
- return result;
-
- // Open file to read.
- this->input_file_ =
- ACE_OS::fopen (this->filename_.c_str (),
- "r");
-
- if (this->input_file_ == 0)
- ACE_ERROR_RETURN ((LM_DEBUG,
- "Cannot open input file %s\n",
- this->filename_.c_str ()),
- -1);
- else
- ACE_DEBUG ((LM_DEBUG,
- "File opened successfully\n"));
-
- // Resolve the object reference of the receiver from the Naming Service.
- result = this->bind_to_receiver (ACE_TRY_ENV);
- ACE_CHECK_RETURN (-1);
-
- if (result != 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%P|%t) Error binding to the naming service\n"),
- -1);
-
-
- // Initialize the QoS
- AVStreams::streamQoS_var the_qos (new AVStreams::streamQoS);
-
- // Create the forward flow specification to describe the flow.
- TAO_Forward_FlowSpec_Entry entry ("Data_Receiver",
- "IN",
- "USER_DEFINED",
- "",
- this->protocol_.c_str (),
- 0);
-
- AVStreams::flowSpec flow_spec (1);
- flow_spec.length (1);
- flow_spec [0] = CORBA::string_dup (entry.entry_to_string ());
-
- // Register the sender mmdevice object with the ORB
- ACE_NEW_RETURN (this->sender_mmdevice_,
- TAO_MMDevice (&this->endpoint_strategy_),
- -1);
-
- // Servant Reference Counting to manage lifetime
- PortableServer::ServantBase_var safe_mmdevice =
- this->sender_mmdevice_;
-
- AVStreams::MMDevice_var mmdevice =
- this->sender_mmdevice_->_this (ACE_TRY_ENV);
- ACE_CHECK_RETURN (-1);
-
- ACE_NEW_RETURN (this->streamctrl_,
- TAO_StreamCtrl,
- -1);
-
- PortableServer::ServantBase_var safe_streamctrl =
- this->streamctrl_;
-
- // Bind/Connect the sender and receiver MMDevices.
- CORBA::Boolean bind_result =
- this->streamctrl_->bind_devs (mmdevice.in (),
- this->receiver_mmdevice_.in (),
- the_qos.inout (),
- flow_spec,
- ACE_TRY_ENV);
- ACE_CHECK_RETURN (-1);
-
- if (bind_result == 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "streamctrl::bind_devs failed\n"),
- -1);
-
- return 0;
-}
-
-// Method to send data at the specified rate
-int
-Sender::pace_data (CORBA::Environment &ACE_TRY_ENV)
-{
-
-
- // The time between two consecutive frames.
- inter_frame_time.set (1 / (double) this->frame_rate_);
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "Frame Rate = %d / second\n"
- "Inter Frame Time = %d (msec)\n",
- this->frame_rate_,
- inter_frame_time.msec ()));
-
- ACE_TRY
- {
- // The time taken for sending a frame and preparing for the next frame
- ACE_High_Res_Timer elapsed_timer;
-
- // Continue to send data till the file is read to the end.
- while (1)
- {
- // Read from the file into a message block.
- int n = ACE_OS::fread (this->mb_.wr_ptr (),
- 1,
- this->mb_.size (),
- this->input_file_);
-
- if (n < 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "Sender::pace_data fread failed\n"),
- -1);
-
- if (n == 0)
- {
- // At end of file break the loop and end the sender.
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,"Handle_Start:End of file\n"));
- break;
- }
-
- this->mb_.wr_ptr (n);
-
- if (this->frame_count_ > 1)
- {
- //
- // Second frame and beyond
- //
-
- // Stop the timer that was started just before the previous frame was sent.
- elapsed_timer.stop ();
-
- // Get the time elapsed after sending the previous frame.
- ACE_Time_Value elapsed_time;
- elapsed_timer.elapsed_time (elapsed_time);
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "Elapsed Time = %d\n",
- elapsed_time.msec ()));
-
- // Check to see if the inter frame time has elapsed.
- if (elapsed_time < inter_frame_time)
- {
- // Inter frame time has not elapsed.
-
- // Calculate the time to wait before the next frame needs to be sent.
- ACE_Time_Value wait_time (inter_frame_time - elapsed_time);
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "Wait Time = %d\n",
- wait_time.msec ()));
-
- // Run the orb for the wait time so the sender can
- // continue other orb requests.
- TAO_AV_CORE::instance ()->orb ()->run (wait_time,
- ACE_TRY_ENV);
- ACE_TRY_CHECK;
- }
- }
-
- // Start timer before sending the frame.
- elapsed_timer.start ();
-
- // Send frame.
- int result =
- this->protocol_object_->send_frame (&this->mb_);
-
- if (result < 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "send failed:%p",
- "Sender::pace_data send\n"),
- -1);
-
- ACE_DEBUG ((LM_DEBUG,
- "Sender::pace_data frame %d was sent succesfully\n",
- ++this->frame_count_));
-
- // Reset the message block.
- this->mb_.reset ();
-
- } // end while
-
- // File reading is complete, destroy the stream.
- AVStreams::flowSpec stop_spec;
- this->streamctrl_->destroy (stop_spec,
- ACE_TRY_ENV);
- ACE_TRY_CHECK;
-
- // Shut the orb down.
- TAO_AV_CORE::instance ()->orb ()->shutdown (1,
- ACE_TRY_ENV);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
- "Sender::pace_data Failed\n");
- return -1;
- }
- ACE_ENDTRY;
- return 0;
-}
-
-int
-main (int argc,
- char **argv)
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc,
- argv,
- 0,
- ACE_TRY_ENV);
-
- CORBA::Object_var obj
- = orb->resolve_initial_references ("RootPOA",
- ACE_TRY_ENV);
- ACE_TRY_CHECK;
-
- // Get the POA_var object from Object_var
- PortableServer::POA_var root_poa
- = PortableServer::POA::_narrow (obj.in (),
- ACE_TRY_ENV);
- ACE_TRY_CHECK;
-
- PortableServer::POAManager_var mgr
- = root_poa->the_POAManager (ACE_TRY_ENV);
- ACE_TRY_CHECK;
-
- mgr->activate (ACE_TRY_ENV);
- ACE_TRY_CHECK;
-
- // Initialize the AV Stream components.
- TAO_AV_CORE::instance ()->init (orb.in (),
- root_poa.in (),
- ACE_TRY_ENV);
- ACE_TRY_CHECK;
-
- // Initialize the Sender.
- int result = 0;
- result = SENDER::instance ()->init (argc,
- argv,
- ACE_TRY_ENV);
- ACE_TRY_CHECK;
-
- if (result < 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "Sender::init failed\n"),
- -1);
-
- // Start sending data.
- result = SENDER::instance ()->pace_data (ACE_TRY_ENV);
- ACE_TRY_CHECK;
-
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
- "Sender Failed\n");
- return -1;
- }
- ACE_ENDTRY;
- ACE_CHECK_RETURN (-1);
- return 0;
-}
-
-#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-template class ACE_Singleton <Sender,ACE_Null_Mutex>;
-template class TAO_AV_Endpoint_Reactive_Strategy_A<Sender_StreamEndPoint,TAO_VDev,AV_Null_MediaCtrl>;
-template class TAO_AV_Endpoint_Reactive_Strategy<Sender_StreamEndPoint,TAO_VDev,AV_Null_MediaCtrl>;
-#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-#pragma instantiate ACE_Singleton <Sender,ACE_Null_Mutex>
-#pragma instantiate TAO_AV_Endpoint_Reactive_Strategy_A<Sender_StreamEndPoint,TAO_VDev,AV_Null_MediaCtrl>
-#pragma instantiate TAO_AV_Endpoint_Reactive_Strategy<Sender_StreamEndPoint,TAO_VDev,AV_Null_MediaCtrl>
-#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */