Problem bei Videoeffect mit Java Media Framework

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem bei Videoeffect mit Java Media Framework

    Hallo,

    ich soll einen Player mit Java Media Framework Programmieren der Videos abspielen kann, zusätzlich sollen die Videos durch einen Effekt (es sollen linien im Bild erscheinen) verändert werden können.

    In meiner Hauptklasse (MediaPlayer.java) befindet sich die Benutzerschnittstelle und hier wird der Pfad der Videodatei aufgerufen und der Player wird gestartet.

    In der Klasse proplayer.java wird der Player mittels eines Processors realisiert. Die visuelle Komponente des Players wird in der Benutzerschnittstelle auf ein JPanel ausgegeben.
    In der proplayer.java Klasse wird auch der Effekt folgendermassen aufgerufen:

    Quellcode

    1. try {
    2. Codec codec[] = { new HSEffect() };
    3. videoTrack.setCodecChain(codec);
    4. } catch (UnsupportedPlugInException e) {
    5. System.err.println("The processor does not support effects.");
    6. }


    Der Effekt wird in der Klasser HSEffect.java realisiert.
    In dieser Klasser gibt es die Methode process, und hier liegt das Problem.
    Wenn ich ein Video lade und es abspiele wird es zwar gestartet, man hört den Ton und eine Linie wird auch gezeichnet aber es wird kein Videobild mehr dargestellt. Man sieht also nur eine blaue Linie auf schwarzem Hintergrund.
    Die process Methode sieht folgendermassen aus:

    Quellcode

    1. public int process(Buffer inBuffer, Buffer outBuffer) {
    2. int outputDataLength = ((VideoFormat)outputFormat).getMaxDataLength();
    3. validateByteArraySize(outBuffer, outputDataLength);
    4. outBuffer.setLength(outputDataLength);
    5. outBuffer.setFormat(outputFormat);
    6. outBuffer.setFlags(inBuffer.getFlags());
    7. byte [] inData = (byte[]) inBuffer.getData();
    8. byte [] outData = (byte[]) outBuffer.getData();
    9. RGBFormat vfIn = (RGBFormat) this.outputFormat;
    10. Dimension sizeIn = vfIn.getSize();
    11. //vfIn.
    12. int iw = sizeIn.width;
    13. int ih = sizeIn.height;
    14. if ( outData.length < iw*ih*3 ) {
    15. System.out.println("the buffer is not full");
    16. return BUFFER_PROCESSED_FAILED;
    17. }
    18. //Buffer buf = fgc.grabFrame();
    19. Graphics2D g = null;
    20. Image img = new BufferToImage((VideoFormat)inBuffer.getFormat()).createImage(inBuffer);
    21. BufferedImage buffi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
    22. g = buffi.createGraphics();
    23. String filename = null;
    24. g.setColor(Color.blue);
    25. g.drawLine(10, 10, 200, 200);
    26. Buffer output = ImageToBuffer.createBuffer((Image)buffi,25);
    27. outBuffer.setData(output.getData());
    28. outBuffer.setFormat(output.getFormat());
    29. outBuffer.setLength(output.getLength());
    30. outBuffer.setOffset(output.getOffset());
    31. int height = vfIn.getSize().height;
    32. int line = vfIn.getLineStride();
    33. int n = line % height;
    34. if (n < 0) {n = height + n;}
    35. int copyStart = 0;
    36. int copyEnd = height * line;
    37. int target = 0;
    38. for(int i = copyStart; i < copyEnd; i++)
    39. {
    40. outData[target++] = inData[i];
    41. }
    42. copyEnd = copyStart;
    43. copyStart = 0;
    44. for (int i = copyStart; i < copyEnd; i++)
    45. {
    46. outData[target++] = inData[i];
    47. }
    48. return BUFFER_PROCESSED_OK;
    49. }
    Alles anzeigen


    Orientiert habe ich mich dabei an dem Beispiel RotationEffect von Sun:
    http://java.sun.com/products/java-media/jmf/2.1.1/solutions/RotationEffect.html

    Ich weiß leider nicht mehr weiter, kann mir vielleicht jemand dabei helfen.
    Hab keine Idee wie ich es schaffe das Videobild und Linie angezeigt werden.
    Vielen Dank schon im Voraus!!!
    Lg Stefan