/*
* @(#)H263Adapter.java 1.4 02/08/21
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved.
*/
package com.sun.media.controls;
import javax.media.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.reflect.*;
/**
* Implementation for H263Control
*/
public class H263Adapter implements javax.media.control.H263Control {
boolean isSetable;
Codec owner=null;
boolean advancedPrediction=false;
boolean arithmeticCoding=false;
boolean errorCompensation=false;
boolean pbFrames=false;
boolean unrestrictedVector=false;
int hrd_B=-1;
int bppMaxKb=-1;
Component component=null;
String CONTROL_ADVANCEDPREDICTION_STRING="Advanced Prediction";
String CONTROL_ARITHMETICCODING_STRING="Arithmetic Coding";
String CONTROL_ERRORCOMPENSATION_STRING="Error Compensation";
String CONTROL_PBFRAMES_STRING="PB Frames";
String CONTROL_UNRESTRICTEDVECTOR_STRING="Unrestricted Vector";
String CONTROL_HRD_B_STRING="Hrd B";
String CONTROL_BPPMAXKB_STRING="Bpp Max Kb";
public H263Adapter( Codec newOwner,
boolean newAdvancedPrediction,
boolean newArithmeticCoding,
boolean newErrorCompensation,
boolean newPBFrames,
boolean newUnrestrictedVector,
int newHrd_B,
int newBppMaxKb,
boolean newIsSetable
) {
advancedPrediction = newAdvancedPrediction;
arithmeticCoding = newArithmeticCoding;
errorCompensation = newErrorCompensation;
pbFrames = newPBFrames;
unrestrictedVector = newUnrestrictedVector;
hrd_B = newHrd_B;
bppMaxKb = newBppMaxKb;
owner = newOwner;
isSetable = newIsSetable;
}
/**
* Returns if unrestricted vector extension is supported
* @return if unrestricted vector extension is supported
*/
public boolean isUnrestrictedVectorSupported() {
return unrestrictedVector;
}
/**
* Sets the unrestricted vector mode
* @param newUnrestrictedVectorMode the requested unrestricted vector
* mode
* @return the actual unrestricted vector mode that was set
*/
public boolean setUnrestrictedVector(boolean newUnrestrictedVectorMode){
return unrestrictedVector;
}
/**
* Returns if unrestricted vector was enabled
* @return if unrestricted vector was enabled
*/
public boolean getUnrestrictedVector(){
return unrestrictedVector;
}
/**
* Returns if arithmeticc coding extension is supported
* @return if arithmeticc coding extension is supported
*/
public boolean isArithmeticCodingSupported(){
return arithmeticCoding;
}
/**
* Sets the arithmeticc coding mode
* @param newArithmeticCodingMode the requested arithmeticc coding
* mode
* @return the actual arithmeticc coding mode that was set
*/
public boolean setArithmeticCoding(boolean newArithmeticCodingMode){
return arithmeticCoding;
}
/**
* Returns if arithmeticc coding was enabled
* @return if arithmeticc coding was enabled
*/
public boolean getArithmeticCoding(){
return arithmeticCoding;
}
/**
* Returns if advanced prediction extension is supported
* @return if advanced prediction extension is supported
*/
public boolean isAdvancedPredictionSupported(){
return advancedPrediction;
}
/**
* Sets the advanced prediction mode
* @param newAdvancedPredictionMode the requested advanced prediction
* mode
* @return the actual advanced prediction mode that was set
*/
public boolean setAdvancedPrediction(boolean newAdvancedPredictionMode){
return advancedPrediction;
}
/**
* Returns if advanced prediction was enabled
* @return if advanced prediction was enabled
*/
public boolean getAdvancedPrediction(){
return advancedPrediction;
}
/**
* Returns if PB Frames extension is supported
* @return if PB Frames extension is supported
*/
public boolean isPBFramesSupported(){
return pbFrames;
}
/**
* Sets the PB Frames mode
* @param newPBFramesMode the requested PB Frames
* mode
* @return the actual PB Frames mode that was set
*/
public boolean setPBFrames(boolean newPBFramesMode){
return pbFrames;
}
/**
* Returns if PB Frames was enabled
* @return if PB Frames was enabled
*/
public boolean getPBFrames(){
return pbFrames;
}
/**
* Returns if error compensation extension is supported
* @return if error compensation extension is supported
*/
public boolean isErrorCompensationSupported(){
return errorCompensation;
}
/**
* Sets the error compensation mode
* @param newtErrorCompensationMode the requested error compensation
* mode
* @return the actual error compensation mode that was set
*/
public boolean setErrorCompensation(boolean newtErrorCompensationMode){
return errorCompensation;
}
/**
* Returns if error compensation was enabled
* @return if error compensation was enabled
*/
public boolean getErrorCompensation(){
return errorCompensation;
}
/**
* Returns the refernce decoder parameter HRD_B
* @return the refernce decoder parameter HRD_B
**/
public int getHRD_B() {
return hrd_B;
}
/**
* Returns the refernce decoder parameter BppMaxKb
* @return the refernce decoder parameter BppMaxKb
**/
public int getBppMaxKb(){
return bppMaxKb;
}
public Component getControlComponent() {
if (component ==null ) {
try {
Class[] booleanArray= {boolean.class};
Panel componentPanel=new Panel();
componentPanel.setLayout(new VFlowLayout(1) );
Panel tempPanel=new Panel();
tempPanel.setLayout(new BorderLayout() );
tempPanel.add("Center",new Label(CONTROL_ADVANCEDPREDICTION_STRING,Label.CENTER) );
Checkbox cb=new Checkbox(null,null,advancedPrediction);
cb.setEnabled(isSetable);
cb.addItemListener( (ItemListener)
new H263AdapterListener(cb,this,
getClass().getMethod("setAdvancedPrediction",booleanArray )));
tempPanel.add("East",cb );
tempPanel.invalidate();
componentPanel.add(tempPanel);
tempPanel=new Panel();
tempPanel.setLayout(new BorderLayout() );
tempPanel.add("Center",new Label(CONTROL_ARITHMETICCODING_STRING,Label.CENTER) );
cb=new Checkbox(null,null,arithmeticCoding);
cb.setEnabled(isSetable);
cb.addItemListener( (ItemListener)
new H263AdapterListener(cb,this,
getClass().getMethod("setArithmeticCoding",booleanArray )));
tempPanel.add("East",cb );
tempPanel.invalidate();
componentPanel.add(tempPanel);
tempPanel=new Panel();
tempPanel.setLayout(new BorderLayout() );
tempPanel.add("Center",new Label(CONTROL_ERRORCOMPENSATION_STRING,Label.CENTER) );
cb=new Checkbox(null,null,errorCompensation);
cb.setEnabled(isSetable);
cb.addItemListener( (ItemListener)
new H263AdapterListener(cb,this,
getClass().getMethod("setErrorCompensation",booleanArray )));
tempPanel.add("East",cb );
tempPanel.invalidate();
componentPanel.add(tempPanel);
tempPanel=new Panel();
tempPanel.setLayout(new BorderLayout() );
tempPanel.add("Center",new Label(CONTROL_PBFRAMES_STRING,Label.CENTER) );
cb=new Checkbox(null,null,pbFrames);
cb.setEnabled(isSetable);
cb.addItemListener( (ItemListener)
new H263AdapterListener(cb,this,
getClass().getMethod("setPBFrames",booleanArray )));
tempPanel.add("East",cb );
tempPanel.invalidate();
componentPanel.add(tempPanel);
tempPanel=new Panel();
tempPanel.setLayout(new BorderLayout() );
tempPanel.add("Center",new Label(CONTROL_UNRESTRICTEDVECTOR_STRING,Label.CENTER) );
cb=new Checkbox(null,null,unrestrictedVector);
cb.setEnabled(isSetable);
cb.addItemListener( (ItemListener)
new H263AdapterListener(cb,this,
getClass().getMethod("setUnrestrictedVector",booleanArray )));
tempPanel.add("East",cb );
tempPanel.invalidate();
componentPanel.add(tempPanel);
tempPanel=new Panel();
tempPanel.setLayout(new BorderLayout() );
tempPanel.add("Center",new Label(CONTROL_HRD_B_STRING,Label.CENTER) );
tempPanel.add("East",new Label(hrd_B+"",Label.CENTER) );
tempPanel.invalidate();
componentPanel.add(tempPanel);
tempPanel=new Panel();
tempPanel.setLayout(new BorderLayout() );
tempPanel.add("Center",new Label(CONTROL_BPPMAXKB_STRING,Label.CENTER) );
tempPanel.add("East",new Label(bppMaxKb+"",Label.CENTER) );
tempPanel.invalidate();
componentPanel.add(tempPanel);
component=componentPanel;
} catch (Exception exception) {
}
}
return (Component)component;
}
class H263AdapterListener implements java.awt.event.ItemListener {
Checkbox cb;
Method m;
H263Adapter owner;
public H263AdapterListener(Checkbox source,H263Adapter h263adaptor,Method action ) {
cb=source;
m=action;
owner=h263adaptor;
}
public void itemStateChanged(ItemEvent e) {
Object result=null;
try {
boolean newState = cb.getState() ;
Boolean[] operands= {newState ? Boolean.TRUE : Boolean.FALSE};
//DEBUG System.out.println("newState "+newState+" -> "+m);
result=m.invoke(owner, (Object[])operands );
//DEBUG System.out.println("newState2 "+result);
} catch (Exception exception) {
}
cb.setState(result.equals(Boolean.TRUE));
}
}
}
|