Git Atmowin / Atmolight Plugin repo - Ambilight 4 mediaportal (1 Viewer)

angie05

MP Donator
  • Premium Supporter
  • March 29, 2010
    141
    118
    Home Country
    Germany Germany
    @BassFan: um mit dem Atmowin zu verbinden, muss man nichts von den Remote-Bibliotheken kompilieren. Man fügt einfach unter neue Ressource den Atmowin-OLE-Server hinzu und Visual Studio erstellt ohne jegliches zutun die Remote DLL. Die Nutzung ist dann sehr einfach ... siehe Atmolight-Plugin Code.

    Verbinden...

    Code:
        private bool ConnectToAtmoWinA()
        {
          try
          {
            atmoCtrl = (IAtmoRemoteControl2)Marshal.GetActiveObject("AtmoRemoteControl.1");
          }
          catch (Exception ex)
          {
            Log.Error("atmolight: exception= {0}",ex.Message);
            atmoCtrl = null;
            return false;
          }
    
          ComEffectMode oldEffect;
          atmoCtrl.setEffect(ComEffectMode.cemLivePicture, out oldEffect);
          atmoLiveViewCtrl = (IAtmoLiveViewControl)Marshal.GetActiveObject("AtmoRemoteControl.1");
          atmoLiveViewCtrl.setLiveViewSource(ComLiveViewSource.lvsExternal);
          atmoCtrl.getLiveViewRes(out captureWidth, out captureHeight);   
          DisableLEDs();
          return true;
        }


    Code:
    private void SetAtmoEffect(ComEffectMode effect)
        {
          if (atmoCtrl == null)
            return;
          try
          {
            ComEffectMode oldEffect;
            atmoCtrl.setEffect(effect, out oldEffect);
            Log.Info("atmolight: Set atmoeffect to " + effect.ToString());
          }
          catch (Exception ex)
          {
            Log.Error("atmolight: Failed to switch effect to "+effect.ToString()+Environment.NewLine+ex.Message+Environment.StackTrace);
          }
        }

    MP-Liveview Mode (= externe DatenQuelle) einschalten...

    Code:
    private void EnableLivePictureMode(ComLiveViewSource viewSource)
        {
          SetAtmoEffect(ComEffectMode.cemLivePicture);
          atmoLiveViewCtrl.setLiveViewSource(viewSource);
        }

    periodisch (Timer) Daten senden... (2 einfache Arrays für Header und Pixeldaten)
    Code:
         BinaryReader reader = new BinaryReader(stream);
                    stream.Position = 0; // ensure that what start at the beginning of the stream.
                    reader.ReadBytes(14); // skip bitmap file info header
                    byte[] bmiInfoHeader = reader.ReadBytes(4 + 4 + 4 + 2 + 2 + 4 + 4 + 4 + 4 + 4 + 4);
                    byte[] pixelData = reader.ReadBytes((int)(stream.Length - stream.Position));
                    atmoLiveViewCtrl.setPixelData(bmiInfoHeader, pixelData);


    Grüße Angie05
     
    B

    BassFan

    Guest
    um mit dem Atmowin zu verbinden, muss man nichts von den Remote-Bibliotheken kompilieren.

    Danke erst mal..

    Nee.. sorry ich will das ja in BassVis bereitstellen nicht deine Lib ändern verbessern oder irgendetwas innerhalb MP davon ändern
    das soll alles so bleiben wie es ist.

    Ich möchte lediglich die VisDaten die ich in Bassvis render direkt an AtmoWin senden da ich während des rendern diese schon in einem Array habe
    wäre es ja unsinnig diese erst an MP zu senden und anschließend hier zu verarbeiten.

    Das Einzige was MP dann von mir bekäme wären 2 API's
    BASSVIS_AtmoWinCreate (result Bool)
    BASSVIS_AtmoWinFree (result(Bool)

    Der User kann dann innerhalb der Konfiguration wählen ob er AtmoWin für Visualisierungen verwenden will.
    Wenn er das will setzt das voraus das AtmoWin bereits gestartet ist. Wenn nicht wird false zurückgeliefert da der Process AtmoWin dann nicht gefunden wurde.
    AtmoWinFree ruft die AtmoFinalize auf und räumt den PixelBuffer auf.

    Wo ich ein Verständnis Problem mit habe ist die Aufarbeitung der Pixel..
    Es gibt da doch 4 Bereiche (im dummy Window) in denen die Farben dargestellt werden.
    Woher weis ich jetzt mit welchen Befehl ich das jeweilige Bitmap mit Farbe fülle?
    Kann zwar die PixelDaten senden aber an welchen Bereich..

    Ich hoffe du verstehst was ich meine..

    gruss
     
    Last edited by a moderator:

    angie05

    MP Donator
  • Premium Supporter
  • March 29, 2010
    141
    118
    Home Country
    Germany Germany
    die erste Methode ist das direkte Setzten der LEDs:

    atmoCtrl.setChannelValues(array channel_Values)

    Das Problem dabei ist, dass fast jeder seine LEDs anders verbaut hat und die erste LED nicht zwangsläufigt links oben ist. Lässt sich aber über umordnen des Arrays leicht beheben, wenn Startpunkt und Anzahl der LEDs bekannt ist.

    die zweite wäre ein Bild/ Pixelarray (64X48 Header+1rgb2rgb3rgb....3072rgb) zu senden, das dann von Atmowin ausgewertet wird. Einfach die Ränder in deinen gewünschten Farben bunt machen und absenden. Das ist die oben beschriebene Methode.

    Grüße
    Angie
     
    B

    BassFan

    Guest
    die erste Methode ist das direkte Setzten der LEDs:

    atmoCtrl.setChannelValues(array channel_Values)

    Das Problem dabei ist, dass fast jeder seine LEDs anders verbaut hat und die erste LED nicht zwangsläufigt links oben ist. Lässt sich aber über umordnen des Arrays leicht beheben, wenn Startpunkt und Anzahl der LEDs bekannt ist.

    die zweite wäre ein Bild/ Pixelarray (64X48 Header+1rgb2rgb3rgb....3072rgb) zu senden, das dann von Atmowin ausgewertet wird. Einfach die Ränder in deinen gewünschten Farben bunt machen und absenden. Das ist die oben beschriebene Methode.

    Grüße
    Angie

    Ah! Ok darum ging es mir.
    Ich muss also mein aktuelles Frame von 1920x1200 auf 64X48 runter skalieren und anschließend an AtmoWin senden.
    Ohne das ich mich selbst um die Ränder usw.. kümmern muss.

    gruss
     

    Users who are viewing this thread

    Top Bottom