Dedicated hardware interface using iTouch?

Hello, my company is looking into SDK 3.0 for its Accessory interface, in fact we've purchased a macbook, joined the program, yesterday got my hello world program down to the device, now learning more about cocoa.
We are considering ways to use the itouch as an interface to our hardware devices, and a possible problem occurred to me:
I'll bet that you can't write a program that takes total control of the device, can you? By this I mean, can you write a program that starts when you power on the device, and that doesn't let you go back to the home screen when you push the button? I'm thinking maybe not, whatever we write will always be an app tied to a button on the main menu, right? On power up, the user will always have to navigate to our app. (Thus it probably shouldn't be a primary interface for some hardware.)
Am I guessing correctly?
Thanks in advance...

a real control interface
I thought we were discussing a virtual interface?
User/operator interaction w/any system is a careful balance. Since we're talking about using the dock connector and depending on a harness, permanent control (at least while connected) seems fair.
I know of more than one system that depends on controller detachment as part of system control security. Just like locking a control box lid, etc. No controller...no control. Not a new concept I think.
In terms of an app, look at the Nike shoe controller...it stays up during each run, and I'd expect that type of scenario to be part of the new interface controls being put out now. I can imagine overrides, but that doesn't mean your app's interface has to close/shut down entirely.

Similar Messages

  • Can we demodulate the signal recieved at DAQ card without using any hardware interface(by only using labview)?

    Hi all,
    Can we demodulate the signal recieved at DAQ card without using any hardware interface(by only using labview)? if yes then how? please give brief idea.
    Regards,
    Amit

    There is probably a way to do it, but it it may be easier to use an X-series board for the job.   They support a new counter capability for count reset on a digital edge without needing to be configured in encoder position mode.  I am not sure exactly how that feature's been implemented however, so maybe it won't make things easier after all.
    The plan based on the hoped-for behavior: 
    1. Configure an X-series counter for pulse generation based on "ticks" of your clock channel.
    2. Set both initial delay and low time to the critical # of ticks.
    3. Configure for count reset on a digital edge (if possible in pulse generation mode)
    4. Configure the count reset value to be the critical # (or possibly 1 less, if possible in pulse generation mode)
    5. If you want the output to remain high indefinitely, configure the counter task to use its own output as a
    pause trigger, and pause while high.
    The way pulse generation works is to preload a # of "low time" ticks into the count register.  Then every source edge will decrement the count.  When the count reaches terminal count (0), the counter's output is toggled (or can be configured to pulse).  The register is then loaded with the # of "high time" ticks and the process continues.
    You would be perpetually interrupting the count-down process as long as you got your triggers in time.  The count would keep getting reset to the # of low counts, keep decrementing toward 0 without reaching it, and so on.  If ever you did reach 0, the output state would toggle high, then the high state would prevent subsequent clock signals from decrementing the count.
    You can conceivably do a similar thing with a 6601, but I'm pretty sure you'd need 2 counters working together to get it working.
    -Kevin P

  • What hardware interface to use

    Hi ppl,
    I am new to labview and need some info on hardware interface.
    The objective is to attenuate a signal. We need 8 inputs and 8 output ports.
    All we have to do is take in the signal from a input cable, attenuate and send the output to the o/p cable.
    I was thinking GPIB board. How do you connect the cables to the GPIB board?
    Do I need any extra hardware?
    Any other cheaper option would be great.
    Thank you guy!

    Hi,
    A GPIB board is a control interface, sort of like the serial port, for communicating with instruments, printers,plotters that have GPIB interfaces as well. It really isn't designed to be used as an direct I/O, but rather a specialized communications port. I was going to say it is like the parallel port, which technically it is, but I had just answered a question on interfacing inputs to the parallel port in another thread. I'm guessing that you have the GPIB board, if not, if you are looking at what interface card to buy there are a lot of possibilities, mostly dependent on your technical requirements and funds available. As I mentioned, it is possible to use the parallel port, and what you are describing might be better served by an external, "controlled" attenuator. It sounds like you want to pass a group of signals through some type of controlled attenuation. I'm not sure, without spending a little more time thinking about it, of anything readily available on the NI site. It also is dependent on the signal levels, frequency, expected attenuation, etc.
    Give us a little more info on what you are trying to do,
    Putnam Monroe
    Certified LabVIEW Developer
    Senior Engineer
    North Shore Technology, Inc. a National Instruments Alliance member
    Putnam
    Certified LabVIEW Developer
    Senior Test Engineer
    Currently using LV 6.1-LabVIEW 2012, RT8.5
    LabVIEW Champion

  • DO i need some extra hardware interface for receving both Audio and video

    hi i m doing e-learning project. i have to capture video from webcam and voice from headphone and send to client.
    but my code is working fine for either one at a time.
    DO i need some extra hardware interface for receving both Audio and video. im using code AVTransmit and AVReceive found from this site only
    After running TX
    i give Dsound:// & vfw://0 in Media Locater only sound is received and no vedio
    and when i give vfw://0 in Media Locater only live video is transmited.
    im using JMF1.1.2e.
    if any one know the method to run or cause of it plz reply me soon. i will be very thankfull
    transmiter/server side code .first run TX on server
    import java.io.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import java.util.*;
    import javax.media.rtp.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.border.*;
    public class Tx extends JFrame implements ActionListener, KeyListener,
    MouseListener, WindowListener {
    Vector targets;
    JList list;
    JButton startXmit;
    JButton rtcp;
    JButton update;
    JButton expiration;
    JButton statistics;
    JButton addTarget;
    JButton removeTarget;
    JTextField tf_remote_address;
    JTextField tf_remote_data_port;
    JTextField tf_media_file;
    JTextField tf_data_port;
    TargetListModel listModel;
    AVTransmitter avTransmitter;
    RTCPViewer rtcpViewer;
    JCheckBox cb_loop;
    Config config;
    public Tx() {
    setTitle( "JMF/RTP Transmitter");
         config= new Config();
         GridBagLayout gridBagLayout= new GridBagLayout();
         GridBagConstraints gbc;
         JPanel p= new JPanel();
         p.setLayout( gridBagLayout);
         JPanel localPanel= createLocalPanel();
         gbc= new GridBagConstraints();
         gbc.gridx= 0;
         gbc.gridy= 0;
         gbc.gridwidth= 2;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( localPanel, gbc);
         p.add( localPanel);
         JPanel targetPanel= createTargetPanel();
         gbc= new GridBagConstraints();
         gbc.gridx= 1;
         gbc.gridy= 1;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( targetPanel, gbc);
    p.add( targetPanel);
         JPanel mediaPanel= createMediaPanel();
         gbc= new GridBagConstraints();
         gbc.gridx= 1;
         gbc.gridy= 2;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( mediaPanel, gbc);
    p.add( mediaPanel);
    JPanel buttonPanel= new JPanel();
    rtcp= new JButton( "RTCP Monitor");
    update= new JButton( "Transmission Status");
         update.setEnabled( false);
         rtcp.addActionListener( this);
         update.addActionListener( this);
         buttonPanel.add( rtcp);
         buttonPanel.add( update);
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 3;
    gbc.gridwidth= 2;
         gbc.weightx = 1.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.CENTER;
         gbc.fill = GridBagConstraints.HORIZONTAL;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( buttonPanel, gbc);
         p.add( buttonPanel);
    getContentPane().add( p);
         list.addMouseListener( this);
         addWindowListener( this);
    pack();
    setVisible( true);
    private JPanel createMediaPanel() {
    JPanel p= new JPanel();
         GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
         p.setLayout( gridBagLayout);
         JLabel label= new JLabel( "Media Locator:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
         p.add( label);
         tf_media_file= new JTextField( 35);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 0;
         gbc.weightx = 1.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.HORIZONTAL;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( tf_media_file, gbc);
         p.add( tf_media_file);
         tf_media_file.setText( config.media_locator);
         cb_loop= new JCheckBox( "loop");
         startXmit= new JButton( "Start Transmission");
         startXmit.setEnabled( true);
         startXmit.addActionListener( this);
         gbc= new GridBagConstraints();
         gbc.gridx = 2;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( cb_loop, gbc);
         p.add( cb_loop);
         cb_loop.setSelected( true);
         cb_loop.addActionListener( this);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.CENTER;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( startXmit, gbc);
         p.add( startXmit);
         TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Source");
         p.setBorder( titledBorder);
         return p;
    private JPanel createTargetPanel() {
    JPanel p= new JPanel();
         GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
         p.setLayout( gridBagLayout);
         targets= new Vector();
         for( int i= 0; i < config.targets.size(); i++) {
         targets.addElement( config.targets.elementAt( i));
    listModel= new TargetListModel( targets);
    list= new JList( listModel);
         list.addKeyListener( this);
         list.setPrototypeCellValue( "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
    JScrollPane scrollPane= new JScrollPane( list,
    ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
         gbc= new GridBagConstraints();
         gbc.gridx= 0;
         gbc.gridy= 0;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( scrollPane, gbc);
         p.add( scrollPane);
    JPanel p1= new JPanel();
         p1.setLayout( gridBagLayout);
         JLabel label= new JLabel( "IP Address:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( label, gbc);
         p1.add( label);
         tf_remote_address= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( tf_remote_address, gbc);
         p1.add( tf_remote_address);
         label= new JLabel( "Data Port:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( label, gbc);
         p1.add( label);
         tf_remote_data_port= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( tf_remote_data_port, gbc);
         p1.add( tf_remote_data_port);     
    JPanel p2= new JPanel();
    addTarget= new JButton( "Add Target");     
    removeTarget= new JButton( "Remove Target");
         p2.add( addTarget);
         p2.add( removeTarget);
         addTarget.addActionListener( this);
         removeTarget.addActionListener( this);
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 2;
         gbc.weightx = 1.0;
         gbc.weighty = 0.0;
         gbc.gridwidth= 2;
         gbc.anchor = GridBagConstraints.CENTER;
         gbc.fill = GridBagConstraints.HORIZONTAL;
         gbc.insets = new Insets( 20,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( p2, gbc);
         p1.add( p2);
         gbc= new GridBagConstraints();
         gbc.gridx= 1;
         gbc.gridy= 0;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( p1, gbc);
         p.add( p1);
         TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Targets");
         p.setBorder( titledBorder);
         return p;
    private JPanel createLocalPanel() {
    JPanel p= new JPanel();
         GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
         p.setLayout( gridBagLayout);
         JLabel label= new JLabel( "IP Address:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
         p.add( label);
         JTextField tf_local_host= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p.getLayout()).setConstraints( tf_local_host, gbc);
         p.add( tf_local_host);
         try {
    String host= InetAddress.getLocalHost().getHostAddress();     
         tf_local_host.setText( host);
         } catch( UnknownHostException e) {
         label= new JLabel( "Data Port:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
         p.add( label);
         tf_data_port= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( tf_data_port, gbc);
         p.add( tf_data_port);
         tf_data_port.setText( config.local_data_port);
         TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Local Host");
         p.setBorder( titledBorder);
         return p;
    public void actionPerformed( ActionEvent event) {
    Object source= event.getSource();
         if( source == addTarget) {
         String ip= tf_remote_address.getText().trim();
         String port= tf_remote_data_port.getText().trim();
         String localPort= tf_data_port.getText().trim();
         addTargetToList( localPort, ip, port);
         if( avTransmitter != null) {
         avTransmitter.addTarget( ip, port);
         } else if( source == removeTarget) {
         int index= list.getSelectedIndex();
         if( index != -1) {
              Target target= (Target) targets.elementAt( index);
              if( avTransmitter != null) {
         avTransmitter.removeTarget( target.ip, target.port);
              targets.removeElement( target);
              listModel.setData( targets);          
         } else if( source == startXmit) {
         if( startXmit.getLabel().equals( "Start Transmission")) {          
         int data_port= new Integer( tf_data_port.getText()).intValue();
              avTransmitter= new AVTransmitter( this, data_port);
         avTransmitter.start( tf_media_file.getText().trim(), targets);          
              avTransmitter.setLooping( cb_loop.isSelected());
         startXmit.setLabel( "Stop Transmission");
         } else if( startXmit.getLabel().equals( "Stop Transmission")) {
              avTransmitter.stop();
              avTransmitter= null;
              removeNonBaseTargets();
              listModel.setData( targets);
         startXmit.setLabel( "Start Transmission");          
         } else if( source == rtcp) {
         if( rtcpViewer == null) {
         rtcpViewer= new RTCPViewer();
         } else {
              rtcpViewer.setVisible( true);
              rtcpViewer.toFront();
         } else if( source == cb_loop) {
         if( avTransmitter != null) {
              avTransmitter.setLooping( cb_loop.isSelected());
    private void removeNonBaseTargets() {
         String localPort= tf_data_port.getText().trim();
         for( int i= targets.size(); i > 0;) {
         Target target= (Target) targets.elementAt( i - 1);
         if( !target.localPort.equals( localPort)) {
    targets.removeElement( target);
         i--;
    public void addTargetToList( String localPort,
                             String ip, String port) {     
    ListUpdater listUpdater= new ListUpdater( localPort, ip,
                                  port, listModel, targets);
    SwingUtilities.invokeLater( listUpdater);           
    public void rtcpReport( String report) {
         if( rtcpViewer != null) {
         rtcpViewer.report( report);
    public void windowClosing( WindowEvent event) {
         config.local_data_port= tf_data_port.getText().trim();
         config.targets= new Vector();
         for( int i= 0; i < targets.size(); i++) {
         Target target= (Target) targets.elementAt( i);
         if( target.localPort.equals( config.local_data_port)) {
              config.addTarget( target.ip, target.port);
         config.media_locator= tf_media_file.getText().trim();
         config.write();
    System.exit( 0);
    public void windowClosed( WindowEvent event) {
    public void windowDeiconified( WindowEvent event) {
    public void windowIconified( WindowEvent event) {
    public void windowActivated( WindowEvent event) {
    public void windowDeactivated( WindowEvent event) {
    public void windowOpened( WindowEvent event) {
    public void keyPressed( KeyEvent event) {
    public void keyReleased( KeyEvent event) {
    Object source= event.getSource();
         if( source == list) {
         int index= list.getSelectedIndex();
    public void keyTyped( KeyEvent event) {
    public void mousePressed( MouseEvent e) {
    public void mouseReleased( MouseEvent e) {
    public void mouseEntered( MouseEvent e) {
    public void mouseExited( MouseEvent e) {
    public void mouseClicked( MouseEvent e) {
    Object source= e.getSource();
         if( source == list) {
         int index= list.getSelectedIndex();
         if( index != -1) {
              Target target= (Target) targets.elementAt( index);
              tf_remote_address.setText( target.ip);
              tf_remote_data_port.setText( target.port);
         int index= list.locationToIndex( e.getPoint());
    public static void main( String[] args) {
    new Tx();
    class TargetListModel extends AbstractListModel {
    private Vector options;
    public TargetListModel( Vector options) {
         this.options= options;
    public int getSize() {
         int size;
         if( options == null) {
         size= 0;
         } else {
         size= options.size();
         return size;
    public Object getElementAt( int index) {
    String name;
    if( index < getSize()) {
         Target o= (Target)options.elementAt( index);
    name= o.localPort + " ---> " + o.ip + ":" + o.port;
         } else {
         name= null;
         return name;
    public void setData( Vector data) {
         options= data;
         fireContentsChanged( this, 0, data.size());
    class ListUpdater implements Runnable {
    String localPort, ip, port;
    TargetListModel listModel;
    Vector targets;
    public ListUpdater( String localPort, String ip, String port,
                   TargetListModel listModel, Vector targets) {
         this.localPort= localPort;
         this.ip= ip;
         this.port= port;
         this.listModel= listModel;
         this.targets= targets;
    public void run() {
    Target target= new Target( localPort, ip, port);
         if( !targetExists( localPort, ip, port)) {
         targets.addElement( target);
    listModel.setData( targets);
    public boolean targetExists( String localPort, String ip, String port) {
         boolean exists= false;
         for( int i= 0; i < targets.size(); i++) {
         Target target= (Target) targets.elementAt( i);
         if( target.localPort.equals( localPort)
         && target.ip.equals( ip)
              && target.port.equals( port)) {          
              exists= true;
         break;
         return exists;
    >>>>>>>>>>>>>>>>>
    import java.awt.*;
    import java.io.*;
    import java.net.InetAddress;
    import java.util.*;
    import javax.media.*;
    import javax.media.protocol.*;
    import javax.media.format.*;
    import javax.media.control.TrackControl;
    import javax.media.control.QualityControl;
    import javax.media.rtp.*;
    import javax.media.rtp.event.*;
    import javax.media.rtp.rtcp.*;
    public class AVTransmitter implements ReceiveStreamListener, RemoteListener,
    ControllerListener {
    // Input MediaLocator
    // Can be a file or http or capture source
    private MediaLocator locator;
    private String ipAddress;
    private int portBase;
    private Processor processor = null;
    private RTPManager rtpMgrs[];
    private int localPorts[];
    private DataSource dataOutput = null;
    private int local_data_port;
    private Tx tx;
    public AVTransmitter( Tx tx, int data_port) {
         this.tx= tx;
         local_data_port= data_port;
    * Starts the transmission. Returns null if transmission started ok.
    * Otherwise it returns a string with the reason why the setup failed.
    public synchronized String start( String filename, Vector targets) {
         String result;
         locator= new MediaLocator( filename);
         // Create a processor for the specified media locator
         // and program it to output JPEG/RTP
         result = createProcessor();
         if (result != null) {
         return result;
         // Create an RTP session to transmit the output of the
         // processor to the specified IP address and port no.
         result = createTransmitter( targets);
         if (result != null) {
         processor.close();
         processor = null;
         return result;
         // Start the transmission
         processor.start();
         return null;
    * Use the RTPManager API to create sessions for each media
    * track of the processor.
    private String createTransmitter( Vector targets) {
         // Cheated. Should have checked the type.
         PushBufferDataSource pbds = (PushBufferDataSource)dataOutput;
         PushBufferStream pbss[] = pbds.getStreams();
         rtpMgrs = new RTPManager[pbss.length];
         localPorts = new int[ pbss.length];
         SessionAddress localAddr, destAddr;
         InetAddress ipAddr;
         SendStream sendStream;
         int port;
         SourceDescription srcDesList[];
         for (int i = 0; i < pbss.length; i++) {
         // for (int i = 0; i < 1; i++) {
         try {
              rtpMgrs[i] = RTPManager.newInstance();     
              port = local_data_port + 2*i;
              localPorts[ i]= port;
              localAddr = new SessionAddress( InetAddress.getLocalHost(),
                                  port);
              rtpMgrs.initialize( localAddr);          
              rtpMgrs[i].addReceiveStreamListener(this);
              rtpMgrs[i].addRemoteListener(this);
         for( int k= 0; k < targets.size(); k++) {
              Target target= (Target) targets.elementAt( k);
              int targetPort= new Integer( target.port).intValue();
              addTarget( localPorts[ i], rtpMgrs[ i], target.ip, targetPort + 2*i);
              sendStream = rtpMgrs[i].createSendStream(dataOutput, i);          
              sendStream.start();
         } catch (Exception e) {
              e.printStackTrace();
              return e.getMessage();
         return null;
    public void addTarget( String ip, String port) {
         for (int i= 0; i < rtpMgrs.length; i++) {
         int targetPort= new Integer( port).intValue();
         addTarget( localPorts[ i], rtpMgrs[ i], ip, targetPort + 2*i);
    public void addTarget( int localPort, RTPManager mgr, String ip, int port) {
         try {
         SessionAddress addr= new SessionAddress( InetAddress.getByName( ip),
                                  new Integer( port).intValue());
         mgr.addTarget( addr);
         tx.addTargetToList( localPort + "", ip, port + "");
         } catch( Exception e) {
         e.printStackTrace();
    public void removeTarget( String ip, String port) {
         try {     
         SessionAddress addr= new SessionAddress( InetAddress.getByName( ip),
                                  new Integer( port).intValue());
         for (int i= 0; i < rtpMgrs.length; i++) {
         rtpMgrs[ i].removeTarget( addr, "target removed from transmitter.");
         } catch( Exception e) {
         e.printStackTrace();
    boolean looping= true;
    public void controllerUpdate( ControllerEvent ce) {
         System.out.println( ce);
         if( ce instanceof DurationUpdateEvent) {
         Time duration= ((DurationUpdateEvent) ce).getDuration();
         System.out.println( "duration: " + duration.getSeconds());
         } else if( ce instanceof EndOfMediaEvent) {
         System.out.println( "END OF MEDIA - looping=" + looping);
         if( looping) {
         processor.setMediaTime( new Time( 0));
              processor.start();
    public void setLooping( boolean flag) {
         looping= flag;
    public void update( ReceiveStreamEvent event) {
         String timestamp= getTimestamp();
         StringBuffer sb= new StringBuffer();
         if( event instanceof InactiveReceiveStreamEvent) {
         sb.append( timestamp + " Inactive Receive Stream");
         } else if( event instanceof ByeEvent) {
         sb.append( timestamp + " Bye");
         } else {
         System.out.println( "ReceiveStreamEvent: "+ event);
         tx.rtcpReport( sb.toString());     
    public void update( RemoteEvent event) {     
         String timestamp= getTimestamp();
         if( event instanceof ReceiverReportEvent) {
         ReceiverReport rr= ((ReceiverReportEvent) event).getReport();
         StringBuffer sb= new StringBuffer();
         sb.append( timestamp + " RR");
         if( rr != null) {
              Participant participant= rr.getParticipant();
              if( participant != null) {
              sb.append( " from " + participant.getCNAME());
              sb.append( " ssrc=" + rr.getSSRC());
              } else {
              sb.append( " ssrc=" + rr.getSSRC());
              tx.rtcpReport( sb.toString());
         } else {
         System.out.println( "RemoteEvent: " + event);
    private String getTimestamp() {
         String timestamp;
         Calendar calendar= Calendar.getInstance();
         int hour= calendar.get( Calendar.HOUR_OF_DAY);
         String hourStr= formatTime( hour);
         int minute= calendar.get( Calendar.MINUTE);
         String minuteStr= formatTime( minute);
         int second= calendar.get( Calendar.SECOND);
         String secondStr= formatTime( second);
         timestamp= hourStr + ":" + minuteStr + ":" + secondStr;     
         return timestamp;
    private String formatTime( int time) {     
         String timeStr;
         if( time < 10) {
         timeStr= "0" + time;
         } else {
         timeStr= "" + time;
         return timeStr;
    * Stops the transmission if already started
    public void stop() {
         synchronized (this) {
         if (processor != null) {
              processor.stop();
              processor.close();
              processor = null;
         for (int i= 0; i < rtpMgrs.length; i++) {
         rtpMgrs[ i].removeTargets( "Session ended.");
              rtpMgrs[ i].dispose();
    public String createProcessor() {
         if (locator == null) {
         return "Locator is null";
         DataSource ds;
         DataSource clone;
         try {
         ds = javax.media.Manager.createDataSource(locator);
         } catch (Exception e) {
         return "Couldn't create DataSource";
         // Try to create a processor to handle the input media locator
         try {
         processor = javax.media.Manager.createProcessor(ds);
         processor.addControllerListener( this);     
         } catch (NoProcessorException npe) {
         return "Couldn't create processor";
         } catch (IOException ioe) {
         return "IOException creating processor";
         // Wait for it to configure
         boolean result = waitForState(processor, Processor.Configured);
         if (result == false)
         return "Couldn't configure processor";
         // Get the tracks from the processor
         TrackControl [] tracks = processor.getTrackControls();
         // Do we have atleast one track?
         if (tracks == null || tracks.length < 1)
         return "Couldn't find tracks in processor";
         // Set the output content descriptor to RAW_RTP
         // This will limit the supported formats reported from
         // Track.getSupportedFormats to only valid RTP formats.
         ContentDescriptor cd = new ContentDescriptor(ContentDescriptor.RAW_RTP);
         processor.setContentDescriptor(cd);
         Format supported[];
         Format chosen;
         boolean atLeastOneTrack = false;
         // Program the tracks.
         for (int i = 0; i < tracks.length; i++) {
         Format format = tracks[i].getFormat();
         if (tracks[i].isEnabled()) {
              supported = tracks[i].getSupportedFormats();
              // We've set the output content to the RAW_RTP.
              // So all the supported formats should work with RTP.
              // We'll just pick the first one.
              if (supported.length > 0) {
              if (supported[0] instanceof VideoFormat) {
                   // For video formats, we should double check the
                   // sizes since not all formats work in all sizes.
                   chosen = checkForVideoSizes(tracks[i].getFormat(),
                                       supported[0]);
              } else
                   chosen = supported[0];
              tracks[i].setFormat(chosen);
              System.err.println("Track " + i + " is set to transmit as:");
              System.err.println(" " + chosen);
              atLeastOneTrack = true;
              } else
              tracks[i].setEnabled(false);
         } else
              tracks[i].setEnabled(false);
         if (!atLeastOneTrack)
         return "Couldn't set any of the tracks to a valid RTP format";
         // Realize the processor. This will internally create a flow
         // graph and attempt to create an output datasource for JPEG/RTP
         // audio frames.
         result = waitForState(processor, Controller.Realized);
         if (result == false)
         return "Couldn't realize processor";
         // Set the JPEG quality to .5.
         setJPEGQuality(processor, 0.5f);
         // Get the output data source of the processor
         dataOutput = processor.getDataOutput();
         return null;
    static SessionAddress destAddr1, destAddr2;
    * For JPEG and H263, we know that they only work for particular
    * sizes. So we'll perform extra checking here to make sure they
    * are of the right sizes.
    Format checkForVideoSizes(Format original, Format supported) {
         int width, height;
         Dimension size = ((VideoFormat)original).getSize();
         Format jpegFmt = new Format(VideoFormat.JPEG_RTP);
         Format h263Fmt = new Format(VideoFormat.H263_RTP);
         if (supported.matches(jpegFmt)) {
         // For JPEG, make sure width and height are divisible by 8.
         width = (size.width % 8 == 0 ? size.width :
                        (int)(size.width / 8) * 8);
         height = (size.height % 8 == 0 ? size.height :
                        (int)(size.height / 8) * 8);
         } else if (supported.matches(h263Fmt)) {
         // For H.263, we only support some specific sizes.
         if (size.width < 128) {
              width = 128;
              height = 96;
         } else if (size.width < 176) {
              width = 176;
              height = 144;
         } else {
              width = 352;
              height = 288;
         } else {
         // We don't know this particular format. We'll just
         // leave it alone then.
         return supported;
         return (new VideoFormat(null,
                        new Dimension(width, height),
                        Format.NOT_SPECIFIED,
                        null,
                        Format.NOT_SPECIFIED)).intersects(supported);
    * Setting the encoding quality to the specified value on the JPEG encoder.
    * 0.5 is a good default.
    void setJPEGQuality(Player p, float val) {
         Control cs[] = p.getControls();
         QualityControl qc = null;
         VideoFormat jpegFmt = new VideoFormat(VideoFormat.JPEG);
         // Loop through the controls to find the Quality control for
         // the JPEG encoder.
         for (int i = 0; i < cs.length; i++) {
         if (cs[i] instanceof QualityControl &&
              cs[i] instanceof Owned) {
              Object owner = ((Owned)cs[i]).getOwner();
              // Check to see if the owner is a Codec.
              // Then check for the output format.
              if (owner instanceof Codec) {
              Format fmts[] = ((Codec)owner).getSupportedOutputFormats(null);
              for (int j = 0; j < fmts.length; j++) {
                   if (fmts[j].matches(jpegFmt)) {
                   qc = (QualityControl)cs[i];
                   qc.setQuality(val);
                   System.err.println("- Setting quality to " +
                             val + " on " + qc);
                   break;
              if (qc != null)
              break;
    * Convenience methods to handle processor's state changes.
    private Integer stateLock = new Integer(0);
    private boolean failed = false;
    Integer getStateLock() {
         return stateLock;
    void setFailed() {
         failed = true;
    private synchronized boolean waitForState(Processor p, int state) {
         p.addControllerListener(new StateListener());
         failed = false;
         // Call the required method on the processor
         if (state == Processor.Configured) {
         p.configure();
         } else if (state == Processor.Realized) {
         p.realize();
         // Wait until we get an event that confirms the
         // success of the method, or a failure event.
         // See StateListener inner class
         while (p.getState() < state && !failed) {
         synchronized (getStateLock()) {
              try {
              getStateLock().wait();
              } catch (InterruptedException ie) {
              return false;
         if (failed)
         return false;
         else
         return true;
    * Inner Classes
    class StateListener implements ControllerListener {
         public void controllerUpdate(ControllerEvent ce) {
         // If there was an error during configure or
         // realiz

    I do this all the time, I put my MBP to a 60 inch Sharp. If you have the video working do the simple thing first. Check to make sure your sound is on your TV and Mac. Then if that doesn't work go to System Prefrences and under sound go to a tab called Output and see if your TV is listed and if it is change it to that setting
    Hope It Works

  • HARDWARE interfacing and software routines

    Hello there,
    I am interested in finding out a really basic tutorial/note which will allow me to work with the basic communication protocols like SPI , RS 232, etherner, USB, etc. I am looking for tutorial with BOTH HARDWARE interfacing  and software routines.
    Multiple websites will be ok for me.
    I have searched wikipedia and lot of power point presentations but was not successful in landing up with a COMPLETE tutorial which explains the hardware interfacing connections and software.
    If you guys can suggest an evaluation kit where i can pracice the above interfacing and software routine..... by all means do let me know.
    Looking forward to your reply.

    Technically you can do everything you are talking about for free provided you have the internet tool kit installed (Full Development Suite) and depending on what level of detail you plan on going into.
    If you want to play with RS232 you can start with just taking the existing Labview example, "Basic Serial Write and Read.vi" under Labview Help -> Find Examples.  You can find a serial cable and connect it to your Comm port.  On the other end of the Comm port you can insert a small wire to short pin 2 to pin 3 (TX to RX).  You will then be able to send and recieve data on the same vi.  I would look at wikipedia to learn more:  http://en.wikipedia.org/wiki/RS-232
    If you have the internet tool kit install then you can do all kinds of stuff with just a regular internet connection.  For example any place where you can Telnet you could test using the "Telnet Line Client.vi" provided by Labview.  Again I would start by consulting wikipedia if you have questions:  http://en.wikipedia.org/wiki/Telnet
    If you are trying to do everything down to the hardware level then this is a little more involved.  Again break your post into smaller pieces and repost on the Labview forum and you will have better luck getting detailed responses.
    You should not have to spend much money to play around.  You can build a lot of this stuff yourself or you can purchase very cheep if you shop around.  For example you can implement SPI using a parallel port but you need to know what your target SPI interface will be.  Regards, SS 

  • PC Hardware Interface

    I will be purchasing a MacMini and Airport Extreme.  I want to attach an existing IBM compatible PC (running Windows XP OS) to the network.  Can someone please tell me:
         1.  What PC hardware is required to interface with the Airport?
         2.  Does Apple sell this hardware interface.
         3.  If Apple does not sell this hardware, can someone recommend a quality component?
    Thank you...

    Connect your IBM to the AirPort using an Ethernet cable. If your IBM has a wireless card, connect it wirelessly using the standard Windows wireless interface utility in the Taskbar. All consumer wireless routers use the 802.11 standard, so all are cross-compatible.

  • Java SE Embedded hardware interface support

    What are the available options for integrating with hardware interfaces with Java SE Embedded?
    - I've noticed that the Java Comms API doesn't seem to have any recent activity, and is only provided for a small number of os+hw combinations.
    - A number of community posts elsewhere recommend RXTX (http://rxtx.qbang.org/wiki/index.php/Main_Page) - it looks like this is limited to just serial or parallel ports though - is this correct? Is this widely used?
    - I've noticed libraries like Pi4J (http://pi4j.com/) provide a great Java API to interact with the GPIO pins on the Raspberry Pi. This is a great approach if there is a library like this for the hardware platform you are running on, but if there isn't what are the alternatives? Do you have to write your own C shared libraries to integrate with the hardware, and then use this via JNI?
    Thanks, Kevin

    See Java for Mac OS X 10.5 Update 1 adds support for Java SE 6. Note the system requirements exclude PPC machines.
    Apple does not drop software support, however, they stop updating older versions because the requirements of new software exceed what older hardware can provide. This is simply the result of obsolescence. Your version of OS X is capable of supporting Java SE 6, but your hardware is not able to run that software.
    If it's essential that you be able to run new versions of software that have requirements that exceed what you hardware or OS can support, then you have to upgrade accordingly. Sell your PPC machine or donate it to a reputable charity or local school/church. Then buy a new machine that can run the software you wish to use.

  • What are interfaces used???

    What are interfaces used  generally an indian organisation  which is in retail business
          and and which is in banking business and oil business.

    The following Might be useful to you.
    itelligence AG
    it.engine for e-machine
    All-in-One Solution - This is a partner solution based on mySAPERP 2005 and mySAP CRM. SAP All-in-One solutions address the business software requirem ...
    it.engine for e-machine
    by: itelligence AG
    All-in-One Solution - This is a partner solution based on mySAPERP 2005 and mySAP CRM. SAP All-in-One solutions address the business software requirements of the most demanding midsize companies. ERP and CRM software provide a fully integrated system to support your core business processes. And, with business analytics and reporting capabilities, you have full visibility into your business operations and performance. SAP All-in-One solutions are industry specific and can be extended and tailored by our qualified partners to meet your most specific business needs.
    View Solution
    Wipro Technologies
    Flow-briX
    Flow-briXu2122 provides a user-friendly environment to model, execute, and monitor human-centric workflows and facilitates dynamic changes. Flow-briXu2122 has ...
    Flow-briX
    by: Wipro Technologies
    Flow-briXu2122 provides a user-friendly environment to model, execute, and monitor human-centric workflows and facilitates dynamic changes. Flow-briXu2122 has introduced workflow solutions to Fortune 2000 clients from diverse industries, including the telecom, financial services, and energy sectors. The Flow-briXu2122 Cockpit provides a rich GUI for defining role-based workflows like Approvals with flexibility and change control mechanisms.
    itelligence AG
    it.wood
    It.wood provides the wood and furnace industry a proven and complete solution. Developed for efficient monitoring of processes by using an intelligent ...
    it.wood
    by: itelligence AG
    It.wood provides the wood and furnace industry a proven and complete solution. Developed for efficient monitoring of processes by using an intelligent and easy to use product configurator. Time consuming master data maintenance and creating large scaled i
    View Solution
    it.manufacturing
    it.manufacturing for the manufacturing industry provides component and variant manufacturers, mechanical engineers and plant constructors with a fully ...
    it.manufacturing
    by: itelligence AG
    it.manufacturing for the manufacturing industry provides component and variant manufacturers, mechanical engineers and plant constructors with a fully integrated SAP ERP solution. The entire value-added chain is mapped in an integrated ERP solution, from
    View Solution
    Freudenberg IT-Consulting KG
    F-IT Pay
    This solution has achieved "SAP Certified Powered by SAP NetWeaver" status, which indicates SAP certified third-party content or applications that are ...
    F-IT Pay
    by: Freudenberg IT-Consulting KG
    This solution has achieved "SAP Certified Powered by SAP NetWeaver" status, which indicates SAP certified third-party content or applications that are developed using the SAP NetWeaver platform and/or run on the SAP NetWeaver platform. These third-party applications leverage the SAP NetWeaver platform to deliver value to customers via IT platform standardization.
    Package for Supply Chain Management MES
    This solution has achieved "SAP Certified Powered by SAP NetWeaver" status, which indicates SAP certified third-party content or applications that are ...
    Package for Supply Chain Management MES
    by: Freudenberg IT-Consulting KG
    This solution has achieved "SAP Certified Powered by SAP NetWeaver" status, which indicates SAP certified third-party content or applications that are developed using the SAP NetWeaver platform and/or run on the SAP NetWeaver platform. These third-party applications leverage the SAP NetWeaver platform to deliver value to customers via IT platform standardization.
    Pocket Programs
    ERP-Scale
    ERP-Scale delivers a standardized interface for integrating weighing equipment with SAP® ERP. Designed for Packing Station transaction (HUPAST) and cu ...
    ERP-Scale
    by: Pocket Programs
    ERP-Scale delivers a standardized interface for integrating weighing equipment with SAP® ERP. Designed for Packing Station transaction (HUPAST) and custom ABAPu2122 applications, it links SAP standard RFC (HU_GET_RFC_DATA) and scales supporting serial (RS-232), UDP, or TCP interfaces. Its "plug and play" installation requires no additional hardware, software, or ABAP programming.
    Atos Origin GmbH
    ChangeMesPointEstimate
    This solution has achieved "SAP Certified Powered by SAP NetWeaver" status, which indicates SAP certified third-party content or applications that are ...
    ChangeMesPointEstimate
    by: Atos Origin GmbH
    This solution has achieved "SAP Certified Powered by SAP NetWeaver" status, which indicates SAP certified third-party content or applications that are developed using the SAP NetWeaver platform and/or run on the SAP NetWeaver platform. These third-party applications leverage the SAP NetWeaver platform to deliver value to customers via IT platform standardization.
    View Solution
    itelligence AG
    it.engine for machine
    All-in-One Solution - This is a partner solution based on mySAPERP 2005 and mySAP CRM. SAP All-in-One solutions address the business software requirem ...
    it.engine for machine
    by: itelligence AG
    All-in-One Solution - This is a partner solution based on mySAPERP 2005 and mySAP CRM. SAP All-in-One solutions address the business software requirements of the most demanding midsize companies. ERP and CRM software provide a fully integrated system to support your core business processes. And, with business analytics and reporting capabilities, you have full visibility into your business operations and performance. SAP All-in-One solutions are industry specific and can be extended and tailored by our qualified partners to meet your most specific business needs.
    IBM Business
    IBM LIMS Connect
    LIMS Connect is an SAP certified composite application enabling cross-system and cross-plant analytics of quality-related process and inspection data. ...
    IBM LIMS Connect
    by: IBM Business
    LIMS Connect is an SAP certified composite application enabling cross-system and cross-plant analytics of quality-related process and inspection data. It delivers capabilities for statistical process control (SPC) to measure process capability. Due to the relationship of process capability and defect levels, IBM LIMS Connect allows better analysis and interpretation of product-related quality data across organizations.

  • Extra hardware interface for transmiting both Audio and video to client ??

    hi i m doing e-learning project. i have to capture video from webcam and voice from headphone and send to client.
    but my code is working fine for either one at a time.
    DO i need some extra hardware interface for Transmitting  both Audio and video to client im using code AVTransmit and AVReceive found from this site only
    After running TX
    i give dsound:// & vfw://0 in Media Locater only sound is received and no vedio
    and when i give vfw://0 in Media Locater only live video is transmited.
    im using JMF1.1.2e.
    if any one know the method to run or cause of it plz reply me soon. i will be very thankfull
    transmiter/server side code .first run TX on server
    import java.io.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import java.util.*;
    import javax.media.rtp.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.border.*;
    public class Tx extends JFrame implements ActionListener, KeyListener,
    MouseListener, WindowListener {
    Vector targets;
    JList list;
    JButton startXmit;
    JButton rtcp;
    JButton update;
    JButton expiration;
    JButton statistics;
    JButton addTarget;
    JButton removeTarget;
    JTextField tf_remote_address;
    JTextField tf_remote_data_port;
    JTextField tf_media_file;
    JTextField tf_data_port;
    TargetListModel listModel;
    AVTransmitter avTransmitter;
    RTCPViewer rtcpViewer;
    JCheckBox cb_loop;
    Config config;
    public Tx() {
    setTitle( "JMF/RTP Transmitter");
    config= new Config();
    GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
    JPanel p= new JPanel();
    p.setLayout( gridBagLayout);
    JPanel localPanel= createLocalPanel();
    gbc= new GridBagConstraints();
    gbc.gridx= 0;
    gbc.gridy= 0;
    gbc.gridwidth= 2;
    gbc.anchor= GridBagConstraints.CENTER;
    gbc.fill= GridBagConstraints.BOTH;
    gbc.insets= new Insets( 10, 5, 0, 0);
    ((GridBagLayout)p.getLayout()).setConstraints( localPanel, gbc);
    p.add( localPanel);
    JPanel targetPanel= createTargetPanel();
    gbc= new GridBagConstraints();
    gbc.gridx= 1;
    gbc.gridy= 1;
    gbc.weightx= 1.0;
    gbc.weighty= 1.0;
    gbc.anchor= GridBagConstraints.CENTER;
    gbc.fill= GridBagConstraints.BOTH;
    gbc.insets= new Insets( 10, 5, 0, 0);
    ((GridBagLayout)p.getLayout()).setConstraints( targetPanel, gbc);
    p.add( targetPanel);
    JPanel mediaPanel= createMediaPanel();
    gbc= new GridBagConstraints();
    gbc.gridx= 1;
    gbc.gridy= 2;
    gbc.weightx= 1.0;
    gbc.weighty= 1.0;
    gbc.anchor= GridBagConstraints.CENTER;
    gbc.fill= GridBagConstraints.BOTH;
    gbc.insets= new Insets( 10, 5, 0, 0);
    ((GridBagLayout)p.getLayout()).setConstraints( mediaPanel, gbc);
    p.add( mediaPanel);
    JPanel buttonPanel= new JPanel();
    rtcp= new JButton( "RTCP Monitor");
    update= new JButton( "Transmission Status");
    update.setEnabled( false);
    rtcp.addActionListener( this);
    update.addActionListener( this);
    buttonPanel.add( rtcp);
    buttonPanel.add( update);
    gbc= new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 3;
    gbc.gridwidth= 2;
    gbc.weightx = 1.0;
    gbc.weighty = 0.0;
    gbc.anchor = GridBagConstraints.CENTER;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.insets = new Insets( 5,5,10,5);
    ((GridBagLayout)p.getLayout()).setConstraints( buttonPanel, gbc);
    p.add( buttonPanel);
    getContentPane().add( p);
    list.addMouseListener( this);
    addWindowListener( this);
    pack();
    setVisible( true);
    private JPanel createMediaPanel() {
    JPanel p= new JPanel();
    GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
    p.setLayout( gridBagLayout);
    JLabel label= new JLabel( "Media Locator:");
    gbc= new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.weightx = 0.0;
    gbc.weighty = 0.0;
    gbc.anchor = GridBagConstraints.EAST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.insets = new Insets( 5,5,10,5);
    ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
    p.add( label);
    tf_media_file= new JTextField( 35);
    gbc= new GridBagConstraints();
    gbc.gridx = 1;
    gbc.gridy = 0;
    gbc.weightx = 1.0;
    gbc.weighty = 0.0;
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.insets = new Insets( 5,5,10,5);
    ((GridBagLayout)p.getLayout()).setConstraints( tf_media_file, gbc);
    p.add( tf_media_file);
    tf_media_file.setText( config.media_locator);
    cb_loop= new JCheckBox( "loop");
    startXmit= new JButton( "Start Transmission");
    startXmit.setEnabled( true);
    startXmit.addActionListener( this);
    gbc= new GridBagConstraints();
    gbc.gridx = 2;
    gbc.gridy = 0;
    gbc.weightx = 0.0;
    gbc.weighty = 0.0;
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.insets = new Insets( 5,5,10,5);
    ((GridBagLayout)p.getLayout()).setConstraints( cb_loop, gbc);
    p.add( cb_loop);
    cb_loop.setSelected( true);
    cb_loop.addActionListener( this);
    gbc= new GridBagConstraints();
    gbc.gridx = 1;
    gbc.gridy = 1;
    gbc.weightx = 0.0;
    gbc.weighty = 0.0;
    gbc.anchor = GridBagConstraints.CENTER;
    gbc.fill = GridBagConstraints.NONE;
    gbc.insets = new Insets( 5,5,10,5);
    ((GridBagLayout)p.getLayout()).setConstraints( startXmit, gbc);
    p.add( startXmit);
    TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Source");
    p.setBorder( titledBorder);
    return p;
    private JPanel createTargetPanel() {
    JPanel p= new JPanel();
    GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
    p.setLayout( gridBagLayout);
    targets= new Vector();
    for( int i= 0; i < config.targets.size(); i++) {
    targets.addElement( config.targets.elementAt( i));
    listModel= new TargetListModel( targets);
    list= new JList( listModel);
    list.addKeyListener( this);
    list.setPrototypeCellValue( "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
    JScrollPane scrollPane= new JScrollPane( list,
    ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    gbc= new GridBagConstraints();
    gbc.gridx= 0;
    gbc.gridy= 0;
    gbc.weightx= 1.0;
    gbc.weighty= 1.0;
    gbc.anchor= GridBagConstraints.CENTER;
    gbc.fill= GridBagConstraints.BOTH;
    gbc.insets= new Insets( 10, 5, 0, 0);
    ((GridBagLayout)p.getLayout()).setConstraints( scrollPane, gbc);
    p.add( scrollPane);
    JPanel p1= new JPanel();
    p1.setLayout( gridBagLayout);
    JLabel label= new JLabel( "IP Address:");
    gbc= new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.weightx = 0.0;
    gbc.weighty = 0.0;
    gbc.anchor = GridBagConstraints.EAST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.insets = new Insets( 5,5,0,5);
    ((GridBagLayout)p1.getLayout()).setConstraints( label, gbc);
    p1.add( label);
    tf_remote_address= new JTextField( 15);
    gbc= new GridBagConstraints();
    gbc.gridx = 1;
    gbc.gridy = 0;
    gbc.weightx = 0.0;
    gbc.weighty = 0.0;
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.insets = new Insets( 5,5,0,5);
    ((GridBagLayout)p1.getLayout()).setConstraints( tf_remote_address, gbc);
    p1.add( tf_remote_address);
    label= new JLabel( "Data Port:");
    gbc= new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 1;
    gbc.weightx = 0.0;
    gbc.weighty = 0.0;
    gbc.anchor = GridBagConstraints.EAST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.insets = new Insets( 5,5,0,5);
    ((GridBagLayout)p1.getLayout()).setConstraints( label, gbc);
    p1.add( label);
    tf_remote_data_port= new JTextField( 15);
    gbc= new GridBagConstraints();
    gbc.gridx = 1;
    gbc.gridy = 1;
    gbc.weightx = 0.0;
    gbc.weighty = 0.0;
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.insets = new Insets( 5,5,0,5);
    ((GridBagLayout)p1.getLayout()).setConstraints( tf_remote_data_port, gbc);
    p1.add( tf_remote_data_port);
    JPanel p2= new JPanel();
    addTarget= new JButton( "Add Target");
    removeTarget= new JButton( "Remove Target");
    p2.add( addTarget);
    p2.add( removeTarget);
    addTarget.addActionListener( this);
    removeTarget.addActionListener( this);
    gbc= new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 2;
    gbc.weightx = 1.0;
    gbc.weighty = 0.0;
    gbc.gridwidth= 2;
    gbc.anchor = GridBagConstraints.CENTER;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.insets = new Insets( 20,5,0,5);
    ((GridBagLayout)p1.getLayout()).setConstraints( p2, gbc);
    p1.add( p2);
    gbc= new GridBagConstraints();
    gbc.gridx= 1;
    gbc.gridy= 0;
    gbc.weightx= 1.0;
    gbc.weighty= 1.0;
    gbc.anchor= GridBagConstraints.CENTER;
    gbc.fill= GridBagConstraints.BOTH;
    gbc.insets= new Insets( 10, 5, 0, 0);
    ((GridBagLayout)p.getLayout()).setConstraints( p1, gbc);
    p.add( p1);
    TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Targets");
    p.setBorder( titledBorder);
    return p;
    private JPanel createLocalPanel() {
    JPanel p= new JPanel();
    GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
    p.setLayout( gridBagLayout);
    JLabel label= new JLabel( "IP Address:");
    gbc= new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.weightx = 0.0;
    gbc.weighty = 0.0;
    gbc.anchor = GridBagConstraints.EAST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.insets = new Insets( 5,5,0,5);
    ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
    p.add( label);
    JTextField tf_local_host= new JTextField( 15);
    gbc= new GridBagConstraints();
    gbc.gridx = 1;
    gbc.gridy = 0;
    gbc.weightx = 0.0;
    gbc.weighty = 0.0;
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.insets = new Insets( 5,5,0,5);
    ((GridBagLayout)p.getLayout()).setConstraints( tf_local_host, gbc);
    p.add( tf_local_host);
    try {
    String host= InetAddress.getLocalHost().getHostAddress();
    tf_local_host.setText( host);
    } catch( UnknownHostException e) {
    label= new JLabel( "Data Port:");
    gbc= new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 1;
    gbc.weightx = 0.0;
    gbc.weighty = 0.0;
    gbc.anchor = GridBagConstraints.EAST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.insets = new Insets( 5,5,0,5);
    ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
    p.add( label);
    tf_data_port= new JTextField( 15);
    gbc= new GridBagConstraints();
    gbc.gridx = 1;
    gbc.gridy = 1;
    gbc.weightx = 0.0;
    gbc.weighty = 0.0;
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.insets = new Insets( 5,5,10,5);
    ((GridBagLayout)p.getLayout()).setConstraints( tf_data_port, gbc);
    p.add( tf_data_port);
    tf_data_port.setText( config.local_data_port);
    TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Local Host");
    p.setBorder( titledBorder);
    return p;
    public void actionPerformed( ActionEvent event) {
    Object source= event.getSource();
    if( source == addTarget) {
    String ip= tf_remote_address.getText().trim();
    String port= tf_remote_data_port.getText().trim();
    String localPort= tf_data_port.getText().trim();
    addTargetToList( localPort, ip, port);
    if( avTransmitter != null) {
    avTransmitter.addTarget( ip, port);
    } else if( source == removeTarget) {
    int index= list.getSelectedIndex();
    if( index != -1) {
    Target target= (Target) targets.elementAt( index);
    if( avTransmitter != null) {
    avTransmitter.removeTarget( target.ip, target.port);
    targets.removeElement( target);
    listModel.setData( targets);
    } else if( source == startXmit) {
    if( startXmit.getLabel().equals( "Start Transmission")) {
    int data_port= new Integer( tf_data_port.getText()).intValue();
    avTransmitter= new AVTransmitter( this, data_port);
    avTransmitter.start( tf_media_file.getText().trim(), targets);
    avTransmitter.setLooping( cb_loop.isSelected());
    startXmit.setLabel( "Stop Transmission");
    } else if( startXmit.getLabel().equals( "Stop Transmission")) {
    avTransmitter.stop();
    avTransmitter= null;
    removeNonBaseTargets();
    listModel.setData( targets);
    startXmit.setLabel( "Start Transmission");
    } else if( source == rtcp) {
    if( rtcpViewer == null) {
    rtcpViewer= new RTCPViewer();
    } else {
    rtcpViewer.setVisible( true);
    rtcpViewer.toFront();
    } else if( source == cb_loop) {
    if( avTransmitter != null) {
    avTransmitter.setLooping( cb_loop.isSelected());
    private void removeNonBaseTargets() {
    String localPort= tf_data_port.getText().trim();
    for( int i= targets.size(); i > 0;) {
    Target target= (Target) targets.elementAt( i - 1);
    if( !target.localPort.equals( localPort)) {
    targets.removeElement( target);
    i--;
    public void addTargetToList( String localPort,
    String ip, String port) {
    ListUpdater listUpdater= new ListUpdater( localPort, ip,
    port, listModel, targets);
    SwingUtilities.invokeLater( listUpdater);
    public void rtcpReport( String report) {
    if( rtcpViewer != null) {
    rtcpViewer.report( report);
    public void windowClosing( WindowEvent event) {
    config.local_data_port= tf_data_port.getText().trim();
    config.targets= new Vector();
    for( int i= 0; i < targets.size(); i++) {
    Target target= (Target) targets.elementAt( i);
    if( target.localPort.equals( config.local_data_port)) {
    config.addTarget( target.ip, target.port);
    config.media_locator= tf_media_file.getText().trim();
    config.write();
    System.exit( 0);
    public void windowClosed( WindowEvent event) {
    public void windowDeiconified( WindowEvent event) {
    public void windowIconified( WindowEvent event) {
    public void windowActivated( WindowEvent event) {
    public void windowDeactivated( WindowEvent event) {
    public void windowOpened( WindowEvent event) {
    public void keyPressed( KeyEvent event) {
    public void keyReleased( KeyEvent event) {
    Object source= event.getSource();
    if( source == list) {
    int index= list.getSelectedIndex();
    public void keyTyped( KeyEvent event) {
    public void mousePressed( MouseEvent e) {
    public void mouseReleased( MouseEvent e) {
    public void mouseEntered( MouseEvent e) {
    public void mouseExited( MouseEvent e) {
    public void mouseClicked( MouseEvent e) {
    Object source= e.getSource();
    if( source == list) {
    int index= list.getSelectedIndex();
    if( index != -1) {
    Target target= (Target) targets.elementAt( index);
    tf_remote_address.setText( target.ip);
    tf_remote_data_port.setText( target.port);
    int index= list.locationToIndex( e.getPoint());
    public static void main( String[] args) {
    new Tx();
    class TargetListModel extends AbstractListModel {
    private Vector options;
    public TargetListModel( Vector options) {
    this.options= options;
    public int getSize() {
    int size;
    if( options == null) {
    size= 0;
    } else {
    size= options.size();
    return size;
    public Object getElementAt( int index) {
    String name;
    if( index < getSize()) {
    Target o= (Target)options.elementAt( index);
    name= o.localPort + " ---> " + o.ip + ":" + o.port;
    } else {
    name= null;
    return name;
    public void setData( Vector data) {
    options= data;
    fireContentsChanged( this, 0, data.size());
    class ListUpdater implements Runnable {
    String localPort, ip, port;
    TargetListModel listModel;
    Vector targets;
    public ListUpdater( String localPort, String ip, String port,
    TargetListModel listModel, Vector targets) {
    this.localPort= localPort;
    this.ip= ip;
    this.port= port;
    this.listModel= listModel;
    this.targets= targets;
    public void run() {
    Target target= new Target( localPort, ip, port);
    if( !targetExists( localPort, ip, port)) {
    targets.addElement( target);
    listModel.setData( targets);
    public boolean targetExists( String localPort, String ip, String port) {
    boolean exists= false;
    for( int i= 0; i < targets.size(); i++) {
    Target target= (Target) targets.elementAt( i);
    if( target.localPort.equals( localPort)
    && target.ip.equals( ip)
    && target.port.equals( port)) {
    exists= true;
    break;
    return exists;
    import java.awt.*;
    import java.io.*;
    import java.net.InetAddress;
    import java.util.*;
    import javax.media.*;
    import javax.media.protocol.*;
    import javax.media.format.*;
    import javax.media.control.TrackControl;
    import javax.media.control.QualityControl;
    import javax.media.rtp.*;
    import javax.media.rtp.event.*;
    import javax.media.rtp.rtcp.*;
    public class AVTransmitter implements ReceiveStreamListener, RemoteListener,
    ControllerListener {
    // Input MediaLocator
    // Can be a file or http or capture source
    private MediaLocator locator;
    private String ipAddress;
    private int portBase;
    private Processor processor = null;
    private RTPManager rtpMgrs[];
    private int localPorts[];
    private DataSource dataOutput = null;
    private int local_data_port;
    private Tx tx;
    public AVTransmitter( Tx tx, int data_port) {
    this.tx= tx;
    local_data_port= data_port;
    * Starts the transmission. Returns null if transmission started ok.
    * Otherwise it returns a string with the reason why the setup failed.
    public synchronized String start( String filename, Vector targets) {
    String result;
    locator= new MediaLocator( filename);
    // Create a processor for the specified media locator
    // and program it to output JPEG/RTP
    result = createProcessor();
    if (result != null) {
    return result;
    // Create an RTP session to transmit the output of the
    // processor to the specified IP address and port no.
    result = createTransmitter( targets);
    if (result != null) {
    processor.close();
    processor = null;
    return result;
    // Start the transmission
    processor.start();
    return null;
    * Use the RTPManager API to create sessions for each media
    * track of the processor.
    private String createTransmitter( Vector targets) {
    // Cheated. Should have checked the type.
    PushBufferDataSource pbds = (PushBufferDataSource)dataOutput;
    PushBufferStream pbss[] = pbds.getStreams();
    rtpMgrs = new RTPManager[pbss.length];
    localPorts = new int[ pbss.length];
    SessionAddress localAddr, destAddr;
    InetAddress ipAddr;
    SendStream sendStream;
    int port;
    SourceDescription srcDesList[];
    for (int i = 0; i < pbss.length; i++) {
    // for (int i = 0; i < 1; i++) {
    try {
    rtpMgrs[i] = RTPManager.newInstance();
    port = local_data_port + 2*i;
    localPorts[ i]= port;
    localAddr = new SessionAddress( InetAddress.getLocalHost(),
    port);
    rtpMgrs.initialize( localAddr);
    rtpMgrs[i].addReceiveStreamListener(this);
    rtpMgrs[i].addRemoteListener(this);
    for( int k= 0; k < targets.size(); k++) {
    Target target= (Target) targets.elementAt( k);
    int targetPort= new Integer( target.port).intValue();
    addTarget( localPorts[ i], rtpMgrs[ i], target.ip, targetPort + 2*i);
    sendStream = rtpMgrs[i].createSendStream(dataOutput, i);
    sendStream.start();
    } catch (Exception e) {
    e.printStackTrace();
    return e.getMessage();
    return null;
    public void addTarget( String ip, String port) {
    for (int i= 0; i < rtpMgrs.length; i++) {
    int targetPort= new Integer( port).intValue();
    addTarget( localPorts[ i], rtpMgrs[ i], ip, targetPort + 2*i);
    public void addTarget( int localPort, RTPManager mgr, String ip, int port) {
    try {
    SessionAddress addr= new SessionAddress( InetAddress.getByName( ip),
    new Integer( port).intValue());
    mgr.addTarget( addr);
    tx.addTargetToList( localPort + "", ip, port + "");
    } catch( Exception e) {
    e.printStackTrace();
    public void removeTarget( String ip, String port) {
    try {
    SessionAddress addr= new SessionAddress( InetAddress.getByName( ip),
    new Integer( port).intValue());
    for (int i= 0; i < rtpMgrs.length; i++) {
    rtpMgrs[ i].removeTarget( addr, "target removed from transmitter.");
    } catch( Exception e) {
    e.printStackTrace();
    boolean looping= true;
    public void controllerUpdate( ControllerEvent ce) {
    System.out.println( ce);
    if( ce instanceof DurationUpdateEvent) {
    Time duration= ((DurationUpdateEvent) ce).getDuration();
    System.out.println( "duration: " + duration.getSeconds());
    } else if( ce instanceof EndOfMediaEvent) {
    System.out.println( "END OF MEDIA - looping=" + looping);
    if( looping) {
    processor.setMediaTime( new Time( 0));
    processor.start();
    public void setLooping( boolean flag) {
    looping= flag;
    public void update( ReceiveStreamEvent event) {
    String timestamp= getTimestamp();
    StringBuffer sb= new StringBuffer();
    if( event instanceof InactiveReceiveStreamEvent) {
    sb.append( timestamp + " Inactive Receive Stream");
    } else if( event instanceof ByeEvent) {
    sb.append( timestamp + " Bye");
    } else {
    System.out.println( "ReceiveStreamEvent: "+ event);
    tx.rtcpReport( sb.toString());
    public void update( RemoteEvent event) {
    String timestamp= getTimestamp();
    if( event instanceof ReceiverReportEvent) {
    ReceiverReport rr= ((ReceiverReportEvent) event).getReport();
    StringBuffer sb= new StringBuffer();
    sb.append( timestamp + " RR");
    if( rr != null) {
    Participant participant= rr.getParticipant();
    if( participant != null) {
    sb.append( " from " + participant.getCNAME());
    sb.append( " ssrc=" + rr.getSSRC());
    } else {
    sb.append( " ssrc=" + rr.getSSRC());
    tx.rtcpReport( sb.toString());
    } else {
    System.out.println( "RemoteEvent: " + event);
    private String getTimestamp() {
    String timestamp;
    Calendar calendar= Calendar.getInstance();
    int hour= calendar.get( Calendar.HOUR_OF_DAY);
    String hourStr= formatTime( hour);
    int minute= calendar.get( Calendar.MINUTE);
    String minuteStr= formatTime( minute);
    int second= calendar.get( Calendar.SECOND);
    String secondStr= formatTime( second);
    timestamp= hourStr + ":" + minuteStr + ":" + secondStr;
    return timestamp;
    private String formatTime( int time) {
    String timeStr;
    if( time < 10) {
    timeStr= "0" + time;
    } else {
    timeStr= "" + time;
    return timeStr;
    * Stops the transmission if already started
    public void stop() {
    synchronized (this) {
    if (processor != null) {
    processor.stop();
    processor.close();
    processor = null;
    for (int i= 0; i < rtpMgrs.length; i++) {
    rtpMgrs[ i].removeTargets( "Session ended.");
    rtpMgrs[ i].dispose();
    public String createProcessor() {
    if (locator == null) {
    return "Locator is null";
    DataSource ds;
    DataSource clone;
    try {
    ds = javax.media.Manager.createDataSource(locator);
    } catch (Exception e) {
    return "Couldn't create DataSource";
    // Try to create a processor to handle the input media locator
    try {
    processor = javax.media.Manager.createProcessor(ds);
    processor.addControllerListener( this);
    } catch (NoProcessorException npe) {
    return "Couldn't create processor";
    } catch (IOException ioe) {
    return "IOException creating processor";
    // Wait for it to configure
    boolean result = waitForState(processor, Processor.Configured);
    if (result == false)
    return "Couldn't configure processor";
    // Get the tracks from the processor
    TrackControl [] tracks = processor.getTrackControls();
    // Do we have atleast one track?
    if (tracks == null || tracks.length < 1)
    return "Couldn't find tracks in processor";
    // Set the output content descriptor to RAW_RTP
    // This will limit the supported formats reported from
    // Track.getSupportedFormats to only valid RTP formats.
    ContentDescriptor cd = new ContentDescriptor(ContentDescriptor.RAW_RTP);
    processor.setContentDescriptor(cd);
    Format supported[];
    Format chosen;
    boolean atLeastOneTrack = false;
    // Program the tracks.
    for (int i = 0; i < tracks.length; i++) {
    Format format = tracks[i].getFormat();
    if (tracks[i].isEnabled()) {
    supported = tracks[i].getSupportedFormats();
    // We've set the output content to the RAW_RTP.
    // So all the supported formats should work with RTP.
    // We'll just pick the first one.
    if (supported.length > 0) {
    if (supported[0] instanceof VideoFormat) {
    // For video formats, we should double check the
    // sizes since not all formats work in all sizes.
    chosen = checkForVideoSizes(tracks[i].getFormat(),
    supported[0]);
    } else
    chosen = supported[0];
    tracks[i].setFormat(chosen);
    System.err.println("Track " + i + " is set to transmit as:");
    System.err.println(" " + chosen);
    atLeastOneTrack = true;
    } else
    tracks[i].setEnabled(false);
    } else
    tracks[i].setEnabled(false);
    if (!atLeastOneTrack)
    return "Couldn't set any of the tracks to a valid RTP format";
    // Realize the processor. This will internally create a flow
    // graph and attempt to create an output datasource for JPEG/RTP
    // audio frames.
    result = waitForState(processor, Controller.Realized);
    if (result == false)
    return "Couldn't realize processor";
    // Set the JPEG quality to .5.
    setJPEGQuality(processor, 0.5f);
    // Get the output data source of the processor
    dataOutput = processor.getDataOutput();
    return null;
    static SessionAddress destAddr1, destAddr2;
    * For JPEG and H263, we know that they only work for particular
    * sizes. So we'll perform extra checking here to make sure they
    * are of the right sizes.
    Format checkForVideoSizes(Format original, Format supported) {
    int width, height;
    Dimension size = ((VideoFormat)original).getSize();
    Format jpegFmt = new Format(VideoFormat.JPEG_RTP);
    Format h263Fmt = new Format(VideoFormat.H263_RTP);
    if (supported.matches(jpegFmt)) {
    // For JPEG, make sure width and height are divisible by 8.
    width = (size.width % 8 == 0 ? size.width :
    (int)(size.width / 8) * 8);
    height = (size.height % 8 == 0 ? size.height :
    (int)(size.height / 8) * 8);
    } else if (supported.matches(h263Fmt)) {
    // For H.263, we only support some specific sizes.
    if (size.width < 128) {
    width = 128;
    height = 96;
    } else if (size.width < 176) {
    width = 176;
    height = 144;
    } else {
    width = 352;
    height = 288;
    } else {
    // We don't know this particular format. We'll just
    // leave it alone then.
    return supported;
    return (new VideoFormat(null,
    new Dimension(width, height),
    Format.NOT_SPECIFIED,
    null,
    Format.NOT_SPECIFIED)).intersects(supported);
    * Setting the encoding quality to the specified value on the JPEG encoder.
    * 0.5 is a good default.
    void setJPEGQuality(Player p, float val) {
    Control cs[] = p.getControls();
    QualityControl qc = null;
    VideoFormat jpegFmt = new VideoFormat(VideoFormat.JPEG);
    // Loop through the controls to find the Quality control for
    // the JPEG encoder.
    for (int i = 0; i < cs.length; i++) {
    if (cs[i] instanceof QualityControl &&
    cs[i] instanceof Owned) {
    Object owner = ((Owned)cs[i]).getOwner();
    // Check to see if the owner is a Codec.
    // Then check for the output format.
    if (owner instanceof Codec) {
    Format fmts[] = ((Codec)owner).getSupportedOutputFormats(null);
    for (int j = 0; j < fmts.length; j++) {
    if (fmts[j].matches(jpegFmt)) {
    qc = (QualityControl)cs[i];
    qc.setQuality(val);
    System.err.println("- Setting quality to " +
    val + " on " + qc);
    break;
    if (qc != null)
    break;
    * Convenience methods to handle processor's state changes.
    private Integer stateLock = new Integer(0);
    private boolean failed = false;
    Integer getStateLock() {
    return stateLock;
    void setFailed() {
    failed = true;
    private synchronized boolean waitForState(Processor p, int state) {
    p.addControllerListener(new StateListener());
    failed = false;
    // Call the required method on the processor
    if (state == Processor.Configured) {
    p.configure();
    } else if (state == Processor.Realized) {
    p.realize();
    // Wait until we get an event that confirms the
    // success of the method, or a failure event.
    // See StateListener inner class
    while (p.getState() < state && !failed) {
    synchronized (getStateLock()) {
    try {
    getStateLock().wait();
    } catch (InterruptedException ie) {
    return false;
    if (failed)
    return false;
    else
    return true;
    * Inner Classes
    class StateListener implements ControllerListener {
    public void controllerUpdate(ControllerEvent ce) {
    // If there was an error during configure or
    // realize, the processor will be closed
    if (ce instanceof ControllerClosedEvent)
    setFailed();
    // All controller events, send a notification
    // to the waiting thread in waitForState method.
    if (ce instanceof ControllerEvent) {
    synchronized (getStateLock()) {
    getStateLock().notifyAll();
    import java.io.*;
    import java.util.*;
    public class Config {
    private String pathPrefix;
    public String local_data_port;
    public Vector targets;
    public String media_locator;
    public Config() {
    pathPrefix= System.getProperty( "user.home") + File.separator;
    read();
    public void read() {
    targets= new Vector();
    try {
    String path= pathPrefix + "xmit.dat";
    FileInputStream fin= new FileInputStream( path);
    BufferedInputStream bin= new BufferedInputStream( fin);
    DataInputStream din= new DataInputStream( bin);
    local_data_port= readString( din);
    int n_targets= din.readInt();
    for( int i= 0; i < n_targets; i++) {
    String ip= readString( din);
    String port= readString( din);
    targets.addElement( new Target( local_data_port, ip, port));
    media_locator= readString( din);
    fin.close();
    } catch( IOException e) {
    System.out.println( "xmit.dat file missing!");
    local_data_port= "";
    media_locator= "";
    public void write() {
    try {
    String path= pathPrefix + "xmit.dat";
    FileOutputStream fout= new FileOutputStream( path);
    BufferedOutputStream bout= new BufferedOutputStream( fout);
    DataOutputStream dout= new DataOutputStream( bout);
    writeString( dout, local_data_port);
    dout.writeInt( targets.size());
    for( int i= 0; i < targets.size(); i++) {
    Target target= (Target) targets.elementAt( i);
    writeString( dout, target.ip);
    writeString( dout, target.port);
    writeString( dout, media_locator);
    dout.flush();
    dout.close();
    fout.close();
    } catch( IOException e) {
    System.out.println( "Error writing xmit.dat!");
    public String readString( DataInputStream din) {
    String s= null;
    try {
    short length= din.readShort();
    if( length > 0) {
    byte buf[]= new byte[ length];
    din.read( buf, 0, length);
    s= new String( buf);
    } catch( IOException e) {
    System.err.println( e);
    return s;
    public void writeString( DataOutputStream dout, String str) {
    try {
    if( str != null) {
    dout.writeShort( str.length());
    dout.writeBytes( str);
    } else {
    dout.writeShort( 0);
    } catch( Exception e) {
    e.printStackTrace();
    public void addTarget( String ip, String port) {
    targets.addElement( new Target( "", ip, port));
    import java.io.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import java.util.*;
    import javax.media.rtp.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.border.*;
    public class RTCPViewer extends JFrame implements ActionListener, KeyListener,
    MouseListener, WindowListener {
    private JList list;
    private Vector reports;
    private RtcpListModel listModel;
    private JButton clear;
    private JButton start;
    private boolean recording;
    public RTCPViewer() {
    setTitle( "JMF/RTCP Tracer");
    re

    I'm also getting some really bad sound quality on facebook notifications. I've been forced to disable them they sound horrible like they are clipping.
    Trying to figure out if this is a problem on all Late 2013 15" macbook pros or if mine is defective? This occurs even at around 20-30% volume levels with the Facebook notification sound problems...

  • Communication through RS232c serial interface using labview

    i am trying to communicate with a device through RS232c serial interface using labview 6.1....i have tried to run the example "Serial communication.vi" provided in 6.1 and it doesnt work....do i need any special hardware or do i need to configure my hardware to communicate through RS232c...
    thanks in advance
    shri

    Seems like I placed a small (maybe 30ms) delay at the end of the serialcommunications.vi structure.. for some reason my PC didn't like running as fast as it tried to go. Also look into the actual serial communication.vi and open the vi's inside it - check that the port setting (0 or 1) are ok, the baud rate (probably 9600) are ok. I'm running with only three wires in my application, TX, RX and Common. The PC may need to be rebooted to enable the com port - or use device manager and see if it says the com ports 0 and 1 are both OK..
    Try buildinga loopback plug with TX to RX, RX to TX, and Common to Common and see if hyperterminal (or other serial communications program works - there is also Loopback.VI in the NI library somewhere that can be used. Good Luck!! Dave

  • Custom Interface using Entity Objects

    Right now, we can only define cutom interfaces using the Generic Loader. I was wondering if this functionality is going to be extended so that users can define custom interfaces using EOs instead of lct files.

    Hi Mugunthan,
    I have the exact same requirement, to know a little bit more BC4J Support, since we want to use iSetup to control the load of our Receivables Custom Database Tables also. I have opened an SR and they have forwarded to the Receivables Team, which i do not believe will help us, since our need is to know technically the iSetup Custom Interface process for BC4J. Can you point me out some documentation on this? my e-mail contact is [email protected]
    Regards
    Thiago

  • HT201257 hardware test using an external optic device (iMac) on macbook pro 9 years old via firewire. What to do? and how to do it?

    hardware test using an external optical device (iMac) on macbook pro 9 years old via firewire. What to do? and how to do it?
    I thiunk the graphic card is defective and need to run hwt

    You don't.
    Need a internal optical drive and the Hardware Test on disks is old and outdated anyway.
    Your machine has lasted a long time, congratulations, they usually only last about 4-5 years.
    They get clogged up with dust and overheat, kills the video card, there is nothing you can do as it's hardware damage over time.

  • Getting error while running the Interface using AGENT

    Hi All,
    i am not able to run the interface using Agent service which running in the another machine, while running i am getting error message like
    java.lang.Exception: Error during Session launching
         at com.sunopsis.dwg.dbobj.SnpSession.remoteExecute(SnpSession.java)
         at com.sunopsis.graphical.l.or.e(or.java)
         at com.sunopsis.graphical.r.z.actionPerformed(z.java)
         at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
         at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
         at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
         at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    i ran the Agent services in Comment prompt, there i am getting the error like follows
    java.lang.NullPointerException
    at com.sunopsis.dwg.cmd.DwgCommandSession.treatCommand(DwgCommandSession.java)
    at com.sunopsis.dwg.cmd.DwgCommandBase.prepare(DwgCommandBase.java)
    at com.sunopsis.dwg.cmd.e.t(e.java)
    at com.sunopsis.dwg.cmd.h.y(h.java)
    at com.sunopsis.dwg.cmd.e.run(e.java)
    at java.lang.Thread.run(Unknown Source)
    here i have mentioned the steps which i followed for creating agent service.
    i have two machine namely A and B both having the ODI
    i am going to use the B machine as a centralized server. so i edited the odiparams.bat file in B machine in ODI locaiton and filled the repository information
    from A machine i opened the Topology and created the Agent service there i mentioned the HOST name as "B" and port number 20300. and i configure the logical agent aswell
    from B machine i started the Agent service like agentscheduler "-port=20300".
    Agent service launched seccessfully.
    From A machine i tested the Agent. that also shown the successful window message.
    then i started running the interface using the agent i am getting the error which i have mention in the beginging.
    Interface which i ran will do the text file to table loading, so i kept that file in particular location in B machine( i have configure this location when i created the file data store in topology in A machine).
    Please help me to solve the problem...
    thanks
    nidhi
    Edited by: knidhi on Nov 26, 2009 6:54 PM

    Thanks For your Reply,
    I ran the agent as you said. here is my observation
    from the Machine B where agent is actually running, i could able to run the interface using agent service.
    but from the machine A while running the interface i am getting the following error message
    java.lang.Exception: Error during Session launching : Error during Session Preparation : You are trying to execute a session with an agent that is undefined in your repository. Please check the agent -NAME parameter.
         at com.sunopsis.dwg.dbobj.SnpSession.remoteExecute(SnpSession.java)
         at com.sunopsis.graphical.l.or.e(or.java)
         at com.sunopsis.graphical.r.z.actionPerformed(z.java)
         at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
         at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
         at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
         at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
         at javax.swing.AbstractButton.doClick(Unknown Source)
         at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
         at javax.swing.plaf.basic.BasicMenuItemUI$MouseInputHandler.mouseReleased(Unknown Source)
         at java.awt.Component.processMouseEvent(Unknown Source)
         at java.awt.Component.processEvent(Unknown Source)
         at java.awt.Container.processEvent(Unknown Source)
         at java.awt.Component.dispatchEventImpl(Unknown Source)
         at java.awt.Container.dispatchEventImpl(Unknown Source)
         at java.awt.Component.dispatchEvent(Unknown Source)
         at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
         at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
         at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
         at java.awt.Container.dispatchEventImpl(Unknown Source)
         at java.awt.Window.dispatchEventImpl(Unknown Source)
         at java.awt.Component.dispatchEvent(Unknown Source)
         at java.awt.EventQueue.dispatchEvent(Unknown Source)
         at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.run(Unknown Source)
    i have created both physical and logical agent with the same name "DEMO_AGENT", and i ran the agent in the Machine B like
    agentscheduler "-port=20301" "-name=DEMO_AGENT"
    Please help me to solvethe issue...
    Thanks
    Nidhi
    Edited by: knidhi on Nov 27, 2009 11:04 AM
    Edited by: knidhi on Nov 27, 2009 11:04 AM
    Edited by: knidhi on Nov 27, 2009 11:05 AM

  • How to find out what are the interfaces used for Job and Job Codes

    HI All,
    I just wanted to know how do we find out what are the interfaces used for Job and Job codes .
    Thanks In Advance
    Sunny

    Hi,
    Here is an idea for your request.
    Basically you can create a simple query on multiprovider 0TCT_MC01.
    Filter: you can use a variable for restriction of time ( calday, or calmonth) since you should be interested for a time period.
    Choose following characters into your objects:
    InfoProvider ( 0TCTIFPROV )  - you can create a variable for choosing infoprovider before query runs.
    *Tp.[Type of BI Application Object] 0TCTBISOTYP  = filter this with 'QUERY' or whatever your need is.
    *BI Application Object 0TCTBISBOBJ,  ( this will give you the name of the queries)
    In key figures choose,  Count for BI Appl. (0TCTWTCOUNT).
    (number for query run)
    Create a condition , for top 20.
    Hope this helps.
    Derya

  • How to avoid default selection screen in HR interfaces(using pnp ldbs)

    How to avoid default selection screen in HR interfaces(using pnp ldbs)

    Dear Rakesh,
    The report category is used to change the selection screen of programs that use the 'PNP' logical database.
    See links bellow:
    http://www.sapdevelopment.co.uk/hr/hr_repcat.htm
    http://help.sap.com/saphelp_erp2005/helpdata/en/15/229357553611d3967f00a0c9306433/frameset.htm
    Report categories for selection screen in HR programming
    Also visit the following blog:
    /people/alvaro.tejadagalindo/blog/2006/02/19/how-to-deal-with-hr-payroll-reports
    Regards,
    Naveen.

Maybe you are looking for