привет, это мой первый пост на любом форуме, извините за ошибки.
для прикрепления любого видеоэффекта необходимо использовать «процессор»
Вот пример кода для добавления процессора и добавления к нему эффекта:
String strDevName = "your Media MRL";
CaptureDeviceInfo devInfo = CaptureDeviceManager.getDevice(strDevName);
MediaLocator ml = devInfo.getLocator();
DataSource ds;
Processor p;
try{
ds = Manager.createDataSource( ml);
p = Manager.createProcessor(ds);
p.configure();
while(p.getState() != p.Configured);
p.setContentDescriptor(null);
TrackControl[] controls = p.getTrackControls();
controls[0].setFormat(new VideoFormat( VideoFormat.YUV ));//Specify the Video format of the video specified in the MRL
Codec codec[]= { new comp311.jmf.effect.GreyEffect() };//class GrayEffect is a implementation of javax.media.Effect (the link for the class given below)
controls[0].setCodecChain(codec);
p.realize();
while(p.getState() != p.Realized);
p.prefetch();
while(p.getState() != p.Prefetched);
video = p.getVisualComponent();
if ( video != null ) {System.out.println("Prefetched2");
pnlVideo.add( video, BorderLayout.CENTER );//pnlVideo is a JPanel
p.start();
}
}catch(Exception e){}
ссылка для класса эффекта:
re:
while(p.getState() != p.Configured);
while(p.getState() != p.Realized);
while(p.getState() != p.Prefetched);
в этих местах моей программы я прекращал выполнение, пока процессор не достигнет состояния, но если состояние не достижимо, то приграмма попадает в бесконечный цикл. JMF предоставляет класс StaeHelper, чтобы решить проблему с Google для этого.