Plz Help : How to use FrameGrabbingControl to extract frame from video.

I m trying to extract frame from the video (from .mpg file)using FrameGrabbingControl on the click of the button.There is no problem related to playing video.
import javax.media.control.*
public void actionperformed(ActionEvent ae)
String s = ae.getActionCommand();
if(s.equals("click") )
FrameGrabbingControl fgc = (FrameGrabbingControl) player.getcontrol("FrameGrabbingControl"); //it is returning null
Buffer bf = fgc.grabFrame(); // so here nullpointerException
}

hi I am also experiencing the same prob.can u send me the code if u got one..my mail id is [email protected].we are working on a proj to extract jpeg images from any movie file in jmf...can u help us

Similar Messages

  • Help how do you save a still frame of video  as a photo?

    Help how do you save a still frame of video as a photo? Thanks

    A still frame from an Event:
    Put cursor at the frame you want, then right click (or command click) and select "Add Still Frame to Project".
    The still frame will be added at the end of the Project.
    A still frame from a Project:
    Put cursor at the frame you want then right-click (or control-click) and select "Add Freeze Frame". The Freeze frame will be added after the clip.
    In both cases:
    Select the still frame (so the yellow band is around it).
    Right-click (or control-click) and select "Reveal in Finder".
    You will see a JPG file highlighted in the finder.
    Drag this file and drop it on your iPhoto icon in the Dock.

  • This is how you extract frames from video

    right then, in answer to many posts about how to get the individual frames from video, here is my solution. it seems to work with mpg files but it doesnt seem to work with any of the avi files i tried. not sure why it doesnt work with those. i have modified javas frame access.
    nothing is displayed except it prints which frame it is doing.
    if anyone wants to improve it, please do. i still dont understand fully how it works so i probably wont be able to answer many questions about it. anyway here it is:
    * @(#)FrameAccess.java 1.5 01/03/13
    * Copyright (c) 1999-2001 Sun Microsystems, Inc. All Rights Reserved.
    * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
    * modify and redistribute this software in source and binary code form,
    * provided that i) this copyright notice and license appear on all copies of
    * the software; and ii) Licensee does not utilize the software in a manner
    * which is disparaging to Sun.
    * This software is provided "AS IS," without a warranty of any kind. ALL
    * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
    * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
    * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
    * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
    * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
    * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
    * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
    * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
    * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
    * POSSIBILITY OF SUCH DAMAGES.
    * This software is not designed or intended for use in on-line control of
    * aircraft, air traffic, aircraft navigation or aircraft communications; or in
    * the design, construction, operation or maintenance of any nuclear
    * facility. Licensee represents and warrants that it will not use or
    * redistribute the Software for such purposes.
    import java.awt.*;
    import javax.media.*;
    import javax.media.control.TrackControl;
    import javax.media.Format;
    import javax.media.format.*;
    import java.io.*;
    import javax.imageio.*;
    import javax.imageio.stream.*;
    import java.awt.image.*;
    import java.util.*;
    import javax.media.util.*;
    * Sample program to access individual video frames by using a
    * "pass-thru" codec. The codec is inserted into the data flow
    * path. As data pass through this codec, a callback is invoked
    * for each frame of video data.
    public class FrameAccess implements ControllerListener {
         Processor p;
         Object waitSync = new Object();
         boolean stateTransitionOK = true;
         public boolean alreadyPrnt = false;
         * Given a media locator, create a processor and use that processor
         * as a player to playback the media.
         * During the processor's Configured state, two "pass-thru" codecs,
         * PreAccessCodec and PostAccessCodec, are set on the video track.
         * These codecs are used to get access to individual video frames
         * of the media.
         * Much of the code is just standard code to present media in JMF.
         public boolean open(MediaLocator ml) {
              try {
                   p = Manager.createProcessor(ml);
              } catch (Exception e) {
                   System.err.println(
                        "Failed to create a processor from the given url: " + e);
                   return false;
              p.addControllerListener(this);
              // Put the Processor into configured state.
              p.configure();
              if (!waitForState(Processor.Configured)) {
                   System.err.println("Failed to configure the processor.");
                   return false;
              // So I can use it as a player.
              p.setContentDescriptor(null);
              // Obtain the track controls.
              TrackControl tc[] = p.getTrackControls();
              if (tc == null) {
                   System.err.println(
                        "Failed to obtain track controls from the processor.");
                   return false;
              // Search for the track control for the video track.
              TrackControl videoTrack = null;
              for (int i = 0; i < tc.length; i++) {
                   if (tc.getFormat() instanceof VideoFormat) videoTrack = tc[i];
                   else     tc[i].setEnabled(false);
              if (videoTrack == null) {
                   System.err.println("The input media does not contain a video track.");
                   return false;
              String videoFormat = videoTrack.getFormat().toString();
              Dimension videoSize = parseVideoSize(videoFormat);
              System.err.println("Video format: " + videoFormat);
              // Instantiate and set the frame access codec to the data flow path.
              try {
                   Codec codec[] = { new PostAccessCodec(videoSize)};
                   videoTrack.setCodecChain(codec);
              } catch (UnsupportedPlugInException e) {
                   System.err.println("The process does not support effects.");
              // Realize the processor.
              p.prefetch();
              if (!waitForState(Processor.Prefetched)) {
                   System.err.println("Failed to realise the processor.");
                   return false;
              p.start();
              return true;
         /**parse the size of the video from the string videoformat*/
         public Dimension parseVideoSize(String videoSize){
              int x=300, y=200;
              StringTokenizer strtok = new StringTokenizer(videoSize, ", ");
              strtok.nextToken();
              String size = strtok.nextToken();
              StringTokenizer sizeStrtok = new StringTokenizer(size, "x");
              try{
                   x = Integer.parseInt(sizeStrtok.nextToken());
                   y = Integer.parseInt(sizeStrtok.nextToken());
              } catch (NumberFormatException e){
                   System.out.println("unable to find video size, assuming default of 300x200");
              System.out.println("Image width = " + String.valueOf(x) +"\nImage height = "+ String.valueOf(y));
              return new Dimension(x, y);
         * Block until the processor has transitioned to the given state.
         * Return false if the transition failed.
         boolean waitForState(int state) {
              synchronized (waitSync) {
                   try {
                        while (p.getState() != state && stateTransitionOK)
                             waitSync.wait();
                   } catch (Exception e) {
              return stateTransitionOK;
         * Controller Listener.
         public void controllerUpdate(ControllerEvent evt) {
              if (evt instanceof ConfigureCompleteEvent
                   || evt instanceof RealizeCompleteEvent
                   || evt instanceof PrefetchCompleteEvent) {
                   synchronized (waitSync) {
                        stateTransitionOK = true;
                        waitSync.notifyAll();
              } else if (evt instanceof ResourceUnavailableEvent) {
                   synchronized (waitSync) {
                        stateTransitionOK = false;
                        waitSync.notifyAll();
              } else if (evt instanceof EndOfMediaEvent) {
                   p.close();
                   System.exit(0);
         * Main program
         public static void main(String[] args) {
              if (args.length == 0) {
                   prUsage();
                   System.exit(0);
              String url = args[0];
              if (url.indexOf(":") < 0) {
                   prUsage();
                   System.exit(0);
              MediaLocator ml;
              if ((ml = new MediaLocator(url)) == null) {
                   System.err.println("Cannot build media locator from: " + url);
                   System.exit(0);
              FrameAccess fa = new FrameAccess();
              if (!fa.open(ml))
                   System.exit(0);
         static void prUsage() {
              System.err.println("Usage: java FrameAccess <url>");
         * Inner class.
         * A pass-through codec to access to individual frames.
         public class PreAccessCodec implements Codec {
              * Callback to access individual video frames.
              void accessFrame(Buffer frame) {
                   // For demo, we'll just print out the frame #, time &
                   // data length.
                   long t = (long) (frame.getTimeStamp() / 10000000f);
                   System.err.println(
                        "Pre: frame #: "
                             + frame.getSequenceNumber()
                             + ", time: "
                             + ((float) t) / 100f
                             + ", len: "
                             + frame.getLength());
              * The code for a pass through codec.
              // We'll advertize as supporting all video formats.
              protected Format supportedIns[] = new Format[] { new VideoFormat(null)};
              // We'll advertize as supporting all video formats.
              protected Format supportedOuts[] = new Format[] { new VideoFormat(null)};
              Format input = null, output = null;
              public String getName() {
                   return "Pre-Access Codec";
              //these dont do anything
              public void open() {}
              public void close() {}
              public void reset() {}
              public Format[] getSupportedInputFormats() {
                   return supportedIns;
              public Format[] getSupportedOutputFormats(Format in) {
                   if (in == null)
                        return supportedOuts;
                   else {
                        // If an input format is given, we use that input format
                        // as the output since we are not modifying the bit stream
                        // at all.
                        Format outs[] = new Format[1];
                        outs[0] = in;
                        return outs;
              public Format setInputFormat(Format format) {
                   input = format;
                   return input;
              public Format setOutputFormat(Format format) {
                   output = format;
                   return output;
              public int process(Buffer in, Buffer out) {
                   // This is the "Callback" to access individual frames.
                   accessFrame(in);
                   // Swap the data between the input & output.
                   Object data = in.getData();
                   in.setData(out.getData());
                   out.setData(data);
                   // Copy the input attributes to the output
                   out.setFlags(Buffer.FLAG_NO_SYNC);
                   out.setFormat(in.getFormat());
                   out.setLength(in.getLength());
                   out.setOffset(in.getOffset());
                   return BUFFER_PROCESSED_OK;
              public Object[] getControls() {
                   return new Object[0];
              public Object getControl(String type) {
                   return null;
         public class PostAccessCodec extends PreAccessCodec {
              // We'll advertize as supporting all video formats.
              public PostAccessCodec(Dimension size) {
                   supportedIns = new Format[] { new RGBFormat()};
                   this.size = size;
              * Callback to access individual video frames.
              void accessFrame(Buffer frame) {
                   // For demo, we'll just print out the frame #, time &
                   // data length.
                   if (!alreadyPrnt) {
                        BufferToImage stopBuffer = new BufferToImage((VideoFormat) frame.getFormat());
                        Image stopImage = stopBuffer.createImage(frame);
                        try {
                             BufferedImage outImage = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB);
                             Graphics og = outImage.getGraphics();
                             og.drawImage(stopImage, 0, 0, size.width, size.height, null);
                             //prepareImage(outImage,rheight,rheight, null);
                             Iterator writers = ImageIO.getImageWritersByFormatName("jpg");
                             ImageWriter writer = (ImageWriter) writers.next();
                             //Once an ImageWriter has been obtained, its destination must be set to an ImageOutputStream:
                             File f = new File(frame.getSequenceNumber() + ".jpg");
                             ImageOutputStream ios = ImageIO.createImageOutputStream(f);
                             writer.setOutput(ios);
                             //Finally, the image may be written to the output stream:
                             //BufferedImage bi;
                             //writer.write(imagebi);
                             writer.write(outImage);
                             ios.close();
                        } catch (IOException e) {
                             System.out.println("Error :" + e);
                   //alreadyPrnt = true;
                   long t = (long) (frame.getTimeStamp() / 10000000f);
                   System.err.println(
                        "Post: frame #: "
                             + frame.getSequenceNumber()
                             + ", time: "
                             + ((float) t) / 100f
                             + ", len: "
                             + frame.getLength());
              public String getName() {
                   return "Post-Access Codec";
              private Dimension size;

    The quality of the produced video from this example is very poor.
    It comes to huuuuge surprise the following fact.
    If you comment the line where you set the PostAccessCodec, the chain of the codecs is:
    MPEG-1 decoder -> YUV2RGB -> Direct Draw Renderer. ( The one used from the system to decode and render)
    If you run the example purely as is above you get the following sequence(as long with the poor quality):
    MPEG-1 decoder -> YUV2RGB -> Windows GDI Renderer.
    So you say lets set another Renderer. So
    you add the following line videoTracker.setRenderer( new DDRenderer() )
    What comes to a surprise is the following chain of codecs:
    MPEG-1 decoder -> YUV2RGB -> Post Codec -> Java RGB Converter - > DDRenderer
    The quality now may be perfect but video runs to slow. The surprising thing here is that even though we have set the outputFormat of the PostAccessFrame codec to RGBFormat the system converts it again to RGB through codec Java RGB Format.
    After searching a lot and reaching the conclusion that the deference between the 2 RGB's is their sizes I sudently was brought in front of a method called grabFrame(). Bels started ringing inside my head. Starts were comming up. Looking at the definition of the class com.sun.media.renderer.video.DDRenderer I descovered that this damn class implements the FrameGrabbingControl Interface. What the f.....? The problem that consumed 4 days of my life and multiplied with 10 to give hours has finally come to an and.
    Summing up the solution for grabbing frames is this!!!!!
    DDRenderer renderer = new DDRenderer();
    videoTrack.setRenderer( renderer );
    and in your actionPerformed implementation
    FrameGrabbingControl fr = (FrameGrabbingControl)renderer.getControl( "javax.media.control.FrameGrabbingControl");
    Buffer frame = fr.grabFrame();
    The following stuff ...are stated in FrameAccess
    --Sniper

  • Extracting frames from video

    Hi
    Can anyone say me how to extract disismlar frames from a video
    Thanks in advance
    kokila

    What is your definition of a scene ?
    If a camera is not moving, you can probably do some vague matching of the background...... say if a certain percentage of pixels match up from one frame to the next.
    But if the camera is moving, then every single frame will be different.
    When you buy a commercial DVD, it is broken up into chapters / scenes.... but I assume that is a manual process performed by film editors.
    Some DVD players have "auto-chapter", which just means that they create a chapter every X minutes regardless of the "scene".
    regards,
    Owen

  • Extracting frames from videos files

    Hi!
    I'm looking for a Object that can help me to extract video component such as I-Frame, P-frame.
    As a matter of fact, I would like to modify the DCT of I-Frame of a MPEG4 video file.
    Thanks

    if your file hold byte[] data you can use the following code to get the byte[] data as RGB
    public byte[][] getData(int frameNum) throws Exception {
    FramePositioningControl fpc = getPositionControl();
    FrameGrabbingControl      fgc = getGrabControl();
    Buffer           buf;
    RGBFormat     format;
    int          width, height, pixelStride, lineStride, idx;
    byte[][]     rgbData;
    byte[]          data;
    Object          dataObj;
    // skip to the requested frame
    fpc.seek(frameNum);
    // get the data
    buf = fgc.grabFrame();
    // support RGB Format
    format = (RGBFormat)buf.getFormat();
    width = format.getSize().width;
    height = format.getSize().height;
    pixelStride = format.getPixelStride();
    lineStride = format.getLineStride();
    dataObj = buf.getData();
    if (!(dataObj instanceof byte[]))
    return null;
    data = (byte[])dataObj;
    // create the data;
    rgbData = new byte[3][width*height];
    idx = 0;
    for (int i = 0; i < data.length; i += pixelStride) {
    // bgr order
    rgbData[2][idx] = data;
    rgbData[1][idx] = data[i+1];
    rgbData[0][idx] = data[i+2];
    idx++;
    if (format.getFlipped() == 1) {
    rgbData[0] = flipImageTopBottom(rgbData[0], width, height);
    rgbData[1] = flipImageTopBottom(rgbData[1], width, height);
    rgbData[2] = flipImageTopBottom(rgbData[2], width, height);
    return rgbData;

  • I deleted my download folder by accident  i waz moving it and it just deleted it and showed this smoke. i found it in my trash so put it on my dock then clicked on it and it shows preview?! plz help how do i get it back!!!

    i deleted my download folder by accident  i waz moving it and it just deleted it and showed this smoke. i found it in my trash so put it on my dock then clicked on it and it shows preview?! plz help how do i get it back!!!

    You need to restore the folder using the (Put back) selection (CTRL click).

  • Plz help me to use

    plz help me to use run_opject_report to run report in paper
    plz support me
    best reg.

    Hi,
    There is a document (pdf) in OTN which title is Oracle Application Server 10g - Integrating Oracle Reports in Oracle Forms Services applications...
    You can search OTN for this document title to find exactly where is it....
    Simon

  • My Macbook pro,s Airdrop isn't functional  plz help me to use it

    Hi everybody.
    My Macbook pro,s  Airdrop  isn't  functional  plz help me to use it.

    Mac Basics: AirDrop helps you share items with others nearby

  • Need help how to use itunes card to download music

    Need help how to use itunes card to download music

    If you want to add the iTunes card to your account, then in the iTunes app on the iPad you should be able to scroll to the bottom of the Music tab and there should be a Redeem button - there is more info here : http://support.apple.com/kb/HT1574

  • I need to register my UDID !plz help i cnat use my phone!!!

    i need to register my UDID !plz help i cnat use my phone!!!
    i update my phone to ios 5 beta 6 but i cant register to Dev!
    Plz register my UDID
    THX :X:X:X:X:X:X <3 <3 <3
    my UDID : df8f192d8b68af19bf61e483a0ec8f99e806b59c

    thx dude for answer
    but i have developer account my problem is i don't know where i register my UDID?!
    [email protected] is my apple ID

  • Extracting audio from video clip to use as narration?

    Hi there,
    I have a video clip in which I want to take the audio of actor speaking and put it onto another video.
    I.e. he is speaking about walking in the park. I want to take him speaking about walking in the park and put it onto the clip where he is actually walking in the park.
    How do I do this in premiere elements 10?

    Hi Bill,
    Thanks for the quick response. I guess my question now is how would I do those two things?
    In terms of exporting the audio, where can I find that option when I'm on timeline?
    What do you mean by "Alt-click" and what is a "muxed file"?
    Thanks again,
    Mallory
    Date: Fri, 13 Jan 2012 19:01:51 -0700
    From: [email protected]
    To: [email protected]
    Subject: Extracting audio from video clip to use as narration?
        Re: Extracting audio from video clip to use as narration?
        created by Bill Hunt in Premiere Elements - View the full discussion
    Welcome to the forum. There are several ways to accomplish this, and your choice might well rest on how you like to work, and what you are doing, such as Deleteing Video. First, you could Export/Share just the Audio as a PCM/WAV @ 48KHz 16-bit, from your Timeline, and Import that into a New Project, where the Audio WAV file would be used. OTOH, you could Atl-click on the Video portion of the muxed file, and Delete the Video, leaving only the Audio portion. Good luck, Hunt
         Replies to this message go to everyone subscribed to this thread, not directly to the person who posted the message. To post a reply, either reply to this email or visit the message page: http://forums.adobe.com/message/4139273#4139273
         To unsubscribe from this thread, please visit the message page at http://forums.adobe.com/message/4139273#4139273. In the Actions box on the right, click the Stop Email Notifications link.
         Start a new discussion in Premiere Elements by email or at Adobe Forums
      For more information about maintaining your forum email notifications please go to http://forums.adobe.com/message/2936746#2936746.

  • How to use the DLLs which created from c++ in Java?

    And How to use the DLLs which created from JNI in C++?

    Huh?
    Are you asking how to do JNI - you should read the tutorial.
    Are you asking how to load it - then use System.loadLibrary()
    Are you asking what to do with the output from javah - put it in a C file and write some code, compile it into a dll.

  • How can i make a still frame from imovie 11 using mpeg streamline clip

    How can I make a still frame from iMovie using mpeg stream clip?

    See my User Tip here.
    https://discussions.apple.com/docs/DOC-3231

  • HT4437 how  can i stream audio to ipad from video playing on the apple tv using air play?

    how  can i stream audio to ipad from video playing on the apple tv using air play?

    I don't know what AppleTV can handle as far as bit rate is concerned, but increase the bit rate as high as it will let you. You are taking DV which is 25Mb/s and compressing it. If you're making an H.264, you should get great results needing no more than 6Mb/s. Bear in mind, the higher the bit rate, the larger the file size.

  • HT201210 plz help i cannot erase and reset all setting from iphone 5

    plz help i cannot erase and reset all setting from iphone 5

    Why can't you?
    We are not mind readers.  If you want help, tell us exactly what is going on.

Maybe you are looking for

  • Help with implementing a login page - ADF Faces & 10.1.3

    I am having trouble getting a basic login page working and am hoping someone can help. I'd like to have a login page with username and password fields and a submit button. When submitted, I would like to authenticate the user and either send them to

  • IMac 3.06GHz Intel Core 2 Duo (24-inch) - 2 or 4 slots ?

    Hi, Crucial's memory selector tells me that I can install a maximum of 4GB of memory on my iMac 3.06GHz Intel Core 2 Duo (24-inch). Why does the system info show me that I have 4 slots with 2 being empty (see picture below) ? Regards.

  • Export to an unusual DVD

    I made several training videos for my company. The content consisted of 1024x768 screen captures made with Camtasia (saved using the Techsmith codec) and a studio produced audio track. I had to export the project as an uncompressed .avi and then impo

  • Opening a WinZip file on Mac

    How do I do this? I'm trying to open a video file that my Dad sent to me that was winzipped. Any help would be appreciated. 2 years and I'm still learning this software. LOL.

  • About autonomous_transaction

    Hi, The trigger stock_trigger works normally.But after I add these sentences :"PRAGMA AUTONOMOUS_TRANSACTION" and "COMMIT",it doesn't work anymore.And there is no error showed by system. Anybody cound tell me how to amend this triigger? many thanks x