Avatar billede stigc Nybegynder
14. maj 2004 - 19:40 Der er 4 kommentarer og
1 løsning

Mediatracker bruger 100% CPU når den loader et billede.

Jeg udvikler en Ogg/Mp3 afspillet i Java
Imens jeg afspiller musik i en tråd, henter jeg albummets cover billede i en anden tråd. Desværre medfører dette at musikken hakker. Det er ikke når jeg henter data fra harddisken, men når jeg første gang spørger mediatracker om billedet er loadet("mt.checkAll(true)"). Er det muligt at fortælle, at den skal genere JPEG billedet langsommer?

jeg tester poå en 500 mhz CPU med jdk1.3.1_03

Thread priority er Thread.MIN_PRIORITY


    private Image loadPicture(String v)
    {
       
        int n=0;
        Image image = null;
        InputStream in = null;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        byte[] buf = new byte[2048];
       

        try {

            in = new FileInputStream(v);

            while ((n = in.read(buf)) > 0) {
                out.write(buf, 0, n);
                System.err.print("*");
                sleep(5);
            }

               
            byte[] bufPic = out.toByteArray();
           
            Toolkit tk = Toolkit.getDefaultToolkit();
            System.err.print("Toolkit");
            sleep(1000); //Testing purpose
           
            image = tk.createImage(bufPic);
            System.err.print("createImage");
            sleep(1000); //Testing purpose
           
            MediaTracker mt = new MediaTracker(consumer.main);
            System.err.print("mt");
            sleep(1000); //Testing purpose
           
            mt.addImage(image,0);
            System.err.print("addImage");
            sleep(1000); //Testing purpose


            while(!mt.checkAll(true))  <-- The Music is chopping here !
            {
                System.err.print(".");
                sleep(50);
            }

        } catch (Exception ex)
            {System.out.print(ex); }   
           
        return image;
    }
Avatar billede _carsten Nybegynder
15. maj 2004 - 01:11 #1
Bare et forslag, har prøvet med nogle af wait metoderne ?
Eks. waitForID(int id, long ms)
Avatar billede stigc Nybegynder
15. maj 2004 - 10:28 #2
Ja, de giver sammem problem.
Avatar billede stigc Nybegynder
21. maj 2004 - 13:06 #3
Jeg har fundet en implementation af en jpeg decoder. Her er det nemt at sætte farten ned i decodingen, men der er stadigvæk problemer når java allokerer plads til data med

int b[] new = new int [1000*500];

Kan man oprette et sådan array i små bidder?
Avatar billede _carsten Nybegynder
21. maj 2004 - 14:12 #4
Jeg er ikke sikker på at jeg helt forstår.

Det hele skal vel samles i et array, så jeg tvivler på det løser problemet at lave en masse små array's, for derefter at flytte dem over i et stort array.

Tvivler på jeg hjælpe med den her.
Avatar billede stigc Nybegynder
09. januar 2005 - 12:14 #5
Hmmm. Med JRE 1.5 har de løst problemet. Her går CPU'en ikke amok når jeg allokerer arrayet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester