[FFmpeg-cvslog] r21643 - trunk/libavformat/avidec.c

michael subversion
Fri Feb 5 13:16:59 CET 2010


Author: michael
Date: Fri Feb  5 13:16:59 2010
New Revision: 21643

Log:
Support strn tag in avidec.

Modified:
   trunk/libavformat/avidec.c

Modified: trunk/libavformat/avidec.c
==============================================================================
--- trunk/libavformat/avidec.c	Fri Feb  5 12:50:44 2010	(r21642)
+++ trunk/libavformat/avidec.c	Fri Feb  5 13:16:59 2010	(r21643)
@@ -227,7 +227,7 @@ static void clean_index(AVFormatContext 
     }
 }
 
-static int avi_read_tag(AVFormatContext *s, const char *key, unsigned int size)
+static int avi_read_tag(AVFormatContext *s, AVStream *st, const char *key, unsigned int size)
 {
     ByteIOContext *pb = s->pb;
     char *value;
@@ -239,8 +239,13 @@ static int avi_read_tag(AVFormatContext 
     value = av_malloc(size+1);
     if (!value)
         return -1;
-    get_strz(pb, value, size);
+    get_buffer(pb, value, size);
+    value[size]=0;
 
+    if(st)
+        return av_metadata_set2(&st->metadata, key, value,
+                                    AV_METADATA_DONT_STRDUP_VAL);
+    else
     return av_metadata_set2(&s->metadata, key, value,
                                   AV_METADATA_DONT_STRDUP_VAL);
 }
@@ -602,26 +607,31 @@ static int avi_read_header(AVFormatConte
             url_fseek(pb, size, SEEK_CUR);
             break;
         case MKTAG('I', 'N', 'A', 'M'):
-            avi_read_tag(s, "Title", size);
+            avi_read_tag(s, NULL, "Title", size);
             break;
         case MKTAG('I', 'A', 'R', 'T'):
-            avi_read_tag(s, "Artist", size);
+            avi_read_tag(s, NULL, "Artist", size);
             break;
         case MKTAG('I', 'C', 'O', 'P'):
-            avi_read_tag(s, "Copyright", size);
+            avi_read_tag(s, NULL, "Copyright", size);
             break;
         case MKTAG('I', 'C', 'M', 'T'):
-            avi_read_tag(s, "Comment", size);
+            avi_read_tag(s, NULL, "Comment", size);
             break;
         case MKTAG('I', 'G', 'N', 'R'):
-            avi_read_tag(s, "Genre", size);
+            avi_read_tag(s, NULL, "Genre", size);
             break;
         case MKTAG('I', 'P', 'R', 'D'):
-            avi_read_tag(s, "Album", size);
+            avi_read_tag(s, NULL, "Album", size);
             break;
         case MKTAG('I', 'P', 'R', 'T'):
-            avi_read_tag(s, "Track", size);
+            avi_read_tag(s, NULL, "Track", size);
             break;
+        case MKTAG('s', 't', 'r', 'n'):
+            if(s->nb_streams){
+                avi_read_tag(s, s->streams[s->nb_streams-1], "Title", size);
+                break;
+            }
         default:
             if(size > 1000000){
                 av_log(s, AV_LOG_ERROR, "Something went wrong during header parsing, "



More information about the ffmpeg-cvslog mailing list