{"id":58,"date":"2010-06-06T13:03:24","date_gmt":"2010-06-06T12:03:24","guid":{"rendered":"http:\/\/blogs.igalia.com\/jfernandez\/?p=58"},"modified":"2010-06-06T13:03:24","modified_gmt":"2010-06-06T12:03:24","slug":"creating-camera-software-with-gdigicam","status":"publish","type":"post","link":"https:\/\/blogs.igalia.com\/jfernandez\/2010\/06\/06\/creating-camera-software-with-gdigicam\/","title":{"rendered":"Creating camera software with GDigicam"},"content":{"rendered":"<p>After the release of the <a href=\"https:\/\/garage.maemo.org\/projects\/gdigicam\">GDigicam project<\/a> some months ago we have received some requests about creating documentation and examples of how to use the <em>GDigicam<\/em> component for handling specific camera devices. I&#8217;ve eventually got time to commit, truth being told,\u00a0 a very preliminary code which pretends to be the first full <em>GDigicam<\/em> example, showing some of the most important features of this piece of software and how to interact with the <em>GStreamer<\/em> <a href=\"http:\/\/www.gstreamer.net\/wiki\/CameraBin\">GstCamerabin<\/a> component.<\/p>\n<p>First of all, for those who still don&#8217;t know what <em>GDigicam<\/em> actually is, i would like to briefly introduce it. <em>GDigicam<\/em> is a framework for handling camera related low level software inspired in the <a href=\"http:\/\/en.wikipedia.org\/wiki\/OpenMAX\">OpenMax<\/a> standard. <em>GDigicam<\/em> provides a complete API for implementing a set of functionalities very useful when building camera UI software:<\/p>\n<ul>\n<li>ViewFinder<\/li>\n<li>Flash Modes<\/li>\n<li>Scene Modes<\/li>\n<li>Resolution and Aspect Ratio<\/li>\n<li>Autofocus<\/li>\n<li>White Balance<\/li>\n<li>Quality<\/li>\n<li>Zoom<\/li>\n<li>Video and Photo Capture<\/li>\n<\/ul>\n<p>The <em>GDigicam<\/em> component is intended to ease the setup and handle the software components which actually control and implement the video and photography features, and in addition, hiding the technologies used in such lower layers.<\/p>\n<p>The first implementation of the abstract API exposed by <em>GDigicam<\/em> is based on the <em>GStreamer<\/em> toolkit, using the <em>GstCamerabin<\/em> component. You can check it out from the git repository:<\/p>\n<ul>\n<li>git clone git:gitorious.org\/fremantle-gdigicam\/gdigicam.git<\/li>\n<\/ul>\n<p><code><a href=\"\/\/gitorious.org\/fremantle-gdigicam\/gdigicam.git\"><\/a><\/code><\/p>\n<p>The <em>stable <\/em>branch is totally focused on the <a href=\"http:\/\/maemo.org\/\">MAEMO<\/a> platform, so if you have plans to work on any different platform you will have to use the <em>master <\/em>branch. The new example added is only available at the unstable branch, since the <em>GstCamerabin<\/em> component is slightly different in MAEMO. Hopefully, I&#8217;ll be able to merge this example to the stable branch soon, but it will require some important design changes that could take some time.<\/p>\n<p>When I was implementing the new <em>GDigicam<\/em> example I realized other possibilities to be built on top of the <em>GDigicam<\/em> component. I think a benchmarking tool could fit perfectly on the purpose of showing how to use <em>GDigicam<\/em>, but it also provides an interesting tool for the community, to be able to compare and analyze different kind of camera hardware and software platforms.<\/p>\n<p>Here you are a <a href=\"http:\/\/www.youtube.com\/watch?v=Y-pLMQ5xKjE\">video<\/a> briefly showing this tool, being run in the MAEMO platform and using the N900 hardware. The UI interface is very simple, and perhaps a little rudimentary; user experience is not the key at this stage. In the video you can see how to configure the camera settings (flash, scene mode, resolution, quality and so on). After the configuration stage, you can enable or disable your own benchmarking set of tests. You can implement your own tests, grouping them in your own way and execute all of them in a row. In the video you can see the execution of the Set1 &#8211; Test1: Capture still images in a row (default is 5 iterations).<\/p>\n<p>There are lots of additional features, like a full verbose log of whats going on, performance metrics, comparison and analysis of different HW used for benchmarking. Of course you can forget about testing and building your own Camera for your device.<\/p>\n<p>Besides, the <em>GDigicam<\/em> component could provide other interesting features, very useful for implementing camera UI applications:<\/p>\n<ul>\n<li>Video\/Audio resource policies.<\/li>\n<li>Metadata management.<\/li>\n<li>Geolocation.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>After the release of the GDigicam project some months ago we have received some requests about creating documentation and examples of how to use the GDigicam component for handling specific camera devices. I&#8217;ve eventually got time to commit, truth being told,\u00a0 a very preliminary code which pretends to be the first full GDigicam example, showing &hellip; <a href=\"https:\/\/blogs.igalia.com\/jfernandez\/2010\/06\/06\/creating-camera-software-with-gdigicam\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Creating camera software with GDigicam<\/span><\/a><\/p>\n","protected":false},"author":20,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,8],"tags":[],"class_list":["post-58","post","type-post","status-publish","format-standard","hentry","category-gnome","category-mobile"],"_links":{"self":[{"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/posts\/58","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/comments?post=58"}],"version-history":[{"count":0,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/posts\/58\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/media?parent=58"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/categories?post=58"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/tags?post=58"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}