[08/17] lavc: Prettify printing of codec tags containing non alphanumeric characters

Message ID 1362578206-2806-8-git-send-email-martin@martin.st
State Superseded
Headers show

Commit Message

Martin Storsjö March 6, 2013, 1:56 p.m.
From: Stefano Sabatini <stefasab@gmail.com>

Make av_get_codec_tag_string() show codec tag string characters in a more
intelligible ways. For example the ascii char "@" is used as a number, so
should be displayed like "[64]" rather than as a printable character.

Apart alphanumeric chars, only the characters ' ' and '.' are used
literally in codec tags, all the other characters represent numbers.

This also avoids relying on locale-dependent character class functions.
---
 libavcodec/utils.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Comments

Luca Barbato March 6, 2013, 2:46 p.m. | #1
On 06/03/13 14:56, Martin Storsjö wrote:
> From: Stefano Sabatini <stefasab@gmail.com>
> 
> Make av_get_codec_tag_string() show codec tag string characters in a more
> intelligible ways. For example the ascii char "@" is used as a number, so
> should be displayed like "[64]" rather than as a printable character.
> 
> Apart alphanumeric chars, only the characters ' ' and '.' are used
> literally in codec tags, all the other characters represent numbers.
> 
> This also avoids relying on locale-dependent character class functions.
> ---
>  libavcodec/utils.c |    7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> index 4148264..9f907d8c 100644
> --- a/libavcodec/utils.c
> +++ b/libavcodec/utils.c
> @@ -1562,9 +1562,14 @@ size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_ta
>  {
>      int i, len, ret = 0;
>  
> +#define IS_PRINT(x)                                               \
> +    (((x) >= '0' && (x) <= '9') ||                                \
> +     ((x) >= 'a' && (x) <= 'z') || ((x) >= 'A' && (x) <= 'Z') ||  \
> +     ((x) == '.' || (x) == ' '))
> +

Call it TAG_PRINT maybe?

lu

Patch

diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 4148264..9f907d8c 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -1562,9 +1562,14 @@  size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_ta
 {
     int i, len, ret = 0;
 
+#define IS_PRINT(x)                                               \
+    (((x) >= '0' && (x) <= '9') ||                                \
+     ((x) >= 'a' && (x) <= 'z') || ((x) >= 'A' && (x) <= 'Z') ||  \
+     ((x) == '.' || (x) == ' '))
+
     for (i = 0; i < 4; i++) {
         len = snprintf(buf, buf_size,
-                       isprint(codec_tag & 0xFF) ? "%c" : "[%d]", codec_tag & 0xFF);
+                       IS_PRINT(codec_tag & 0xFF) ? "%c" : "[%d]", codec_tag & 0xFF);
         buf        += len;
         buf_size    = buf_size > len ? buf_size - len : 0;
         ret        += len;