{"id":1397,"date":"2012-05-19T10:50:59","date_gmt":"2012-05-19T09:50:59","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=1397"},"modified":"2012-05-19T10:52:25","modified_gmt":"2012-05-19T09:52:25","slug":"nochmal-linux-canon-powershot-sx-130","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=1397","title":{"rendered":"Nochmal Linux + Canon Powershot SX 130"},"content":{"rendered":"<p>Ich hatte ja schon mal kurz gtkam erw\u00e4hnt um an die Dateien der Kamera zu kommen. Siehe [1]<br \/>\nNun ist es so, wenn man eine 2GB Datei (HD Videos) laden will, erst mal 2GB Speicher reserviert werden. Leider hat nicht jeder 2GB am St\u00fcck frei. Wenn man die Datei \u00fcberhaupt laden kann, kann es sehr sehr lange dauern (SWAP).<\/p>\n<p>Warum ist das so? Ich habe mich auf die Suche gemacht.<br \/>\nErstmal den Code von gtkam angesehen. Shit, ist das ein Kraut und R\u00fcben Salat. Da blickt ja kein Mensch durch. Alles nur hingeklatsch. Hauptsache die GUI ist benutzbar und st\u00fcrzt nicht allzu oft ab. Warum wohl nutze ich wenn m\u00f6glich Konsolenprogramme. <\/p>\n<p>Aber das bringt auch nichts, wenn die dazugeh\u00f6rige lib (libgphoto2) genauso bescheuert aufgebaut, programmiert und rar dokumentiert ist. Sicher, das ist alles kompliziert und so. Aber genau deswegen sollte man seine Sache gut machen.<\/p>\n<p>Wir sind uns sicher einig, dass das Schreiber einer GUI l\u00e4ngst nicht so kompliziert ist, als eine Kamera \u00fcber USB anzuzapfen, wenn man keine Doku hat wie das geht. Genauso spiegelt sich das auch im Code wird. Der GUI Teil ist miserabel. Aber die Codezeilen, die direkt mit der Kamera reden, die sind gut.<br \/>\nEin Lob an die Programmierer der Dateien libgphoto2-2.4.14\/camlibs\/canon\/* Es gibt wohl kaum etwas komplizierteres als einer Kamera eine Handvoll Bytes vorzuwerfen, und sie liefert einem die gew\u00fcnschten Daten.<br \/>\nAuch wenn ich mir nicht mal die M\u00fche gemacht habe den Code gut nachzuvollziehen, ich habe sofort gesehen wo mein Problem mit dem RAM ist. Und es ist sogar dokumentiert!<\/p>\n<p>usb.c Zeile 1715<\/p>\n<pre>\r\n<code>...\r\n * It calls #canon_usb_dialogue(), if it gets a good response it will malloc()\r\n * memory and read the entire returned data into this malloc'd memory and store\r\n * a pointer to the malloc'd memory in 'data'\r\n...\r\n\r\n...\r\nwhile (bytes_received < total_data_size) {\r\n...\r\nbytes_read = gp_port_read (camera->port, (char *)*data + bytes_received, read_bytes);\r\n<\/code>\r\n<\/pre>\n<p>So wie ich das sehe ist es sehr wohl m\u00f6glich die Daten st\u00fcckweise von der Kamera zu bekommen. Man hat die M\u00f6glichkeit einfach nur nicht vorgesehen.<br \/>\nEs ist nicht so einfach diese Funktion durch all die Abstraktionsebenen durchzuschleusen. Der Kamera spezifische Code muss es k\u00f6nnen. Dann die Lib. Und die GUI... die nicht. <\/p>\n<p>Aber das nachtr\u00e4glich einzubauen halte ich f\u00fcr unm\u00f6glich. Man muss ja ALLES umbauen. Nun, niemand trifft die Schuld. Als man die ersten Codezeilen vor 10 Jahren oder so geschrieben hat, da hat man nicht dran gedacht. Man kann ja nicht an alles denken. Aber sein Code so zu strukturieren, dass nachtr\u00e4gliche \u00c4nderungen leicht m\u00f6glich sind, das ist wohl erst in den letzten Jahren in Mode gekommen. Obwohl.. ich glaube nicht.<\/p>\n<p>[1] http:\/\/roboblog.fatal-fury.de\/?p=1220<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich hatte ja schon mal kurz gtkam erw\u00e4hnt um an die Dateien der Kamera zu kommen. Siehe [1] Nun ist es so, wenn man eine 2GB Datei (HD Videos) laden will, erst mal 2GB Speicher reserviert werden. Leider hat nicht jeder 2GB am St\u00fcck frei. Wenn man die Datei \u00fcberhaupt laden kann, kann es sehr [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[14,18],"class_list":["post-1397","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-c","tag-linux"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/1397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1397"}],"version-history":[{"count":6,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/1397\/revisions"}],"predecessor-version":[{"id":1403,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/1397\/revisions\/1403"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1397"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}