This forum has been archived. All content is frozen. Please use KDE Discuss instead.

Cover Art an MTP-Device

Tags: None
(comma "," separated)
knekke
Registered Member
Posts
4
Karma
0

Cover Art an MTP-Device

Sun Feb 03, 2008 5:14 pm
Hallo beisammen,

ich suche seit Tagen nach einer Möglichkeit Album Cover so auf meinen Philips GoGear zu übertragen, dass dieser die auch lesen kann.
Dazu müssen sie leider als "Album Art.jpg" im Albumverzeichnis abgespeichert werden. Amarok macht das auch schon fast alles richtig, nur leider heissen die jpegs so wie das jeweilige Album und ich habe nirgendwo eine Möglichkeit entdeckt das zu Ändern.
Habe ich da was übersehen?

Wie dem auch sei, jedenfalls habe ich mich auf der Suche nach einer Lösung etwas durch den Quelltext gewühlt und hätte auch eine Idee wie man das bewerkstelligen könnte. Leider bin ich nur Hobbycoder und auch eher mit Python unterwegs, weshalb mir selbst die Ausführung etwas schwer fällt, aber vielleicht gibt es hier ja jemanden mit etwas Zeit und Muse....

Dann mal los... es geht um den Quelltext 'mtpmediadevice.cpp' in amarok-1.4.8/amarok/src/mediadevice/mtp/ und da um die Methode
MtpMediaDevice::sendAlbumArt(QPtrList *items).

So wie es da steht ist das Image ein LIBMTP_filesampledata_t Objekt und wird mit LIBMTP_Send_Representative_Sample(...) an das MTP-Device gesendet. Leider hat dieser Objekttyp kein Attribut ->Name, was bedeutet dass kein Dateiname übergeben und somit automatisch der Albumname von libmtp vergeben wird. Korrigiert mich bitte wenn ich da falsch liege.
Das heisst auch dass es eigentlich eine libmtp-Problematik ist und nicht die von Amarok. Aber wenn ich das jetzt bei libmtp poste und die das evtl. mal implementieren und dann Amarok den Quelltext anpasst können gut mal ein paar Tage verstreichen...

Also zu meiner Idee:
(Ich habe leider keine Online Documentation zu libmtp gefunden... bei mir liegt sie aber unter /usr/local/share/doc)
Das Image wird nicht per LIBMTP_Send_Representative_Sample(...) sondern mit LIBMTP_Send_File_From_File(...) an das mtp device gesendet. LIBMTP_Send_File_From_File(..) braucht folgende Argumente:
device  .... haben wir eh schon: m_device
path    .... der Pfad in dem sich die zu Kopierende Datei befindet und mein eigentliches Problem..dazu gleich mehr
filedata .... LIBMTP_file_t *const ...Platzhalter für die Zieldatei, muss vorher initialisiert werden
callback ... kann auf NULL gesetzt werden
data      ... kann auf NULL gesetzt werden
parenthandle  .... haben wir eh schon: album_object->album_id

Das Problem besteht für mich im erzeugen von path (const char*) aus einem QByteArray als das ja das Image nach getSupportedImage() zurück kommt.
Das Bild das in 'QByteArray *imagedata' müsste also irgendwie(???) als '/tmp/Album Art.jpg' abgespeichert werden (kann ja nach ausführung auch wieder gelöscht werden), und diesen Pfad müsste dann als 'const char*' an LIBMTP_Send_File_From_File(..) übergeben werden. Eigentlich nicht so wild wenn man weiss wie. Ich würde die Lösung mit *Album Art.jpg' einfach fest in mein Amarok kompilieren, aber für künftige Versionen könnte man evtl. noch einen kleinen Dialog erstellen in dem gerfagt wird mit welchem Namen das Cover gespeichert werden soll...

So, vielen Dank für die Aufmerksamkeit und vielleicht ist ja jemand so nett und sagt mir wie ich da QByteArray als .jpg abspeichern kann....

cheers,
knekke
MilhousePunkRock
Registered Member
Posts
5
Karma
0

Re: Cover Art an MTP-Device

Sun Feb 17, 2008 2:58 pm
Hallo!

Ich kann Dir zwar was das eigentliche Problem angeht kein Stück helfen, aber ich habe auch einen Philips GoGear (HDD1620/00) und fände die Möglichkeit, die Albumcover an die richtige Stelle zu übertragen ganz nett...
Wenn sich also noch was tut, sag bescheid, ich würde es gerne testen...
Die ursprüngliche Album Art-Implementation, so wie das gesamte MTP-Plugin ist, wenn ich mich recht entsinne, von "mopoke". Einfach mal im IRC gucken, ob Du Ihn erwischst, der kann bestimmt helfen...

Rock on,
MilhousePunkRock


Bookmarks



Who is online

Registered users: abc72656, Bing [Bot], daret, Google [Bot], Sogou [Bot], Yahoo [Bot]