Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[enhancement - 081.4] 2003/09/29 updated
#1
moved to this..
the best things in life are free..
73 de Matthias / DO2MCB

[Comag SL40HD, Lemon Volksbox (zzt. defekt), WinTV-DVB-s Rev1.3 (TT 1.23b)][TT DVB App. 1.23, DVBsVCR2 1.3, DVBWorkshop2.6][M2TS,PVA,MPG-MP2,PES][X - immer das Neueste, J2SE1.2.2_09, J2SE1.4.2_05, J2SE1.5.0-b64]
Zitieren
#2
moved to this..
the best things in life are free..
73 de Matthias / DO2MCB

[Comag SL40HD, Lemon Volksbox (zzt. defekt), WinTV-DVB-s Rev1.3 (TT 1.23b)][TT DVB App. 1.23, DVBsVCR2 1.3, DVBWorkshop2.6][M2TS,PVA,MPG-MP2,PES][X - immer das Neueste, J2SE1.2.2_09, J2SE1.4.2_05, J2SE1.5.0-b64]
Zitieren
#3
Arrow das sollte mal noch a bissl getestet werden...
EDIT: Nachtrag Code 12092003
-------

enhancements:
(a) preview also supports color formats 4:2:2/4:4:4 (high profiles)
(fix: chroma irritations on field encoded macroblocks)
(b) doubleclick onto preview area opens a dialog to save a 24bit bitmap
of last shown picture in original size (auto numbered)

->(a)
@MPVD.java
@inner class Picture

(1)replace method Add_Block()
~line2070

Code:
//DM02092003+ changed
public void Add_Block(int comp, int bx, int by, int dct_type[], boolean addflag){

    int cc, iincr;
    int rfp;
    short Block_Ptr[] = block[comp];

    /* derive color component index */
    cc = cc_table[comp];

    if (cc==0){
        if (picture_structure==FRAME_PICTURE){   //progressive
            if (dct_type[0]>0){
                rfp = current_frame[0] + Coded_Picture_Width*(by+((comp&2)>>1)) + bx + ((comp&1)<<3);
                iincr = (Coded_Picture_Width<<1) - 8;
            }else{
                rfp = current_frame[0] + Coded_Picture_Width*(by+((comp&2)<<2)) + bx + ((comp&1)<<3);
                iincr = Coded_Picture_Width - 8;
            }
        }else{
            rfp = current_frame[0] + (Coded_Picture_Width<<1)*(by+((comp&2)<<2)) + bx + ((comp&1)<<3);
            iincr = (Coded_Picture_Width<<1) - 8;
        }
    }else{
        // chrominance
        // scale coordinates
        if (chroma_format!=CHROMA444) bx >>= 1;
        //if (chroma_format==CHROMA420) by >>= 1; // disabled

        if (picture_structure==FRAME_PICTURE){  //progressive
            if (dct_type[0]>0 && chroma_format!=CHROMA420){
                // field DCT coding
                rfp = current_frame[cc] + Chroma_Width*(by+((comp&2)>>1)) + bx + (comp&8);
                iincr = (Chroma_Width<<1) - 8;
            }else{
                // frame DCT coding
                rfp = current_frame[cc] + Chroma_Width*(by+((comp&2)<<2)) + bx + (comp&8);
                iincr = Chroma_Width - 8;
            }
        }else{
            // field picture
            rfp = current_frame[cc] + (Chroma_Width<<1)*(by+((comp&2)<<2)) + bx + (comp&8);
            iincr = (Chroma_Width<<1) - 8;
        }
    }
    iincr += 8;

    int val,luma,pPos, r,g,b;
    if (cc==0){   //lumi
        for (int y=0;y<8;y++)
            for (int x=0;x<8;x++){
                val = Block_Ptr[x+(y*8)]+((picture_coding_type==I_TYPE)?128:0);
                val = val<0 ? 0 : (val>255 ? 255 : val);
                pixels[rfp+x+(y*iincr)] += val<<16 | val<<8 | val;
            }
    }else{    //chroma cc1 = Cb, cc2=Cr
        if (chroma_format!=CHROMA444){
            rfp<<=1;
            iincr<<=1;
        }
        for (int y=0; y<16; y++){
            for (int x=0; x<16; x++){
                val = Block_Ptr[(x>>1) + (8*(chroma_format!=CHROMA420?(y>>1):((y&1)==0?((y>>1)&~dct_type[0]):((y>>1)|dct_type[0]))))]; //DM12092003
                pPos = rfp+(x>>(chroma_format==CHROMA444?1:0))+((y>>(chroma_format!=CHROMA420?1:0)) *iincr);
                luma = pixels[pPos];
                if (cc==1){
                    r = (0xFF&luma>>>16);
                    g = (int)((double)(0xFF&luma>>>8) -0.34414*val);
                    b = (int)((double)(0xFF&luma) +1.722*val);
                    g = g<0 ? 0 : (g>255 ? 255 : g);
                    b = b<0 ? 0 : (b>255 ? 255 : b);
                }else{
                    r = (int)((double)(0xFF&luma>>>16) +1.402*val);
                    g = (int)((double)(0xFF&luma>>>8) -0.71414*val);
                    b = (0xFF&luma);
                    r = r<0 ? 0 : (r>255 ? 255 : r);
                    g = g<0 ? 0 : (g>255 ? 255 : g);
                }
                pixels[pPos] = r<<16|g<<8|b;
                if (chroma_format==CHROMA444)
                    x++;
            }
            if (chroma_format!=CHROMA420)
                y++;
        }
    }
}
//DM02092003-


--------------------------
->(b)
@MPVD.java
@inner class Picture

(1)add new global variables to this inner class
line ~87

Code:
public class Picture extends JPanel implements Runnable {

private JFileChooser chooser;  //DM02092003
private int bmpCount=0; //DM02092003
...

(2)add mouse Listener into method Picture
@method Picture(), ~line96
EDIT03092003: on compile/function errors, you probably missing an initialized FileChooser :oops:
Code:
public Picture(){
    setBackground(Color.black);
    setVisible(true);
    chooser = new JFileChooser(); //<-EDIT03092003

    //DM02092003+
    addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            if (e.getClickCount() > 1)
                saveBMP();
        }
    });
    //DM02092003-
}


(3)add new variable + 2 new methods to inner class Picture
line ~2518

Code:
//DM02092003+
private byte bmpHead[] = {
    0x42, 0x4D, //'B','M'
    0, 0, 0, 0, // real filesize 32bit, little endian (pixels.length*3 + header(0x36))
    0, 0, 0, 0,
    0x36, 0, 0, 0, //bitmap info size
    0x28, 0, 0, 0,
    0, 0, 0, 0, //hsize
    0, 0, 0, 0, //vsize
    1, 0,  //nplane
    0x18, 0, //bitcount 24b
    0, 0, 0, 0, //ncompr
    0, 0, 0, 0, //image bytesize
    (byte)0x88, 0xB, 0, 0, (byte)0x88, 0xE, 0, 0, //nxpm,nypm
    0, 0, 0, 0, 0, 0, 0, 0 //nclrused,nclrimp
};

public void littleEndian(byte[] array, int aPos, int value) {
    for (int a=0;a<4;a++)
        array[aPos+a] = (byte)(value>>(a*8) &0xFF);
}

public void saveBMP() {
    if (pixels.length==0)
        return;

    //VORSCHLAG 2(a)+ //12092003
    if (bmpCount==0){
        File dir= new File(X.outfield2.getText());
        if(dir.isDirectory() && X.comBox[13].getItemCount()>0)
            chooser.setCurrentDirectory(dir);
        else if (!X.list2.isSelectionEmpty())
            chooser.setCurrentDirectory(new File(X.list2.getSelectedValues()[0].toString()));
    }
    //VORSCHLAG 2(a)-

    String newfile = "X_pic_"+bmpCount+".bmp";
    chooser.setSelectedFile(new File(newfile));
    chooser.rescanCurrentDirectory();
    chooser.setDialogTitle("save picture");

    int retval = chooser.showSaveDialog(this);
    if(retval == JFileChooser.APPROVE_OPTION) {
        File theFile = chooser.getSelectedFile();
        if(theFile != null && !theFile.isDirectory()) {
            newfile = theFile.getAbsolutePath();
        }
    } else
        return;

    byte bmp24[] = new byte[3];
    littleEndian(bmpHead,2,(54+pixels.length*3));
    littleEndian(bmpHead,18,horizontal_size);
    littleEndian(bmpHead,22,vertical_size);
    littleEndian(bmpHead,34,(pixels.length*3));

    try{
    BufferedOutputStream BMPfile = new BufferedOutputStream(new FileOutputStream(newfile),2048000);
    BMPfile.write(bmpHead);
    for (int a=vertical_size-1; a>=0; a--)
        for (int b=0; b<horizontal_size; b++){
            for (int c=0; c<3; c++)
                bmp24[c] = (byte)(pixels[b+a*horizontal_size]>>(c*8) &0xFF);
            BMPfile.write(bmp24);
        }
    BMPfile.flush();
    BMPfile.close();
    bmpCount++;
    }catch (IOException e){ }
}
//DM02092003-
the best things in life are free..
73 de Matthias / DO2MCB

[Comag SL40HD, Lemon Volksbox (zzt. defekt), WinTV-DVB-s Rev1.3 (TT 1.23b)][TT DVB App. 1.23, DVBsVCR2 1.3, DVBWorkshop2.6][M2TS,PVA,MPG-MP2,PES][X - immer das Neueste, J2SE1.2.2_09, J2SE1.4.2_05, J2SE1.5.0-b64]
Zitieren
#4
Vorschlag1: Mach mer noch einen Tooltip hinzu. Viele ausgezeichnete Funktionen entdeckt ein Neueinsteiger nicht, weil sie "verborgen" sind.
Vorschlag2: Vielleicht wollen die User die bmps nicht im OS-Anwenderverzeichnis ("Eigene Dateien" etc.), sondern im Output-Verzeichnis der Collection bzw. im Default-Verzeichnis des Inputfiles.
(Als Java-Primitivling hol ich mir die Pfade aus der GUI :wink: )

Code:
public Picture(){
   setBackground(Color.black);
   setVisible(true);
   chooser = new JFileChooser(); //<-EDIT03092003

   setToolTipText("doubleclick to save as bmp"); // <- VORSCHLAG 1 Tooltip!

   // VORSCHLAG 2+
   File dir= new File(X.outfield2.getText());
   if(dir.isDirectory() && X.comBox[13].getItemCount()>0)
       chooser.setCurrentDirectory(dir);
   else
       chooser.setCurrentDirectory(new File((String)X.list2.getSelectedValue()));
   // VORSCHLAG 2-

   //DM02092003+
   addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
         if (e.getClickCount() > 1)
            saveBMP();
      }
   });
   //DM02092003-
}
[DVB-Receiver Topfield 5000PVR .rec (TS)]
Zitieren
#5
'ne kleine Änderung (möglicherweise nur für JDKs < 1.4.2 ?)

(a)Vorschlag2 hab ich mal 'umgesetzt', da die div. X GUI-komponenten an der alten Stelle beim Start noch nicht initialisiert waren (NullPointerExc.)
(b)Casten von (String)Object ist nicht zulässig, deshalb Object.toString() (s.o. evtl. versionsabhängig)

Code:
public void saveBMP() {
    if (pixels.length==0)
        return;

    //VORSCHLAG 2(a)+
    File dir= new File(X.outfield2.getText());
    if(dir.isDirectory() && X.comBox[13].getItemCount()>0)
        chooser.setCurrentDirectory(dir);
    else
        chooser.setCurrentDirectory(new File(X.list2.getSelectedValue().toString())); //<- (b)
    // VORSCHLAG 2(a)-
    ...

BTW:
bmp geht doch auf allen OS's, oder?

mfg
the best things in life are free..
73 de Matthias / DO2MCB

[Comag SL40HD, Lemon Volksbox (zzt. defekt), WinTV-DVB-s Rev1.3 (TT 1.23b)][TT DVB App. 1.23, DVBsVCR2 1.3, DVBWorkshop2.6][M2TS,PVA,MPG-MP2,PES][X - immer das Neueste, J2SE1.2.2_09, J2SE1.4.2_05, J2SE1.5.0-b64]
Zitieren
#6
a) habe ich eigentlich in method saveBMP() drin. War mein Fehler. An falscher Stelle gepostet! :evil:
b) Casten funktionierte ohne Probleme. Aber --> wohl versionsabhängig oder Zufall. Lieber auf Nummer Sicher.

Nachteil ist noch, dass man in list2 die Selection verändern kann, wenn die Preview schon offen ist. Dann landet man im falschen Dir. Hoffentlich merkt's keiner. :wink: Außerdem gibt's da noch die Multi-Selection :? :?
[DVB-Receiver Topfield 5000PVR .rec (TS)]
Zitieren
#7
Ich habe den markierten Teil des Codes ersetzt (gelöscht). Passt das so? Wie gesagt....bin Java Noob....

Code:
//DM02092003+ changed
public void Add_Block(int comp, int bx, int by, int dct_type[], boolean addflag){

   int cc, iincr;
   int rfp;
   short Block_Ptr[] = block[comp];

   /* derive color component index */
   cc = cc_table[comp];

   if (cc==0){
      if (picture_structure==FRAME_PICTURE){   //progressive
         if (dct_type[0]>0){
            rfp = current_frame[0] + Coded_Picture_Width*(by+((comp&2)>>1)) + bx + ((comp&1)<<3);
            iincr = (Coded_Picture_Width<<1) - 8;
         }else{
            rfp = current_frame[0] + Coded_Picture_Width*(by+((comp&2)<<2)) + bx + ((comp&1)<<3);
            iincr = Coded_Picture_Width - 8;
         }
      }else{
         rfp = current_frame[0] + (Coded_Picture_Width<<1)*(by+((comp&2)<<2)) + bx + ((comp&1)<<3);
         iincr = (Coded_Picture_Width<<1) - 8;
      }
   }else{
      // chrominance
      // scale coordinates
      if (chroma_format!=CHROMA444) bx >>= 1;
      //if (chroma_format==CHROMA420) by >>= 1; // disabled

      if (picture_structure==FRAME_PICTURE){  //progressive
         if (dct_type[0]>0 && chroma_format!=CHROMA420){
            // field DCT coding
            rfp = current_frame[cc] + Chroma_Width*(by+((comp&2)>>1)) + bx + (comp&8);
            iincr = (Chroma_Width<<1) - 8;
         }else{
            // frame DCT coding
            rfp = current_frame[cc] + Chroma_Width*(by+((comp&2)<<2)) + bx + (comp&8);
            iincr = Chroma_Width - 8;
         }
      }else{
         // field picture
         rfp = current_frame[cc] + (Chroma_Width<<1)*(by+((comp&2)<<2)) + bx + (comp&8);
         iincr = (Chroma_Width<<1) - 8;
      }
   }
   iincr += 8;

   int val,luma,pPos, r,g,b;
   if (cc==0){   //lumi
      for (int y=0;y<8;y++)
         for (int x=0;x<8;x++){
            val = Block_Ptr[x+(y*8)]+((picture_coding_type==I_TYPE)?128:0);
            val = val<0 ? 0 : (val>255 ? 255 : val);
            pixels[rfp+x+(y*iincr)] += val<<16 | val<<8 | val;
         }
   }else{    //chroma cc1 = Cb, cc2=Cr
      if (chroma_format!=CHROMA444){
         rfp<<=1;
         iincr<<=1;
      }
      for (int y=0; y<16; y++){
         for (int x=0; x<16; x++){
            val = Block_Ptr[(x>>1) +((y>>1) *8)];
            pPos = rfp+(x>>(chroma_format==CHROMA444?1:0))+((y>>(chroma_format!=CHROMA420?1:0)) *iincr);
            luma = pixels[pPos];
            if (cc==1){
               r = (0xFF&luma>>>16);
               g = (int)((double)(0xFF&luma>>>8) -0.34414*val);
               b = (int)((double)(0xFF&luma) +1.722*val);
               g = g<0 ? 0 : (g>255 ? 255 : g);
               b = b<0 ? 0 : (b>255 ? 255 : b);
            }else{
               r = (int)((double)(0xFF&luma>>>16) +1.402*val);
               g = (int)((double)(0xFF&luma>>>8) -0.71414*val);
               b = (0xFF&luma);
               r = r<0 ? 0 : (r>255 ? 255 : r);
               g = g<0 ? 0 : (g>255 ? 255 : g);
            }
            pixels[pPos] = r<<16|g<<8|b;
            if (chroma_format==CHROMA444)
               x++;
         }
         if (chroma_format!=CHROMA420)
            y++;
      }
   }
}
//DM02092003-
/** AB HIER GELÖSCHT+
    if (addflag){
        System.out.println(" a0 "+comp+"/"+bx+"/"+by+"/"+rfp+"/"+iincr);
        image.setRGB(bx+(8&comp<<3),by+(8&comp<<2),8,8,pix,0,8);

    }else{
        System.out.println(" a1 "+comp+"/"+bx+"/"+by+"/"+rfp+"/"+iincr);
        image.setRGB(bx+(8&comp<<3),by+(8&comp<<2),8,8,pix,0,8);
    }
**/
}

/*  Perform IEEE 1180 reference (64-bit floating point, separable 8x1
*  direct matrix multiply) Inverse Discrete Cosine Transform
*/  AB HIER GELÖSCHT-
public void IDCT_reference(short block[]){

Die ReleaseNotes habe ich auch mal angepasst. Werde mir aber noch die Mühe machen und die Änderungen von TheHorse (autoload dirs) hinzufügen...weil ich's nicht schlecht finde...

[equote:6363033193="Edit Admin"][center:6363033193]Attachment gelöscht und lokal archiviert

Lucike
[/center:6363033193]
Attachments-Archiv[/equote:6363033193]

greetz
Daywalker

[Technisat SkyStar 2] [AltDVB v2] [TS] [PjX - v0.90.x, JDK/JRE SDK 1.4.2 - M2S v0.7.8 Frame]
Zitieren
#8
Daywalker schrieb:Ich habe den markierten Teil des Codes ersetzt (gelöscht). Passt das so? Wie gesagt....bin Java Noob....

Die ReleaseNotes habe ich auch mal angepasst. Werde mir aber noch die Mühe machen und die Änderungen von TheHorse (autoload dirs) hinzufügen...weil ich's nicht schlecht finde...

Vielen Dank für deine Mithilfe, aber du schießt schon wieder an uns vorbei. Also ich teste noch. :| Wink

dvb.matt schrieb:
Daywalker schrieb:Was denkst Du über die Änderung? Wird das evtl. in's Projekt integriert?
wie TheHorse schrieb, ist diese Erweiterung quasi mehr seine 'GUI Bastelei'.
Ohne es abzuwerten, ICH habe dafür keine rechte Verwendung (wegen DnD). :oops:
Was aber nicht heißt, dass es nicht in X eingepflegt werden kann..
Hier ist Lucike derjenige welcher, der das vollbringt.

Drum regte ich an andrer Stelle an, evtl. über sowas abzustimmen, ob oder ob nicht.
Auch um nicht allzuhäufig upzudaten..

IMO würde es ja reichen, alle 2..4 Wochen die gesammelten Erweiterungen/Fixe bis dahin zusammenzufassen.
Ungeduldige können sich ja wie bisher vorher 'bedienen', falls der Code verfügbar ist.

mfg

Also, ich bin der selben Meinung. Wir warten noch. Allerdings muß ich zugeben, daß ich genau wie dvb.matt die Autodir-Geschichte eigentlich nicht gebrauchen kann. Ich bin auch der Ansicht, daß jeder der es braucht oder haben will sich selber einbauen kann. Was sagt "TheHorse" dazu?

@The Horse

solls rein, nun sag schon, los Wink

Ja Daywalker
Nein dvb.matt
Nein Lucike
? TheHorse
.....
jemand anderes noch eine Meinung?


Gruß
Lucike
Zitieren
#9
@dvb.matt

wäre gut, wenn Du/wir für Fixes wirklich ausschließlich einen eigenen Thread benutzt und für Vorschläge zum Test einen anderen. Ich sehe gerade, ich habe in diesem Thread ein Fix übersehen. Confusedhock:

http://forum.dvbtechnics.info/viewtopic.php?p=334#334

Gruß
Lucike
Zitieren
#10
@lucike
Ja, wir sollten experimentelle Diskussionen von den endgültigen Fixes trennen. Das ist auch meine Meinung. Die Arbeit hast halt dann du mit der Board-Verwaltung.

@daywalker
Es sollten bitte nicht mehrere Code-Versionen von X öffentlich im Umlauf ein! Ich stelle meine bescheidenen Vorschläge nur zur Diskussion und will evtl. dazu anregen, dass sich User selber mit dem Code ein bisschen beschäftigen. Sonst wird X wieder zum bloßen Saug-und Anwend-Prog. Man kann dabei ja nur lernen (wenngleich ich das nicht ganz im Sinne des X-Agreement mache, denn von mpeg und ts hab ich immer noch null Ahnung).
Wenn meine Schnapsideen dem Handling nutzen und mehrere der Meinung sind, man könne die Vorschläge ausbauen (und vor allem meine Bugs und wenig eleganten "Code-Workarounds" kommentieren), finde ich trotzdem, dass matt die letzte Entscheidungsinstanz bleiben sollte.
[DVB-Receiver Topfield 5000PVR .rec (TS)]
Zitieren


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  ENGLISH: Enhancement request - log PIDs on same line as filename cowbutt 1 1.167 23.12.2008, 19:10
Letzter Beitrag: dvb.matt
  Fehler im Update vom 30.12.2003 mister_no 4 1.947 31.12.2003, 14:09
Letzter Beitrag: dvb.matt
  X081.5 transitional updates... [upd. 2003/11/28] dvb.matt 21 5.058 29.11.2003, 14:32
Letzter Beitrag: dvb.matt
  [fix - 081.4] 2003/10/01 updated dvb.matt 9 3.667 01.10.2003, 23:18
Letzter Beitrag: dvb.matt

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste