This page is an attempt to provide an easily digested PNG status board--basically a place to come and see how PNG currently fares for those who haven't been keeping up with the news page or mailing lists. It grew out of an article submitted to Slashdot in February 1999 (with a followup in June 2000 ), but it is intended to be more dynamic and has been redesigned accordingly.
Stability. excellent The PNG specification has proven to be exceptionally solid. There have been two minor updates since the 1.0 release--to clarify gamma handling and to add some new chunk types for precision color and international text--but the design of PNG is such that these additions do not prevent older apps from displaying images that contain the new chunks. In addition, PNG finally emerged from the amazingly slow process of ISO/IEC standardization in March 2004, which assures its long-term stability as an image format. It is also a required part of both VRML97 /X3D and the vector-based image standard, SVG.
User acceptance. very good to excellent Among those who are familiar with PNG, acceptance is excellent, and the most recent Unisys flap (late August 1999) further increased the level of awareness of PNG. While there are still many people who are barely aware of the difference between GIF and JPEG, much less who have heard of PNG, the number of non-PNG-Group folks who regularly post useful and accurate information about PNG (e.g. to Usenet newsgroups and mailing lists) is impressively high. In addition, application support is no longer considered extraordinary but rather is expected. Indeed, applications that do not support PNG are criticized both by users and by the trade press. And in 1999, technical publisher O'Reilly and Associates felt the market was ready for a book devoted entirely to the subject; PNG: The Definitive Guide was published in June 1999. (It turned out to be too narrow a topic to sell well and went out of print in late 2001, but it was relicensed under the GNU FDL, and the full text has been online since July 2003.)
Application support (quantity). excellent Virtually all graphics-related applications these days are at least able to read or write basic PNG images, and many can do both. See the PNG-supporting applications pages and freshmeat.net for details; several "new" apps are announced, discovered and/or listed every week.
Application support (quality). good The quality of PNG support in applications varies widely, but overall it is improving at a reasonable rate. Many applications now support both basic GIF-like transparency (palette-based with a single, fully transparent color index) and full alpha transparency (32-bit RGBA); a handful also support PNG's "RGBA palette" mode (8-bit with a multi-entry tRNS chunk). A number of high-end applications now support 16-bit color channels in PNG. Support for gamma correction continues to be uneven, with many applications failing to honor the gamma information when reading images, and most of them not making a distinction between recording gamma-related information about the user's display (lossless) and modifying the image data directly (lossy). Compression support is also uneven, with a surprisingly large number of applications writing overly large palettes, misusing PNG's compression filters, and often providing no way of setting the maximum possible compression level.
Among PNG-supporting image editors, Macromedia's Fireworks 2.0 and later. available for Windows and Macintosh, remains the best overall, with excellent support for PNG transparency, good compression, and support for text annotations. The GIMP. available primarily for Unix systems but now also for Windows, has reasonable alpha support, good gamma and text support, and excellent compression. Adobe's Photoshop. considered by many to be the preeminent image-editing application, is slowly improving but still is not at the level one might expect given its price tag. PS 7.0 fixes all known PNG bugs in previous versions, but its compression remains poor (reportedly), it cannot write 16-bit color channels (in PNG images, that is), and it has no support at all for RGBA palettes or text annotations. (It also silently "flattens" color data in areas where the image's alpha channel indicates complete transparency, which is a lossy operation and which may surprise users who expected truly lossless storage. Adobe does not consider this a bug.)
Browser support. very good to excellent Web-browser support for PNG--or the incomplete implementation thereof--was, for more than a decade, a major thorn in the side of PNG developers and web designers who wanted to use PNG. While most browsers supported PNG images natively since the late 1990s--the "Big Two" (Netscape and Internet Explorer ) having finally caught up in late 1997 (early 2000 for MSIE on the Macintosh)--the level of support was downright pathetic until 2001 or so and didn't achieve "ubiquitous goodness" until late 2006. Users want alpha transparency, which allows one to do nifty effects like drop-shadows and anti-aliasing against any background, but users of the now-dominant web browser, MSIE for Windows, were locked in the dark ages of GIF-style binary transparency until the release of MSIE 7.0 in October 2006. (Previous versions implemented PNG transparency in such a way that any palette index that wasn't completely opaque was treated as completely transparent--depending on your image, say goodbye to most of it! To make up for that, MSIE for Windows didn't support 32-bit RGBA transparency at all.) And even the newest version still has multiple bugs in its gamma support (screenshots ).
Meanwhile, most other browsers--including Microsoft's now-defunct MSIE 5 for Macintosh (screenshots )--have had excellent PNG support for years. (MSIE/Mac's only real downsides from the PNG perspective were that (1) the Mac development team and code base apparently were largely independent of the Windows side, and (2) they were disbanded entirely since the release of Apple's KHTML-based Safari browser, with the obvious corollary that there will never be any more updates.) However, both Safari and another Mac browser, iCab. also have excellent transparency support (though no gamma support in the latter), as do NetPositive for BeOS, OmniWeb for Mac OS X Server, the Sega Dreamcast browser, and the CSCMail e-mail client for Linux. Netscape's Navigator 6 and later (plus Mozilla. its open-source code base, and derivatives such as Firefox. Galeon and K-Meleon ) has had very good transparency support since April 2000, with the exception of 8- and 16-bit X on Unix (mediocre quality); it also has full gamma support and even, for a brief period, native MNG support. (Navigator 4.x had no transparency support whatsoever, but virtually all users have since upgraded to one of the Mozilla-based releases.) Recent releases of Dillo for Linux and Opera for Windows and Linux and are likewise fully capable of both transparency and gamma correction (though Dillo doesn't yet handle background images). Konqueror 3. KDE's native browser, has full 32-bit RGBA support but, at least through version 3.2.2, only binary transparency support for palette-based images. (Like older versions of Mozilla, it supports MNG natively.) WebTV does both gamma and transparency reasonably well, although versions before July 2000 had serious problems with palette-based transparency; there's also a WebTV Viewer test browser for Windows that has excellent PNG support. The W3C's Amaya browser was provided with a patch against version 2.1, which was supposed to give the Windows port some level of alpha support, but there's no mention of it in the new-features list for versions released since then. And Webster XL for RISC OS and the ICE Browser for Java are both supposed to have full transparency support, although these claims have not been verified.
On the less lively side, the nearly defunct Acorn Browse for RISC OS had full, flawless support for all forms of PNG transparency, not to mention gamma-correction and progressive display of interlaced PNGs. The fully defunct Arena also had decent alpha support, though it always used its own background pattern.
What will it take to move the Browsers rating firmly into the "Excellent" category? Leaving aside the issue of Windows users' migration to browsers with good PNG support (e.g. Firefox, MSIE 7, or Opera)--which may take another year or two--Microsoft needs to fix MSIE's broken gamma support; Mozilla/Firefox still lead in this regard. (And while Microsoft is at it, how about color correction? This falls into the "put up or shut up" category, since Microsoft was a founding member of the International Color Consortium more than a decade ago, before PNG even existed. See the screenshots page for details and links to test pages.) Beyond that, it would be nice to see some of the other actively developed browsers like Amaya (and Konqueror ?) learn how to do all forms of PNG transparency correctly; that goes for most of the embedded browsers, like ANT Fresco and ViewML. as well.
As a related item, note that Microsoft's Internet Information Server (a.k.a. IIS ) shipped by default without an explicit MIME type for PNG images until version 6, which effectively meant that it treated PNGs as application/octet-stream rather than image/png. Not surprisingly, this affected only non- Microsoft web browsers connecting to IIS servers; they rightly refused to display such mislabelled PNGs. Fortunately, Microsoft did finally correct the problem with the release of IIS 6.0 in 2003, and a fix is available for older versions (at least for version 4.0).
See the Browsers page for more info, including links to screenshots for many of the products mentioned above.
Animation support. poor to fair Animation and other forms of multi-image storage were intentionally excluded from the PNG specification; at the time (early 1995), animated GIFs were almost unheard of, MPEG was well established in the video realm, and the PNG Group felt (and still feels) that multi-image applications would be better served by a PNG-like meta-format. MNG, short for Multiple-image Network Graphics. is precisely that format. It uses exactly the same chunk architecture as PNG and actually shares many of the same chunks, but it supports looping, objects, and JPEG image data, among other things. See the MNG web site for details.
Prior to mid-1999, animation support was rather abysmal. But with the freezing of the MNG spec in May 1999 and the continued development of several MNG-supporting applications (e.g. ImageMagick. MNGeye. eMNGma. and PNG/MNG Construction Set Pro ) since then, the rating has moved up a notch. In February 2001, Gerard Juyn's free libmng achieved 1.0 status, and it is (or was) being used not only in a pair of browser plug-ins, a couple of Java applets, and in the Qt GUI toolkit, but also in Mozilla. Navigator 6 and later, Konqueror 3. and NetFront 3 and later. Unfortunately, MNG support was subsequently removed from Mozilla and its relatives (except as a separate "XPI" add-on ), and MNGeye and eMNGma are no longer being developed, so the rating has moved back down a notch.
More apps and better browser support will be necessary in order to move beyond "fair" status. Currently more than four dozen are listed, a number that continues to increase slowly but steadily.
Here are some related PNG pages at this site:
Last modified 14 March 2009.
This page summarizes the relationships among specifications, whether they are finished standards or drafts. Below, each title links to the most recent version of a document.Completed Work
W3C Recommendations have been reviewed by W3C Members, by software developers, and by other W3C groups and interested parties, and are endorsed by the Director as Web Standards. Learn more about the W3C Recommendation Track .
Group Notes are not standards and do not have the same level of W3C endorsement.
This specification defines the features and syntax for Scalable Vector Graphics (SVG) Version 1.1, a modularized language for describing two-dimensional vector and mixed vector/raster graphics in XML.
This specification defines the features and syntax for Scalable Vector Graphics (SVG) Tiny, Version 1.2, a language for describing two-dimensional vector graphics in XML, combined with raster graphics and multimedia. Its goal is to provide the ability to create a whole range of graphical content, from static images to animations to interactive Web applications. SVG 1.2 Tiny is a profile of SVG intended for implementation on a range of devices, from cellphones and PDAs to laptop and desktop computers, and thus includes a subset of the features included in SVG 1.1 Full, along with new features to extend the capabilities of SVG. Further extensions are planned in the form of modules which will be compatible with SVG 1.2 Tiny, and which when combined with this specification, will match and exceed the capabilities of SVG 1.1 Full.
This document defines two mobile profiles of SVG 1.1. The first profile, SVG Tiny, is defined to be suitable for cellphones; the second profile, SVG Basic, is suitable for PDAs.Group Notes
Describes requirements for general Japanese layout realized with technologies like CSS, SVG and XSL-FO. The document is mainly based on a standard for Japanese layout, JIS X 4051, however, it also addresses areas which are not covered by JIS X 4051.
Below are draft documents: Candidate Recommendations. other Working Drafts. Some of these may become Web Standards through the W3C Recommendation Track process. Others may be published as Group Notes or become obsolete specifications.Candidate Recommendations
This specification defines the features and syntax for Scalable Vector Graphics (SVG) Version 2, a language for describing two-dimensional vector and mixed vector/raster graphics. Although an XML serialization is given, processing is defined in terms of a DOM.
Compositing describes how shapes of different elements are combined into a single image by overlaying, masking, blending, etc. The specification also defines a syntax for using compositing in CSS.
This specification provides basic geometric interfaces.
CSS Masking provides two means for partially or fully hiding portions of visual elements: masking and clipping. Masking describes how to use another graphical element or image as a luminance or alpha mask. Clipping describes the visible region of visual elements. This module defines faetures for both SVG and CSS.Other Working Drafts
This document summarizes the text composition requirements in the Chinese writing system. One of the goals of the task force is to describe the issues in the Chinese layout requirements, another one is to provide satisfactory equivalent to the current standards (i.e. Unicode), also to promote vendors to implement those relevant features correctly.
This document describes requirements for the layout and presentation of text in languages that use the Ethiopic script when they are used by Web standards and technologies, such as HTML, CSS, Mobile Web, Digital Publications, and Unicode.
This specification defines a model for synchronization and timing of changes to the presentation of a Web page. This specification also defines an application programming interface for interacting with this model and it is expected that further specifications will define declarative means for exposing these features.
Describes how user agents map SVG markup to platform accessibility APIs. When user agents support this specification, SVG authors can create accessible rich internet applications, including charts, graphs, and other drawings.
Defines a WAI-ARIA module of core roles, states and properties specific to web graphics. These semantics allow an author to express the logical structure of the graphic to assistive technologies, allowing assistive technologies to provide semantic navigation and adapt styling and interactive features.
This specification defines WebVTT, the Web Video Text Tracks format. Its main use is for marking up external text track resources in connection with the HTML
element. WebVTT files provide captions or subtitles for video content, and also text video descriptions [MAUR], chapters for content navigation, and more generally any form of metadata that is time-aligned with audio or video content.
This document describes requirements for general Korean language/Hangul text layout and typography realized with technologies like CSS, SVG and XSL-FO. The document is mainly based on a project to develop the international standard for Korean text layout. It is similar in intent to the Japanese Layout Requirements WG Note.
This specification defines a syntax and DOM representation for paths, which are shapes that can be rendered in a document. Paths are primarily used for rendering shapes using the SVG 'path' element, but are also used by a number of other Web platform features, such as clipping paths and rendering in an HTML 'canvas'.
The Motion Path module of CSS defines an additional way to define the position and rotation of elements when rendering a document. The position is given by a trajectory and an offset along that trajectory between 0 and 100%. In combination with animations, the offset can also be animated.
Filter effects are a way of processing an element's rendering before it is displayed in the document. Typically, rendering an element via CSS or SVG can conceptually described as if the element, including its children, are drawn into a buffer (such as a raster image) and then that buffer is composited into the elements parent. Filters apply an effect before the compositing stage. Examples of such effects are blurring, changing color intensity and warping the image.
Although originally designed for use in SVG, filter effects are a set a set of operations to apply on an image buffer and therefore can be applied to nearly any presentational environment, including CSS. They are triggered by a style instruction (the ‘filter’ property). This specification describes filters in a manner that allows them to be used in content styled by CSS, such as HTML and SVG. It also defines a CSS property value function that produces a CSS value.
SVG Integration defines how SVG documents must be processed when used in various contexts, such as CSS background images, HTML ‘iframe’ elements, and so on. These requirements include which features are restricted or disabled, such as scripting and animation.
This specification defines a DOM interface representing 2D and 3D matrices. It is intended to be used as a common interface by SVG, Canvas and CSS Transforms.
Nowadays, many students involve themselves in several extra-curricular activities. For that reason, most students do not have sufficient time to do their homework. A student may then ask himself or herself: "How can I do my homework in time?" The question arises from the fact that homework is a positive activity for students. In addition, homework and assignments improve the skills. Completed homework and assignments are also essential parts of examination at the end of the course. Therefore, the question of “how to do my homework in time” gives headache to students. Homework is important as it creates personal responsibility and discipline among students.
CoolEssay.net - Professional writing service
However, it is a fact that homework consumes the time for other extra-curricular activities. It is therefore imperative that students get help with homework. Several online homework help services provide students with interactive and suitable ways of doing homework. The methods of online homework service reduce unnecessary stress and confusion among students. They also provide students with an opportunity to progress academically.
With a computer and a source of internet connection, a student will definitely get homework helpers with a lot of experience in offering online services. This is very important since the students are able to finish their homework in time. The writing agency will provide detailed explanation of essential concepts of the homework problems. Most online writing service providers create a full learning environment, which help the learner to attain good motivation and clear understanding about the subject.
You can buy homework online at a nominal fee. There is a provision that allows students to communicate with online writing service providers. The student can place an order, proceed with the payment and get the homework done in time and sent to his or her personal e-mail. These services are good as they clear the doubts in students’ minds concerning the services they get through the online assistance. Most of the online writing service providers help the students at a nominal fee. For a student to get some help with homework, he or she should visit various sites that offer these services and compare their rates and the conditions under which they work. It is important that you analyze the profiles of different homework service providers before you settle on one choice to avoid substandard service providers.
24/7 live chat
September 27th, 2011 by jseward
This is a long post. Here’s a summary.
The rest of this post explains what the constraints are and approximately what is necessary to get started.Constraints
The main difficulty is the need to build a custom ROM and kernel. There are three reasons for this:
Instead, there is a master process called the Zygote. To start an application (eg Firefox), a message is sent via a socket to the Zygote. This creates a child with fork(), and the child then goes on to load the relevant bytecode and (presumably) native code and “becomes” Firefox. So there’s no exec() boundary for Valgrind to enter at.
Fortunately the AOSP folks provided a solution a couple of months back. They modified Zygote so that it can start selected processes under the control of a user-specified wrapper, which is precisely the hook we need. The AOSP tree now has this fix.Overview of getting started
Here’s an overview of the process. It doesn’t contain enough details to simply copy and paste, but it does give some idea of the hoop jumping that is unfortunately still required.
Download sources and build Android images, as per directions at http://source.android.com/source/building.html. This in itself is a major exercise. The relevant “lunch” flavour is full_crespo-eng, I think. At the end of this stage, you’ll have (amongst things) libraries with symbols and a wrapper-enabled Zygote. But not a swap enabled kernel.
Build a swap enabled kernel as per Mike Hommey’s instructions. and incorporate it into the images built in the previous stage. In fact, I skipped this step — Mike kindly did it for me.
Push the images onto the phone, reboot, check it’s still alive.
Check out a copy of the Valgrind trunk from svn://svn.valgrind.org/valgrind/trunk, and build as described in detail in README.android. If you complete that successfully, you’ll have a working installation of Valgrind on the phone at /data/local/Inst/bin/valgrind.
Install busybox on the phone, to make life a little less austere in the shell.
On the Linux host, generate a 1GB swap file and transfer it to /sdcard on the phone (that’s the only place it will fit). Then enable swapping:
Note you’ll have to manually re-enable swapping every time the phone is rebooted.
Copy from the host, the contents of out/target/product/crespo/symbols/system to /sdcard/symbols/system. These are the debuginfo objects for the system libraries. Valgrind expects them to be present, as per comments above, so it can read symbols for libc.so and /system/bin/linker. This will copy far more than that, which is not essential but nice for debugging.
Build a Firefox you want to debug. That of course means with line number info and with the flags –disable-jemalloc –enable-valgrind. I strongly suggest you use “-O -g” for a good compromise between speed and debuggability. When the build finishes, ask the build system to make an .apk file with the debug info in place, and install it. The .apk will be huge, about 125MB:
We’re nearly there. We have a device which is all set up, and a debuggable Firefox on it. But we need to tell Zygote that we want to start Firefox with a wrapper, namely Valgrind. In the shell on the phone, do this:
This tells Zygote that any startup of “org.mozilla.fennec_sewardj” should be done via an exec() of /data/local/start_valgrind_fennec applied to Zygote-specified arguments. So, now we can put any old thing in a shell script, and Zygote will run it. Here’s what I have for /data/local/start_valgrind_fennec:
Obviously you can put any Valgrind params you want in VGPARAMS; you get the general idea. Note that this is ARM, so you don’t need the –smc-check= flag that’s necessary on x86 targets.
Only two more hoops to jump through now. One question is where the Valgrind output should go. Initially I tried using Valgrind’s little-known but very useful –log-socket= parameter (see here for details), but it seemed to crash the phone on a regular basis.
So I abandoned that. By default, Valgrind’s output winds up in the phone’s system log, mixed up with lots of other stuff. In the end I wound up running the following on the host, which works pretty well:
And finally. we need to start Firefox. Now, due to recent changes in how the libraries are packaged for Android, you can’t start it by pressing on the Fennec icon (well, you can, but Valgrind won’t read the debuginfo.) Instead, issue this command in a shell on the phone:
This requests a “debug intent” startup of Firefox, which sidesteps the fancy dynamic unpacking of libraries into ashmem, and instead does the old style thing of unpacking them into /data/data/org.mozilla.fennec_sewardj. From there Valgrind can read debuginfo in the normal way.
One minor last hint: run “top -d 2 -s cpu -m 19”. Because Valgrind runs slowly on the phone, I’m often in the situation of wondering am-I-waiting-for-it or is-it-waiting-for-me? Running top pretty much answers that question.
And. so. it works! It’s slow, but it appears to be stable, and, crucially, the false error rate from Memcheck is low enough to be usable.
So, what’s next? Writing this reminded me what a hassle it is to get all the ducks lined up right. We need to streamline it. Suggestions welcome!.
One thing I’ve been thinking about is to to avoid the need to have debuginfo on the target, by allowing Valgrind to query the host somehow. Another thing I plan to do is make the Callgrind tool work, so we can get profile information too.7 Responses to “Valgrind on Android — Current Status”
I shudder to think how many hours of trial and error it took for you to get this working.
on 28 Sep 2011 at 7:59 am jseward
The most difficult part was getting Memcheck to behave reasonably. My initial run of Firefox on Memcheck yielded 21 million errors, almost all of which were false, and figuring out where they came from and how to get rid of them wasn’t simple.
But yes, true, grappling with the difference between Linux and Android user-space and toolchains was indeed a fiddly time-sink.
We recently got pandaboards, which have more memory and more cpu horsepower. That could help significantly.
on 28 Sep 2011 at 8:02 am jseward
That would help a bit, and I have one on order, but it won’t make the difference between it being too complex to set up and use, vs being usable. What would really make a difference is if we had a pre-build ROM (and kernel) image for the Nexus S, containing all the pieces, and folks could just re-flash their phones and start using this with minimal difficulty.
on 08 Oct 2011 at 11:39 am yohoro
On android,in the JNI mode, some java app call c/c++ libraries, can Valgrind check the c/c++ library’s memory error?
on 10 Oct 2011 at 9:04 am jseward
on 11 Oct 2011 at 6:43 am yohoro
Hi Julian, I want to port the valgrind to my x86-android phone, yes it’s x86-android.
1. In the README.android,there are lines:
# Currently the only supported value is: nexus_s
export HWKIND=nexus_t # Samsung Nexus S
Whether it is possible if I want to support my own special hardware, how should I do?
2. And also, do you know what the “–host” should be if the cpu is x86 not arm in the configure flags:
./configure –prefix=/data/local/Inst \
–host=armv7-unknown-linux –target=armv7-unknown-linux \