libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

test_gstreamer.c (40665B)


      1 /*
      2      This file is part of libextractor.
      3      Copyright (C) 2012 Vidyut Samanta and Christian Grothoff
      4 
      5      libextractor is free software; you can redistribute it and/or modify
      6      it under the terms of the GNU General Public License as published
      7      by the Free Software Foundation; either version 3, or (at your
      8      option) any later version.
      9 
     10      libextractor is distributed in the hope that it will be useful, but
     11      WITHOUT ANY WARRANTY; without even the implied warranty of
     12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13      General Public License for more details.
     14 
     15      You should have received a copy of the GNU General Public License
     16      along with libextractor; see the file COPYING.  If not, write to the
     17      Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     18      Boston, MA 02110-1301, USA.
     19 */
     20 /**
     21  * @file plugins/test_gstreamer.c
     22  * @brief testcase for gstreamer plugin
     23  * @author LRN
     24  */
     25 #include "platform.h"
     26 #include "test_lib.h"
     27 #include <glib.h>
     28 #include <gst/gst.h>
     29 #include <gst/pbutils/pbutils.h>
     30 
     31 
     32 /**
     33  * This is a miniaturized version of gst-discoverer, its only purpose is
     34  * to detect missing plugins situations and skip a test in such cases.
     35  */
     36 static GstDiscovererResult
     37 discoverer_main (GstDiscoverer *dc, const char *filename)
     38 {
     39   GError *err = NULL;
     40   gchar *uri;
     41   gchar *path;
     42   GstDiscovererInfo *info;
     43   GstDiscovererResult result;
     44 
     45   if (! gst_uri_is_valid (filename))
     46   {
     47     if (! g_path_is_absolute (filename))
     48     {
     49       gchar *cur_dir;
     50 
     51       cur_dir = g_get_current_dir ();
     52       path = g_build_filename (cur_dir, filename, NULL);
     53       g_free (cur_dir);
     54     }
     55     else
     56     {
     57       path = g_strdup (filename);
     58     }
     59 
     60     uri = g_filename_to_uri (path, NULL, &err);
     61     g_free (path);
     62     path = NULL;
     63 
     64     if (err)
     65     {
     66       g_warning ("Couldn't convert filename %s to URI: %s\n", filename,
     67                  err->message);
     68       g_error_free (err);
     69       return GST_DISCOVERER_ERROR;
     70     }
     71   }
     72   else
     73   {
     74     uri = g_strdup (filename);
     75   }
     76   info = gst_discoverer_discover_uri (dc, uri, &err);
     77   result = gst_discoverer_info_get_result (info);
     78   switch (result)
     79   {
     80   case GST_DISCOVERER_OK:
     81     break;
     82   case GST_DISCOVERER_URI_INVALID:
     83     g_print ("URI %s is not valid\n", uri);
     84     break;
     85   case GST_DISCOVERER_ERROR:
     86     g_print ("An error was encountered while discovering the file %s\n",
     87              filename);
     88     g_print (" %s\n", err->message);
     89     break;
     90   case GST_DISCOVERER_TIMEOUT:
     91     g_print ("Analyzing URI %s timed out\n", uri);
     92     break;
     93   case GST_DISCOVERER_BUSY:
     94     g_print ("Discoverer was busy\n");
     95     break;
     96   case GST_DISCOVERER_MISSING_PLUGINS:
     97     g_print ("Will skip %s: missing plugins\n", filename);
     98     break;
     99   default:
    100     g_print ("Unexpected result %d\n", result);
    101     break;
    102   }
    103   if (err)
    104     g_error_free (err);
    105   gst_discoverer_info_unref (info);
    106   g_free (uri);
    107 
    108   return result;
    109 }
    110 
    111 
    112 /**
    113  * Main function for the GStreamer testcase.
    114  *
    115  * @param argc number of arguments (ignored)
    116  * @param argv arguments (ignored)
    117  * @return 0 on success
    118  */
    119 int
    120 main (int argc, char *argv[])
    121 {
    122   GError *err = NULL;
    123   GstDiscoverer *dc;
    124   int result = 0;
    125   GstDiscovererResult pre_test;
    126 
    127   gst_init (&argc, &argv);
    128   dc = gst_discoverer_new (10 * GST_SECOND, &err);
    129   if (NULL == dc)
    130   {
    131     g_print ("Error initializing: %s\n", err->message);
    132     return 0;
    133   }
    134   if (NULL != err)
    135     g_error_free (err);
    136 
    137   pre_test = discoverer_main (dc, "testdata/gstreamer_30_and_33.asf");
    138   if (GST_DISCOVERER_MISSING_PLUGINS != pre_test)
    139   {
    140     int test_result;
    141     struct SolutionData thirty_and_thirtythree_sol[] = {
    142       {
    143         EXTRACTOR_METATYPE_DURATION,
    144         EXTRACTOR_METAFORMAT_UTF8,
    145         "text/plain",
    146         "0:00:05.061000000",
    147         strlen ("0:00:05.061000000") + 1,
    148         0
    149       },
    150       {
    151         EXTRACTOR_METATYPE_TRACK_NUMBER,
    152         EXTRACTOR_METAFORMAT_UTF8,
    153         "text/plain",
    154         "21",
    155         strlen ("21") + 1,
    156         0
    157       },
    158       {
    159         EXTRACTOR_METATYPE_ALBUM,
    160         EXTRACTOR_METAFORMAT_UTF8,
    161         "text/plain",
    162         "Zee Album",
    163         strlen ("Zee Album") + 1,
    164         0
    165       },
    166       {
    167         EXTRACTOR_METATYPE_CREATION_TIME,
    168         EXTRACTOR_METAFORMAT_UTF8,
    169         "text/plain",
    170         "9999",
    171         strlen ("9999") + 1,
    172         0
    173       },
    174       {
    175         EXTRACTOR_METATYPE_ARTIST,
    176         EXTRACTOR_METAFORMAT_UTF8,
    177         "text/plain",
    178         "All performed by Nobody",
    179         strlen ("All performed by Nobody") + 1,
    180         0
    181       },
    182       {
    183         EXTRACTOR_METATYPE_ARTIST,
    184         EXTRACTOR_METAFORMAT_UTF8,
    185         "text/plain",
    186         "This Artist Contributed",
    187         strlen ("This Artist Contributed") + 1,
    188         0
    189       },
    190       {
    191         EXTRACTOR_METATYPE_TITLE,
    192         EXTRACTOR_METAFORMAT_UTF8,
    193         "text/plain",
    194         "Some title",
    195         strlen ("Some title") + 1,
    196         0
    197       },
    198       /* Suggest a fix to gst devs; should be a comment, not description */
    199       {
    200         EXTRACTOR_METATYPE_DESCRIPTION,
    201         EXTRACTOR_METAFORMAT_UTF8,
    202         "text/plain",
    203         "A witty comment",
    204         strlen ("A witty comment") + 1,
    205         0
    206       },
    207       {
    208         EXTRACTOR_METATYPE_CONTAINER_FORMAT,
    209         EXTRACTOR_METAFORMAT_UTF8,
    210         "text/plain",
    211         "ASF",
    212         strlen ("ASF") + 1,
    213         0
    214       },
    215       {
    216         EXTRACTOR_METATYPE_AUDIO_CODEC,
    217         EXTRACTOR_METAFORMAT_UTF8,
    218         "text/plain",
    219         "WMA Version 8",
    220         strlen ("WMA Version 8") + 1,
    221         0
    222       },
    223       {
    224         EXTRACTOR_METATYPE_MIMETYPE,
    225         EXTRACTOR_METAFORMAT_UTF8,
    226         "text/plain",
    227         "video/x-ms-asf",
    228         strlen ("video/x-ms-asf") + 1,
    229         0
    230       },
    231       {
    232         EXTRACTOR_METATYPE_MIMETYPE,
    233         EXTRACTOR_METAFORMAT_UTF8,
    234         "text/plain",
    235         "audio/x-wma",
    236         strlen ("audio/x-wma") + 1,
    237         0
    238       },
    239       {
    240         EXTRACTOR_METATYPE_UNKNOWN,
    241         EXTRACTOR_METAFORMAT_UTF8,
    242         "text/plain",
    243         "wmaversion=2",
    244         strlen ("wmaversion=2") + 1,
    245         0
    246       },
    247       {
    248         EXTRACTOR_METATYPE_UNKNOWN,
    249         EXTRACTOR_METAFORMAT_UTF8,
    250         "text/plain",
    251         "bitrate=96024",
    252         strlen ("bitrate=96024") + 1,
    253         0
    254       },
    255       {
    256         EXTRACTOR_METATYPE_UNKNOWN,
    257         EXTRACTOR_METAFORMAT_UTF8,
    258         "text/plain",
    259         "block_align=4459",
    260         strlen ("block_align=4459") + 1,
    261         0
    262       },
    263       {
    264         EXTRACTOR_METATYPE_AUDIO_LANGUAGE,
    265         EXTRACTOR_METAFORMAT_UTF8,
    266         "text/plain",
    267         "en",
    268         strlen ("en") + 1,
    269         0
    270       },
    271       {
    272         EXTRACTOR_METATYPE_CHANNELS,
    273         EXTRACTOR_METAFORMAT_UTF8,
    274         "text/plain",
    275         "2",
    276         strlen ("2") + 1,
    277         0
    278       },
    279       {
    280         EXTRACTOR_METATYPE_SAMPLE_RATE,
    281         EXTRACTOR_METAFORMAT_UTF8,
    282         "text/plain",
    283         "44100",
    284         strlen ("44100") + 1,
    285         0
    286       },
    287       {
    288         EXTRACTOR_METATYPE_AUDIO_DEPTH,
    289         EXTRACTOR_METAFORMAT_UTF8,
    290         "text/plain",
    291         "16",
    292         strlen ("16") + 1,
    293         0
    294       },
    295       { 0, 0, NULL, NULL, 0, -1 }
    296     };
    297     struct ProblemSet ps[] = {
    298       { "testdata/gstreamer_30_and_33.asf", thirty_and_thirtythree_sol },
    299       { NULL, NULL }
    300     };
    301     g_print ("Running asf test on GStreamer:\n");
    302     test_result = (0 == ET_main ("gstreamer", ps) ? 0 : 1);
    303     g_print ("asf GStreamer test result: %s\n", test_result == 0 ? "OK" :
    304              "FAILED");
    305     result += test_result;
    306   }
    307 
    308   pre_test = discoverer_main (dc, "testdata/gstreamer_barsandtone.flv");
    309   if (pre_test != GST_DISCOVERER_MISSING_PLUGINS)
    310   {
    311     int test_result;
    312     struct SolutionData barsandtone_sol[] = {
    313       {
    314         EXTRACTOR_METATYPE_DURATION,
    315         EXTRACTOR_METAFORMAT_UTF8,
    316         "text/plain",
    317         "0:00:06.060000000",
    318         strlen ("0:00:06.060000000") + 1,
    319         0
    320       },
    321       {
    322         EXTRACTOR_METATYPE_MIMETYPE,
    323         EXTRACTOR_METAFORMAT_UTF8,
    324         "text/plain",
    325         "video/x-flv",
    326         strlen ("video/x-flv") + 1,
    327         0
    328       },
    329       {
    330         EXTRACTOR_METATYPE_MIMETYPE,
    331         EXTRACTOR_METAFORMAT_UTF8,
    332         "text/plain",
    333         "video/x-vp6-flash",
    334         strlen ("video/x-vp6-flash") + 1,
    335         0
    336       },
    337       {
    338         EXTRACTOR_METATYPE_VIDEO_DURATION,
    339         EXTRACTOR_METAFORMAT_UTF8,
    340         "text/plain",
    341         "0:00:06.000000000",
    342         strlen ("0:00:06.000000000") + 1,
    343         0
    344       },
    345       {
    346         EXTRACTOR_METATYPE_AUDIO_CODEC,
    347         EXTRACTOR_METAFORMAT_UTF8,
    348         "text/plain",
    349         "MPEG-1 Layer 3 (MP3)",
    350         strlen ("MPEG-1 Layer 3 (MP3)") + 1,
    351         0
    352       },
    353       {
    354         EXTRACTOR_METATYPE_VIDEO_CODEC,
    355         EXTRACTOR_METAFORMAT_UTF8,
    356         "text/plain",
    357         "On2 VP6/Flash",
    358         strlen ("On2 VP6/Flash") + 1,
    359         0
    360       },
    361       {
    362         EXTRACTOR_METATYPE_VIDEO_DIMENSIONS,
    363         EXTRACTOR_METAFORMAT_UTF8,
    364         "text/plain",
    365         "368x288",
    366         strlen ("368x288") + 1,
    367         0
    368       },
    369       {
    370         EXTRACTOR_METATYPE_FRAME_RATE,
    371         EXTRACTOR_METAFORMAT_UTF8,
    372         "text/plain",
    373         "10/1",
    374         strlen ("10/1") + 1,
    375         0
    376       },
    377       {
    378         EXTRACTOR_METATYPE_PIXEL_ASPECT_RATIO,
    379         EXTRACTOR_METAFORMAT_UTF8,
    380         "text/plain",
    381         "1/1",
    382         strlen ("1/1") + 1,
    383         0
    384       },
    385       {
    386         EXTRACTOR_METATYPE_MIMETYPE,
    387         EXTRACTOR_METAFORMAT_UTF8,
    388         "text/plain",
    389         "audio/mpeg",
    390         strlen ("audio/mpeg") + 1,
    391         0
    392       },
    393       {
    394         EXTRACTOR_METATYPE_UNKNOWN,
    395         EXTRACTOR_METAFORMAT_UTF8,
    396         "text/plain",
    397         "mpegversion=1",
    398         strlen ("mpegversion=1") + 1,
    399         0
    400       },
    401       {
    402         EXTRACTOR_METATYPE_UNKNOWN,
    403         EXTRACTOR_METAFORMAT_UTF8,
    404         "text/plain",
    405         "mpegaudioversion=1",
    406         strlen ("mpegaudioversion=1") + 1,
    407         0
    408       },
    409       {
    410         EXTRACTOR_METATYPE_UNKNOWN,
    411         EXTRACTOR_METAFORMAT_UTF8,
    412         "text/plain",
    413         "layer=3",
    414         strlen ("layer=3") + 1,
    415         0
    416       },
    417       {
    418         EXTRACTOR_METATYPE_UNKNOWN,
    419         EXTRACTOR_METAFORMAT_UTF8,
    420         "text/plain",
    421         "parsed=true",
    422         strlen ("parsed=true") + 1,
    423         0
    424       },
    425       {
    426         EXTRACTOR_METATYPE_AUDIO_DURATION,
    427         EXTRACTOR_METAFORMAT_UTF8,
    428         "text/plain",
    429         "0:00:06.000000000",
    430         strlen ("0:00:06.000000000") + 1,
    431         0
    432       },
    433       /* Yes, again. This seems to be a bug/feature of the element that
    434        * gives us these streams; this doesn't happen when discovering
    435        * Matroska files, for example. Or maybe file itself is made that way.
    436        */
    437       {
    438         EXTRACTOR_METATYPE_AUDIO_CODEC,
    439         EXTRACTOR_METAFORMAT_UTF8,
    440         "text/plain",
    441         "MPEG-1 Layer 3 (MP3)",
    442         strlen ("MPEG-1 Layer 3 (MP3)") + 1,
    443         0
    444       },
    445       {
    446         EXTRACTOR_METATYPE_VIDEO_CODEC,
    447         EXTRACTOR_METAFORMAT_UTF8,
    448         "text/plain",
    449         "On2 VP6/Flash",
    450         strlen ("On2 VP6/Flash") + 1,
    451         0
    452       },
    453       {
    454         EXTRACTOR_METATYPE_UNKNOWN,
    455         EXTRACTOR_METAFORMAT_UTF8,
    456         "text/plain",
    457         "has-crc=false",
    458         strlen ("has-crc=false") + 1,
    459         0
    460       },
    461       {
    462         EXTRACTOR_METATYPE_UNKNOWN,
    463         EXTRACTOR_METAFORMAT_UTF8,
    464         "text/plain",
    465         "channel-mode=joint-stereo",
    466         strlen ("channel-mode=joint-stereo") + 1,
    467         0
    468       },
    469       {
    470         EXTRACTOR_METATYPE_CHANNELS,
    471         EXTRACTOR_METAFORMAT_UTF8,
    472         "text/plain",
    473         "2",
    474         strlen ("2") + 1,
    475         0
    476       },
    477       {
    478         EXTRACTOR_METATYPE_SAMPLE_RATE,
    479         EXTRACTOR_METAFORMAT_UTF8,
    480         "text/plain",
    481         "44100",
    482         strlen ("44100") + 1,
    483         0
    484       },
    485       {
    486         EXTRACTOR_METATYPE_AUDIO_BITRATE,
    487         EXTRACTOR_METAFORMAT_UTF8,
    488         "text/plain",
    489         "96000",
    490         strlen ("96000") + 1,
    491         0
    492       },
    493       { 0, 0, NULL, NULL, 0, -1 }
    494     };
    495     struct ProblemSet ps[] = {
    496       { "testdata/gstreamer_barsandtone.flv", barsandtone_sol },
    497       { NULL, NULL }
    498     };
    499     g_print ("Running flv test on GStreamer:\n");
    500     test_result = (0 == ET_main ("gstreamer", ps) ? 0 : 1);
    501     g_print ("flv GStreamer test result: %s\n", test_result == 0 ? "OK" :
    502              "FAILED");
    503     result += test_result;
    504   }
    505   pre_test = discoverer_main (dc, "testdata/gstreamer_sample_sorenson.mov");
    506   if (pre_test != GST_DISCOVERER_MISSING_PLUGINS)
    507   {
    508     int test_result;
    509     struct SolutionData sample_sorenson_sol[] = {
    510       {
    511         EXTRACTOR_METATYPE_DURATION,
    512         EXTRACTOR_METAFORMAT_UTF8,
    513         "text/plain",
    514         "0:00:05.000000000",
    515         strlen ("0:00:05.000000000") + 1,
    516         0
    517       },
    518       {
    519         EXTRACTOR_METATYPE_MIMETYPE,
    520         EXTRACTOR_METAFORMAT_UTF8,
    521         "text/plain",
    522         "video/quicktime",
    523         strlen ("video/quicktime") + 1,
    524         0
    525       },
    526       {
    527         EXTRACTOR_METATYPE_MIMETYPE,
    528         EXTRACTOR_METAFORMAT_UTF8,
    529         "text/plain",
    530         "audio/x-qdm2",
    531         strlen ("audio/x-qdm2") + 1,
    532         0
    533       },
    534       {
    535         EXTRACTOR_METATYPE_UNKNOWN,
    536         EXTRACTOR_METAFORMAT_UTF8,
    537         "text/plain",
    538         "samplesize=16",
    539         strlen ("samplesize=16") + 1,
    540         0
    541       },
    542       {
    543         EXTRACTOR_METATYPE_AUDIO_CODEC,
    544         EXTRACTOR_METAFORMAT_UTF8,
    545         "text/plain",
    546         "QDesign Music v.2",
    547         strlen ("QDesign Music v.2") + 1,
    548         0
    549       },
    550       {
    551         EXTRACTOR_METATYPE_CREATION_TIME,
    552         EXTRACTOR_METAFORMAT_UTF8,
    553         "text/plain",
    554         "2001-02-19T16:45:54Z",
    555         strlen ("2001-02-19T16:45:54Z") + 1,
    556         0
    557       },
    558       {
    559         EXTRACTOR_METATYPE_TITLE,
    560         EXTRACTOR_METAFORMAT_UTF8,
    561         "text/plain",
    562         "QuickTime Sample Movie",
    563         strlen ("QuickTime Sample Movie") + 1,
    564         0
    565       },
    566       {
    567         EXTRACTOR_METATYPE_COPYRIGHT,
    568         EXTRACTOR_METAFORMAT_UTF8,
    569         "text/plain",
    570         "© Apple Computer, Inc. 2001",
    571         strlen ("© Apple Computer, Inc. 2001") + 1,
    572         0
    573       },
    574       {
    575         EXTRACTOR_METATYPE_CONTAINER_FORMAT,
    576         EXTRACTOR_METAFORMAT_UTF8,
    577         "text/plain",
    578         "ISO MP4/M4A",
    579         strlen ("ISO MP4/M4A") + 1,
    580         0
    581       },
    582       {
    583         EXTRACTOR_METATYPE_AUDIO_LANGUAGE,
    584         EXTRACTOR_METAFORMAT_UTF8,
    585         "text/plain",
    586         "en",
    587         strlen ("en") + 1,
    588         0
    589       },
    590       {
    591         EXTRACTOR_METATYPE_CHANNELS,
    592         EXTRACTOR_METAFORMAT_UTF8,
    593         "text/plain",
    594         "2",
    595         strlen ("2") + 1,
    596         0
    597       },
    598       {
    599         EXTRACTOR_METATYPE_SAMPLE_RATE,
    600         EXTRACTOR_METAFORMAT_UTF8,
    601         "text/plain",
    602         "22050",
    603         strlen ("22050") + 1,
    604         0
    605       },
    606       {
    607         EXTRACTOR_METATYPE_MIMETYPE,
    608         EXTRACTOR_METAFORMAT_UTF8,
    609         "text/plain",
    610         "video/x-svq",
    611         strlen ("video/x-svq") + 1,
    612         0
    613       },
    614       {
    615         EXTRACTOR_METATYPE_UNKNOWN,
    616         EXTRACTOR_METAFORMAT_UTF8,
    617         "text/plain",
    618         "svqversion=1",
    619         strlen ("svqversion=1") + 1,
    620         0
    621       },
    622       /* Yep, again... */
    623       {
    624         EXTRACTOR_METATYPE_CREATION_TIME,
    625         EXTRACTOR_METAFORMAT_UTF8,
    626         "text/plain",
    627         "2001-02-19T16:45:54Z",
    628         strlen ("2001-02-19T16:45:54Z") + 1,
    629         0
    630       },
    631       {
    632         EXTRACTOR_METATYPE_TITLE,
    633         EXTRACTOR_METAFORMAT_UTF8,
    634         "text/plain",
    635         "QuickTime Sample Movie",
    636         strlen ("QuickTime Sample Movie") + 1,
    637         0
    638       },
    639       {
    640         EXTRACTOR_METATYPE_COPYRIGHT,
    641         EXTRACTOR_METAFORMAT_UTF8,
    642         "text/plain",
    643         "© Apple Computer, Inc. 2001",
    644         strlen ("© Apple Computer, Inc. 2001") + 1,
    645         0
    646       },
    647       {
    648         EXTRACTOR_METATYPE_CONTAINER_FORMAT,
    649         EXTRACTOR_METAFORMAT_UTF8,
    650         "text/plain",
    651         "ISO MP4/M4A",
    652         strlen ("ISO MP4/M4A") + 1,
    653         0
    654       },
    655       {
    656         EXTRACTOR_METATYPE_VIDEO_CODEC,
    657         EXTRACTOR_METAFORMAT_UTF8,
    658         "text/plain",
    659         "Sorensen video v.1",
    660         strlen ("Sorensen video v.1") + 1,
    661         0
    662       },
    663       {
    664         EXTRACTOR_METATYPE_VIDEO_LANGUAGE,
    665         EXTRACTOR_METAFORMAT_UTF8,
    666         "text/plain",
    667         "en",
    668         strlen ("en") + 1,
    669         0
    670       },
    671       {
    672         EXTRACTOR_METATYPE_VIDEO_DIMENSIONS,
    673         EXTRACTOR_METAFORMAT_UTF8,
    674         "text/plain",
    675         "190x240",
    676         strlen ("190x240") + 1,
    677         0
    678       },
    679       {
    680         EXTRACTOR_METATYPE_FRAME_RATE,
    681         EXTRACTOR_METAFORMAT_UTF8,
    682         "text/plain",
    683         "12/1",
    684         strlen ("12/1") + 1,
    685         0
    686       },
    687       {
    688         EXTRACTOR_METATYPE_PIXEL_ASPECT_RATIO,
    689         EXTRACTOR_METAFORMAT_UTF8,
    690         "text/plain",
    691         "1/1",
    692         strlen ("1/1") + 1,
    693         0
    694       },
    695       { 0, 0, NULL, NULL, 0, -1 }
    696     };
    697     struct ProblemSet ps[] = {
    698       { "testdata/gstreamer_sample_sorenson.mov", sample_sorenson_sol },
    699       { NULL, NULL }
    700     };
    701     g_print ("Running mov test on GStreamer:\n");
    702     test_result = (0 == ET_main ("gstreamer", ps) ? 0 : 1);
    703     g_print ("mov GStreamer test result: %s\n", test_result == 0 ? "OK" :
    704              "FAILED");
    705     result += test_result;
    706   }
    707 
    708   pre_test = discoverer_main (dc, "testdata/matroska_flame.mkv");
    709   if (pre_test != GST_DISCOVERER_MISSING_PLUGINS)
    710   {
    711     int result_stock;
    712     int result_patched;
    713     struct SolutionData matroska_flame_stock_sol[] = {
    714       {
    715         EXTRACTOR_METATYPE_DURATION,
    716         EXTRACTOR_METAFORMAT_UTF8,
    717         "text/plain",
    718         "0:00:03.143000000",
    719         strlen ("0:00:03.143000000") + 1,
    720         0
    721       },
    722       {
    723         EXTRACTOR_METATYPE_MIMETYPE,
    724         EXTRACTOR_METAFORMAT_UTF8,
    725         "text/plain",
    726         "video/x-matroska",
    727         strlen ("video/x-matroska") + 1,
    728         0
    729       },
    730       {
    731         EXTRACTOR_METATYPE_MIMETYPE,
    732         EXTRACTOR_METAFORMAT_UTF8,
    733         "text/plain",
    734         "video/x-indeo",
    735         strlen ("video/x-indeo") + 1,
    736         0
    737       },
    738       {
    739         EXTRACTOR_METATYPE_UNKNOWN,
    740         EXTRACTOR_METAFORMAT_UTF8,
    741         "text/plain",
    742         "indeoversion=4",
    743         strlen ("indeoversion=4") + 1,
    744         0
    745       },
    746       {
    747         EXTRACTOR_METATYPE_TITLE,
    748         EXTRACTOR_METAFORMAT_UTF8,
    749         "text/plain",
    750         "filesegmenttitle",
    751         strlen ("filesegmenttitle") + 1,
    752         0
    753       },
    754       {
    755         EXTRACTOR_METATYPE_TITLE,
    756         EXTRACTOR_METAFORMAT_UTF8,
    757         "text/plain",
    758         "TITLE",
    759         strlen ("TITLE") + 1,
    760         0
    761       },
    762       {
    763         EXTRACTOR_METATYPE_ARTIST,
    764         EXTRACTOR_METAFORMAT_UTF8,
    765         "text/plain",
    766         "ALBUM/ARTIST",
    767         strlen ("ALBUM/ARTIST") + 1,
    768         0
    769       },
    770       {
    771         EXTRACTOR_METATYPE_ARTIST,
    772         EXTRACTOR_METAFORMAT_UTF8,
    773         "text/plain",
    774         "ARTIST",
    775         strlen ("ARTIST") + 1,
    776         0
    777       },
    778       {
    779         EXTRACTOR_METATYPE_COPYRIGHT,
    780         EXTRACTOR_METAFORMAT_UTF8,
    781         "text/plain",
    782         "COPYRIGHT",
    783         strlen ("COPYRIGHT") + 1,
    784         0
    785       },
    786       {
    787         EXTRACTOR_METATYPE_COMPOSER,
    788         EXTRACTOR_METAFORMAT_UTF8,
    789         "text/plain",
    790         "COMPOSER",
    791         strlen ("COMPOSER") + 1,
    792         0
    793       },
    794       {
    795         EXTRACTOR_METATYPE_GENRE,
    796         EXTRACTOR_METAFORMAT_UTF8,
    797         "text/plain",
    798         "GENRE",
    799         strlen ("GENRE") + 1,
    800         0
    801       },
    802       {
    803         EXTRACTOR_METATYPE_ENCODER,
    804         EXTRACTOR_METAFORMAT_UTF8,
    805         "text/plain",
    806         "ENCODER",
    807         strlen ("ENCODER") + 1,
    808         0
    809       },
    810       {
    811         EXTRACTOR_METATYPE_ISRC,
    812         EXTRACTOR_METAFORMAT_UTF8,
    813         "text/plain",
    814         "ISRC",
    815         strlen ("ISRC") + 1,
    816         0
    817       },
    818       {
    819         EXTRACTOR_METATYPE_CONTAINER_FORMAT,
    820         EXTRACTOR_METAFORMAT_UTF8,
    821         "text/plain",
    822         "Matroska",
    823         strlen ("Matroska") + 1,
    824         0
    825       },
    826       {
    827         EXTRACTOR_METATYPE_VIDEO_CODEC,
    828         EXTRACTOR_METAFORMAT_UTF8,
    829         "text/plain",
    830         "Intel Video 4",
    831         strlen ("Intel Video 4") + 1,
    832         0
    833       },
    834       {
    835         EXTRACTOR_METATYPE_VIDEO_LANGUAGE,
    836         EXTRACTOR_METAFORMAT_UTF8,
    837         "text/plain",
    838         "it",
    839         strlen ("it") + 1,
    840         0
    841       },
    842       {
    843         EXTRACTOR_METATYPE_VIDEO_DIMENSIONS,
    844         EXTRACTOR_METAFORMAT_UTF8,
    845         "text/plain",
    846         "256x240",
    847         strlen ("256x240") + 1,
    848         0
    849       },
    850       {
    851         EXTRACTOR_METATYPE_FRAME_RATE,
    852         EXTRACTOR_METAFORMAT_UTF8,
    853         "text/plain",
    854         "35/1",
    855         strlen ("35/1") + 1,
    856         0
    857       },
    858       {
    859         EXTRACTOR_METATYPE_PIXEL_ASPECT_RATIO,
    860         EXTRACTOR_METAFORMAT_UTF8,
    861         "text/plain",
    862         "1/1",
    863         strlen ("1/1") + 1,
    864         0
    865       },
    866       { 0, 0, NULL, NULL, 0, -1 }
    867     };
    868     struct ProblemSet stock_ps[] = {
    869       { "testdata/matroska_flame.mkv", matroska_flame_stock_sol },
    870       { NULL, NULL }
    871     };
    872 
    873 
    874     struct SolutionData matroska_flame_patched_sol[] = {
    875       {
    876         EXTRACTOR_METATYPE_DURATION,
    877         EXTRACTOR_METAFORMAT_UTF8,
    878         "text/plain",
    879         "0:00:03.143000000",
    880         strlen ("0:00:03.143000000") + 1,
    881         0
    882       },
    883       {
    884         EXTRACTOR_METATYPE_MIMETYPE,
    885         EXTRACTOR_METAFORMAT_UTF8,
    886         "text/plain",
    887         "video/x-matroska",
    888         strlen ("video/x-matroska") + 1,
    889         0
    890       },
    891       {
    892         EXTRACTOR_METATYPE_MIMETYPE,
    893         EXTRACTOR_METAFORMAT_UTF8,
    894         "text/plain",
    895         "video/x-indeo",
    896         strlen ("video/x-indeo") + 1,
    897         0
    898       },
    899       {
    900         EXTRACTOR_METATYPE_UNKNOWN,
    901         EXTRACTOR_METAFORMAT_UTF8,
    902         "text/plain",
    903         "indeoversion=4",
    904         strlen ("indeoversion=4") + 1,
    905         0
    906       },
    907       {
    908         EXTRACTOR_METATYPE_TITLE,
    909         EXTRACTOR_METAFORMAT_UTF8,
    910         "text/plain",
    911         "filesegmenttitle",
    912         strlen ("filesegmenttitle") + 1,
    913         0
    914       },
    915       {
    916         EXTRACTOR_METATYPE_ALBUM,
    917         EXTRACTOR_METAFORMAT_UTF8,
    918         "text/plain",
    919         "ALBUM/TITLE",
    920         strlen ("ALBUM/TITLE") + 1,
    921         0
    922       },
    923       {
    924         EXTRACTOR_METATYPE_TITLE,
    925         EXTRACTOR_METAFORMAT_UTF8,
    926         "text/plain",
    927         "TITLE",
    928         strlen ("TITLE") + 1,
    929         0
    930       },
    931       {
    932         EXTRACTOR_METATYPE_TITLE,
    933         EXTRACTOR_METAFORMAT_UTF8,
    934         "text/plain",
    935         "SUBTITLE",
    936         strlen ("SUBTITLE") + 1,
    937         0
    938       },
    939       {
    940         EXTRACTOR_METATYPE_TITLE,
    941         EXTRACTOR_METAFORMAT_UTF8,
    942         "text/plain",
    943         "VIDEO/TITLE",
    944         strlen ("VIDEO/TITLE") + 1,
    945         0
    946       },
    947       {
    948         EXTRACTOR_METATYPE_ARTIST,
    949         EXTRACTOR_METAFORMAT_UTF8,
    950         "text/plain",
    951         "ALBUM/ARTIST",
    952         strlen ("ALBUM/ARTIST") + 1,
    953         0
    954       },
    955       {
    956         EXTRACTOR_METATYPE_ARTIST,
    957         EXTRACTOR_METAFORMAT_UTF8,
    958         "text/plain",
    959         "ARTIST",
    960         strlen ("ARTIST") + 1,
    961         0
    962       },
    963       {
    964         EXTRACTOR_METATYPE_SONG_COUNT,
    965         EXTRACTOR_METAFORMAT_UTF8,
    966         "text/plain",
    967         "20",
    968         strlen ("20") + 1,
    969         0
    970       },
    971       {
    972         EXTRACTOR_METATYPE_UNKNOWN,
    973         EXTRACTOR_METAFORMAT_UTF8,
    974         "text/plain",
    975         "PART_OFFSET=5",
    976         strlen ("PART_OFFSET=5") + 1,
    977         0
    978       },
    979       {
    980         EXTRACTOR_METATYPE_UNKNOWN,
    981         EXTRACTOR_METAFORMAT_UTF8,
    982         "text/plain",
    983         "ARTIST/INSTRUMENTS=ARTIST/INSTRUMENTS",
    984         strlen ("ARTIST/INSTRUMENTS=ARTIST/INSTRUMENTS") + 1,
    985         0
    986       },
    987       {
    988         EXTRACTOR_METATYPE_UNKNOWN,
    989         EXTRACTOR_METAFORMAT_UTF8,
    990         "text/plain",
    991         "LEAD_PERFORMER=LEAD_PERFORMER",
    992         strlen ("LEAD_PERFORMER=LEAD_PERFORMER") + 1,
    993         0
    994       },
    995       {
    996         EXTRACTOR_METATYPE_UNKNOWN,
    997         EXTRACTOR_METAFORMAT_UTF8,
    998         "text/plain",
    999         "ARRANGER=ARRANGER",
   1000         strlen ("ARRANGER=ARRANGER") + 1,
   1001         0
   1002       },
   1003       {
   1004         EXTRACTOR_METATYPE_UNKNOWN,
   1005         EXTRACTOR_METAFORMAT_UTF8,
   1006         "text/plain",
   1007         "LYRICIST=LYRICIST",
   1008         strlen ("LYRICIST=LYRICIST") + 1,
   1009         0
   1010       },
   1011       {
   1012         EXTRACTOR_METATYPE_MOVIE_DIRECTOR,
   1013         EXTRACTOR_METAFORMAT_UTF8,
   1014         "text/plain",
   1015         "DIRECTOR",
   1016         strlen ("DIRECTOR") + 1,
   1017         0
   1018       },
   1019       {
   1020         EXTRACTOR_METATYPE_UNKNOWN,
   1021         EXTRACTOR_METAFORMAT_UTF8,
   1022         "text/plain",
   1023         "ASSISTANT_DIRECTOR=ASSISTANT_DIRECTOR",
   1024         strlen ("ASSISTANT_DIRECTOR=ASSISTANT_DIRECTOR") + 1,
   1025         0
   1026       },
   1027       {
   1028         EXTRACTOR_METATYPE_UNKNOWN,
   1029         EXTRACTOR_METAFORMAT_UTF8,
   1030         "text/plain",
   1031         "DIRECTOR_OF_PHOTOGRAPHY=DIRECTOR_OF_PHOTOGRAPHY",
   1032         strlen ("DIRECTOR_OF_PHOTOGRAPHY=DIRECTOR_OF_PHOTOGRAPHY") + 1,
   1033         0
   1034       },
   1035       {
   1036         EXTRACTOR_METATYPE_UNKNOWN,
   1037         EXTRACTOR_METAFORMAT_UTF8,
   1038         "text/plain",
   1039         "SOUND_ENGINEER=SOUND_ENGINEER",
   1040         strlen ("SOUND_ENGINEER=SOUND_ENGINEER") + 1,
   1041         0
   1042       },
   1043       {
   1044         EXTRACTOR_METATYPE_UNKNOWN,
   1045         EXTRACTOR_METAFORMAT_UTF8,
   1046         "text/plain",
   1047         "ART_DIRECTOR=ART_DIRECTOR",
   1048         strlen ("ART_DIRECTOR=ART_DIRECTOR") + 1,
   1049         0
   1050       },
   1051       {
   1052         EXTRACTOR_METATYPE_UNKNOWN,
   1053         EXTRACTOR_METAFORMAT_UTF8,
   1054         "text/plain",
   1055         "PRODUCTION_DESIGNER=PRODUCTION_DESIGNER",
   1056         strlen ("PRODUCTION_DESIGNER=PRODUCTION_DESIGNER") + 1,
   1057         0
   1058       },
   1059       {
   1060         EXTRACTOR_METATYPE_UNKNOWN,
   1061         EXTRACTOR_METAFORMAT_UTF8,
   1062         "text/plain",
   1063         "CHOREGRAPHER=CHOREGRAPHER",
   1064         strlen ("CHOREGRAPHER=CHOREGRAPHER") + 1,
   1065         0
   1066       },
   1067       {
   1068         EXTRACTOR_METATYPE_UNKNOWN,
   1069         EXTRACTOR_METAFORMAT_UTF8,
   1070         "text/plain",
   1071         "COSTUME_DESIGNER=COSTUME_DESIGNER",
   1072         strlen ("COSTUME_DESIGNER=COSTUME_DESIGNER") + 1,
   1073         0
   1074       },
   1075       {
   1076         EXTRACTOR_METATYPE_UNKNOWN,
   1077         EXTRACTOR_METAFORMAT_UTF8,
   1078         "text/plain",
   1079         "ACTOR=ACTOR",
   1080         strlen ("ACTOR=ACTOR") + 1,
   1081         0
   1082       },
   1083       {
   1084         EXTRACTOR_METATYPE_UNKNOWN,
   1085         EXTRACTOR_METAFORMAT_UTF8,
   1086         "text/plain",
   1087         "CHARACTER=CHARACTER",
   1088         strlen ("CHARACTER=CHARACTER") + 1,
   1089         0
   1090       },
   1091       {
   1092         EXTRACTOR_METATYPE_WRITER,
   1093         EXTRACTOR_METAFORMAT_UTF8,
   1094         "text/plain",
   1095         "WRITTEN_BY",
   1096         strlen ("WRITTEN_BY") + 1,
   1097         0
   1098       },
   1099       {
   1100         EXTRACTOR_METATYPE_UNKNOWN,
   1101         EXTRACTOR_METAFORMAT_UTF8,
   1102         "text/plain",
   1103         "SCREENPLAY_BY=SCREENPLAY_BY",
   1104         strlen ("SCREENPLAY_BY=SCREENPLAY_BY") + 1,
   1105         0
   1106       },
   1107       {
   1108         EXTRACTOR_METATYPE_UNKNOWN,
   1109         EXTRACTOR_METAFORMAT_UTF8,
   1110         "text/plain",
   1111         "EDITED_BY=EDITED_BY",
   1112         strlen ("EDITED_BY=EDITED_BY") + 1,
   1113         0
   1114       },
   1115       {
   1116         EXTRACTOR_METATYPE_PRODUCER,
   1117         EXTRACTOR_METAFORMAT_UTF8,
   1118         "text/plain",
   1119         "PRODUCER",
   1120         strlen ("PRODUCER") + 1,
   1121         0
   1122       },
   1123       {
   1124         EXTRACTOR_METATYPE_UNKNOWN,
   1125         EXTRACTOR_METAFORMAT_UTF8,
   1126         "text/plain",
   1127         "COPRODUCER=COPRODUCER",
   1128         strlen ("COPRODUCER=COPRODUCER") + 1,
   1129         0
   1130       },
   1131       {
   1132         EXTRACTOR_METATYPE_UNKNOWN,
   1133         EXTRACTOR_METAFORMAT_UTF8,
   1134         "text/plain",
   1135         "EXECUTIVE_PRODUCER=EXECUTIVE_PRODUCER",
   1136         strlen ("EXECUTIVE_PRODUCER=EXECUTIVE_PRODUCER") + 1,
   1137         0
   1138       },
   1139       {
   1140         EXTRACTOR_METATYPE_UNKNOWN,
   1141         EXTRACTOR_METAFORMAT_UTF8,
   1142         "text/plain",
   1143         "DISTRIBUTED_BY=DISTRIBUTED_BY",
   1144         strlen ("DISTRIBUTED_BY=DISTRIBUTED_BY") + 1,
   1145         0
   1146       },
   1147       {
   1148         EXTRACTOR_METATYPE_UNKNOWN,
   1149         EXTRACTOR_METAFORMAT_UTF8,
   1150         "text/plain",
   1151         "MASTERED_BY=MASTERED_BY",
   1152         strlen ("MASTERED_BY=MASTERED_BY") + 1,
   1153         0
   1154       },
   1155       {
   1156         EXTRACTOR_METATYPE_UNKNOWN,
   1157         EXTRACTOR_METAFORMAT_UTF8,
   1158         "text/plain",
   1159         "MIXED_BY=MIXED_BY",
   1160         strlen ("MIXED_BY=MIXED_BY") + 1,
   1161         0
   1162       },
   1163       {
   1164         EXTRACTOR_METATYPE_UNKNOWN,
   1165         EXTRACTOR_METAFORMAT_UTF8,
   1166         "text/plain",
   1167         "REMIXED_BY=REMIXED_BY",
   1168         strlen ("REMIXED_BY=REMIXED_BY") + 1,
   1169         0
   1170       },
   1171       {
   1172         EXTRACTOR_METATYPE_UNKNOWN,
   1173         EXTRACTOR_METAFORMAT_UTF8,
   1174         "text/plain",
   1175         "PRODUCTION_STUDIO=PRODUCTION_STUDIO",
   1176         strlen ("PRODUCTION_STUDIO=PRODUCTION_STUDIO") + 1,
   1177         0
   1178       },
   1179       {
   1180         EXTRACTOR_METATYPE_UNKNOWN,
   1181         EXTRACTOR_METAFORMAT_UTF8,
   1182         "text/plain",
   1183         "THANKS_TO=THANKS_TO",
   1184         strlen ("THANKS_TO=THANKS_TO") + 1,
   1185         0
   1186       },
   1187       {
   1188         EXTRACTOR_METATYPE_PUBLISHER,
   1189         EXTRACTOR_METAFORMAT_UTF8,
   1190         "text/plain",
   1191         "PUBLISHER",
   1192         strlen ("PUBLISHER") + 1,
   1193         0
   1194       },
   1195       {
   1196         EXTRACTOR_METATYPE_UNKNOWN,
   1197         EXTRACTOR_METAFORMAT_UTF8,
   1198         "text/plain",
   1199         "LABEL=LABEL",
   1200         strlen ("LABEL=LABEL") + 1,
   1201         0
   1202       },
   1203       {
   1204         EXTRACTOR_METATYPE_MOOD,
   1205         EXTRACTOR_METAFORMAT_UTF8,
   1206         "text/plain",
   1207         "MOOD",
   1208         strlen ("MOOD") + 1,
   1209         0
   1210       },
   1211       {
   1212         EXTRACTOR_METATYPE_UNKNOWN,
   1213         EXTRACTOR_METAFORMAT_UTF8,
   1214         "text/plain",
   1215         "ORIGINAL_MEDIA_TYPE=ORIGINAL_MEDIA_TYPE",
   1216         strlen ("ORIGINAL_MEDIA_TYPE=ORIGINAL_MEDIA_TYPE") + 1,
   1217         0
   1218       },
   1219       {
   1220         EXTRACTOR_METATYPE_UNKNOWN,
   1221         EXTRACTOR_METAFORMAT_UTF8,
   1222         "text/plain",
   1223         "CONTENT_TYPE=CONTENT_TYPE",
   1224         strlen ("CONTENT_TYPE=CONTENT_TYPE") + 1,
   1225         0
   1226       },
   1227       {
   1228         EXTRACTOR_METATYPE_SUBJECT,
   1229         EXTRACTOR_METAFORMAT_UTF8,
   1230         "text/plain",
   1231         "SUBJECT",
   1232         strlen ("SUBJECT") + 1,
   1233         0
   1234       },
   1235       {
   1236         EXTRACTOR_METATYPE_SUMMARY,
   1237         EXTRACTOR_METAFORMAT_UTF8,
   1238         "text/plain",
   1239         "SUMMARY",
   1240         strlen ("SUMMARY") + 1,
   1241         0
   1242       },
   1243       {
   1244         EXTRACTOR_METATYPE_UNKNOWN,
   1245         EXTRACTOR_METAFORMAT_UTF8,
   1246         "text/plain",
   1247         "SYNOPSIS=SYNOPSIS",
   1248         strlen ("SYNOPSIS=SYNOPSIS") + 1,
   1249         0
   1250       },
   1251       {
   1252         EXTRACTOR_METATYPE_UNKNOWN,
   1253         EXTRACTOR_METAFORMAT_UTF8,
   1254         "text/plain",
   1255         "INITIAL_KEY=INITIAL_KEY",
   1256         strlen ("INITIAL_KEY=INITIAL_KEY") + 1,
   1257         0
   1258       },
   1259       {
   1260         EXTRACTOR_METATYPE_UNKNOWN,
   1261         EXTRACTOR_METAFORMAT_UTF8,
   1262         "text/plain",
   1263         "PERIOD=PERIOD",
   1264         strlen ("PERIOD=PERIOD") + 1,
   1265         0
   1266       },
   1267       {
   1268         EXTRACTOR_METATYPE_UNKNOWN,
   1269         EXTRACTOR_METAFORMAT_UTF8,
   1270         "text/plain",
   1271         "LAW_RATING=LAW_RATING",
   1272         strlen ("LAW_RATING=LAW_RATING") + 1,
   1273         0
   1274       },
   1275       {
   1276         EXTRACTOR_METATYPE_UNKNOWN,
   1277         EXTRACTOR_METAFORMAT_UTF8,
   1278         "text/plain",
   1279         "COMPOSITION_LOCATION=COMPOSITION_LOCATION",
   1280         strlen ("COMPOSITION_LOCATION=COMPOSITION_LOCATION") + 1,
   1281         0
   1282       },
   1283       {
   1284         EXTRACTOR_METATYPE_UNKNOWN,
   1285         EXTRACTOR_METAFORMAT_UTF8,
   1286         "text/plain",
   1287         "COMPOSER_NATIONALITY=COMPOSER_NATIONALITY",
   1288         strlen ("COMPOSER_NATIONALITY=COMPOSER_NATIONALITY") + 1,
   1289         0
   1290       },
   1291       {
   1292         EXTRACTOR_METATYPE_PLAY_COUNTER,
   1293         EXTRACTOR_METAFORMAT_UTF8,
   1294         "text/plain",
   1295         "PLAY_COUNTER",
   1296         strlen ("PLAY_COUNTER") + 1,
   1297         0
   1298       },
   1299       {
   1300         EXTRACTOR_METATYPE_RATING,
   1301         EXTRACTOR_METAFORMAT_UTF8,
   1302         "text/plain",
   1303         "RATING",
   1304         strlen ("RATING") + 1,
   1305         0
   1306       },
   1307       {
   1308         EXTRACTOR_METATYPE_UNKNOWN,
   1309         EXTRACTOR_METAFORMAT_UTF8,
   1310         "text/plain",
   1311         "ENCODER_SETTINGS=ENCODER_SETTINGS",
   1312         strlen ("ENCODER_SETTINGS=ENCODER_SETTINGS") + 1,
   1313         0
   1314       },
   1315       {
   1316         EXTRACTOR_METATYPE_FRAME_RATE,
   1317         EXTRACTOR_METAFORMAT_UTF8,
   1318         "text/plain",
   1319         "FPS",
   1320         strlen ("FPS") + 1,
   1321         0
   1322       },
   1323       {
   1324         EXTRACTOR_METATYPE_UNKNOWN,
   1325         EXTRACTOR_METAFORMAT_UTF8,
   1326         "text/plain",
   1327         "MEASURE=MEASURE",
   1328         strlen ("MEASURE=MEASURE") + 1,
   1329         0
   1330       },
   1331       {
   1332         EXTRACTOR_METATYPE_UNKNOWN,
   1333         EXTRACTOR_METAFORMAT_UTF8,
   1334         "text/plain",
   1335         "TUNING=TUNING",
   1336         strlen ("TUNING=TUNING") + 1,
   1337         0
   1338       },
   1339       {
   1340         EXTRACTOR_METATYPE_UNKNOWN,
   1341         EXTRACTOR_METAFORMAT_UTF8,
   1342         "text/plain",
   1343         "ISBN=ISBN",
   1344         strlen ("ISBN=ISBN") + 1,
   1345         0
   1346       },
   1347       {
   1348         EXTRACTOR_METATYPE_UNKNOWN,
   1349         EXTRACTOR_METAFORMAT_UTF8,
   1350         "text/plain",
   1351         "BARCODE=BARCODE",
   1352         strlen ("BARCODE=BARCODE") + 1,
   1353         0
   1354       },
   1355       {
   1356         EXTRACTOR_METATYPE_UNKNOWN,
   1357         EXTRACTOR_METAFORMAT_UTF8,
   1358         "text/plain",
   1359         "CATALOG_NUMBER=CATALOG_NUMBER",
   1360         strlen ("CATALOG_NUMBER=CATALOG_NUMBER") + 1,
   1361         0
   1362       },
   1363       {
   1364         EXTRACTOR_METATYPE_UNKNOWN,
   1365         EXTRACTOR_METAFORMAT_UTF8,
   1366         "text/plain",
   1367         "LABEL_CODE=LABEL_CODE",
   1368         strlen ("LABEL_CODE=LABEL_CODE") + 1,
   1369         0
   1370       },
   1371       {
   1372         EXTRACTOR_METATYPE_UNKNOWN,
   1373         EXTRACTOR_METAFORMAT_UTF8,
   1374         "text/plain",
   1375         "LCCN=LCCN",
   1376         strlen ("LCCN=LCCN") + 1,
   1377         0
   1378       },
   1379       {
   1380         EXTRACTOR_METATYPE_UNKNOWN,
   1381         EXTRACTOR_METAFORMAT_UTF8,
   1382         "text/plain",
   1383         "PURCHASE_ITEM=PURCHASE_ITEM",
   1384         strlen ("PURCHASE_ITEM=PURCHASE_ITEM") + 1,
   1385         0
   1386       },
   1387       {
   1388         EXTRACTOR_METATYPE_UNKNOWN,
   1389         EXTRACTOR_METAFORMAT_UTF8,
   1390         "text/plain",
   1391         "PURCHASE_INFO=PURCHASE_INFO",
   1392         strlen ("PURCHASE_INFO=PURCHASE_INFO") + 1,
   1393         0
   1394       },
   1395       {
   1396         EXTRACTOR_METATYPE_UNKNOWN,
   1397         EXTRACTOR_METAFORMAT_UTF8,
   1398         "text/plain",
   1399         "PURCHASE_OWNER=PURCHASE_OWNER",
   1400         strlen ("PURCHASE_OWNER=PURCHASE_OWNER") + 1,
   1401         0
   1402       },
   1403       {
   1404         EXTRACTOR_METATYPE_UNKNOWN,
   1405         EXTRACTOR_METAFORMAT_UTF8,
   1406         "text/plain",
   1407         "PURCHASE_PRICE=PURCHASE_PRICE",
   1408         strlen ("PURCHASE_PRICE=PURCHASE_PRICE") + 1,
   1409         0
   1410       },
   1411       {
   1412         EXTRACTOR_METATYPE_UNKNOWN,
   1413         EXTRACTOR_METAFORMAT_UTF8,
   1414         "text/plain",
   1415         "PURCHASE_CURRENCY=PURCHASE_CURRENCY",
   1416         strlen ("PURCHASE_CURRENCY=PURCHASE_CURRENCY") + 1,
   1417         0
   1418       },
   1419       {
   1420         EXTRACTOR_METATYPE_ORIGINAL_TITLE,
   1421         EXTRACTOR_METAFORMAT_UTF8,
   1422         "text/plain",
   1423         "ORIGINAL/TITLE",
   1424         strlen ("ORIGINAL/TITLE") + 1,
   1425         0
   1426       },
   1427       {
   1428         EXTRACTOR_METATYPE_UNKNOWN,
   1429         EXTRACTOR_METAFORMAT_UTF8,
   1430         "text/plain",
   1431         "ORIGINAL/ARTIST/SORT_WITH=ORIGINAL/ARTIST/SORT_WITH",
   1432         strlen ("ORIGINAL/ARTIST/SORT_WITH=ORIGINAL/ARTIST/SORT_WITH") + 1,
   1433         0
   1434       },
   1435       {
   1436         EXTRACTOR_METATYPE_ORIGINAL_ARTIST,
   1437         EXTRACTOR_METAFORMAT_UTF8,
   1438         "text/plain",
   1439         "ORIGINAL/ARTIST",
   1440         strlen ("ORIGINAL/ARTIST") + 1,
   1441         0
   1442       },
   1443       {
   1444         EXTRACTOR_METATYPE_TRACK_NUMBER,
   1445         EXTRACTOR_METAFORMAT_UTF8,
   1446         "text/plain",
   1447         "10",
   1448         strlen ("10") + 1,
   1449         0
   1450       },
   1451       {
   1452         EXTRACTOR_METATYPE_COPYRIGHT,
   1453         EXTRACTOR_METAFORMAT_UTF8,
   1454         "text/plain",
   1455         "COPYRIGHT",
   1456         strlen ("COPYRIGHT") + 1,
   1457         0
   1458       },
   1459       {
   1460         EXTRACTOR_METATYPE_CONTACT_INFORMATION,
   1461         EXTRACTOR_METAFORMAT_UTF8,
   1462         "text/plain",
   1463         "COPYRIGHT/EMAIL",
   1464         strlen ("COPYRIGHT/EMAIL") + 1,
   1465         0
   1466       },
   1467       {
   1468         EXTRACTOR_METATYPE_CONTACT_INFORMATION,
   1469         EXTRACTOR_METAFORMAT_UTF8,
   1470         "text/plain",
   1471         "COPYRIGHT/ADDRESS",
   1472         strlen ("COPYRIGHT/ADDRESS") + 1,
   1473         0
   1474       },
   1475       {
   1476         EXTRACTOR_METATYPE_CREATION_TIME,
   1477         EXTRACTOR_METAFORMAT_UTF8,
   1478         "text/plain",
   1479         "1999-01-01",
   1480         strlen ("1999-01-01") + 1,
   1481         0
   1482       },
   1483       {
   1484         EXTRACTOR_METATYPE_COMMENT,
   1485         EXTRACTOR_METAFORMAT_UTF8,
   1486         "text/plain",
   1487         "The purpose of this file is to hold as many examples of Matroska tags as possible.",
   1488         strlen (
   1489           "The purpose of this file is to hold as many examples of Matroska tags as possible.")
   1490         + 1,
   1491         0
   1492       },
   1493       {
   1494         EXTRACTOR_METATYPE_COMPOSER,
   1495         EXTRACTOR_METAFORMAT_UTF8,
   1496         "text/plain",
   1497         "COMPOSER",
   1498         strlen ("COMPOSER") + 1,
   1499         0
   1500       },
   1501       {
   1502         EXTRACTOR_METATYPE_PERFORMER,
   1503         EXTRACTOR_METAFORMAT_UTF8,
   1504         "text/plain",
   1505         "ACCOMPANIMENT",
   1506         strlen ("ACCOMPANIMENT") + 1,
   1507         0
   1508       },
   1509       {
   1510         EXTRACTOR_METATYPE_PERFORMER,
   1511         EXTRACTOR_METAFORMAT_UTF8,
   1512         "text/plain",
   1513         "CONDUCTOR",
   1514         strlen ("CONDUCTOR") + 1,
   1515         0
   1516       },
   1517       {
   1518         EXTRACTOR_METATYPE_LYRICS,
   1519         EXTRACTOR_METAFORMAT_UTF8,
   1520         "text/plain",
   1521         "LYRICS",
   1522         strlen ("LYRICS") + 1,
   1523         0
   1524       },
   1525       {
   1526         EXTRACTOR_METATYPE_ENCODED_BY,
   1527         EXTRACTOR_METAFORMAT_UTF8,
   1528         "text/plain",
   1529         "ENCODED_BY",
   1530         strlen ("ENCODED_BY") + 1,
   1531         0
   1532       },
   1533       {
   1534         EXTRACTOR_METATYPE_GENRE,
   1535         EXTRACTOR_METAFORMAT_UTF8,
   1536         "text/plain",
   1537         "GENRE",
   1538         strlen ("GENRE") + 1,
   1539         0
   1540       },
   1541       {
   1542         EXTRACTOR_METATYPE_DESCRIPTION,
   1543         EXTRACTOR_METAFORMAT_UTF8,
   1544         "text/plain",
   1545         "DESCRIPTION",
   1546         strlen ("DESCRIPTION") + 1,
   1547         0
   1548       },
   1549       {
   1550         EXTRACTOR_METATYPE_KEYWORDS,
   1551         EXTRACTOR_METAFORMAT_UTF8,
   1552         "text/plain",
   1553         "KEYWORDS",
   1554         strlen ("KEYWORDS") + 1,
   1555         0
   1556       },
   1557       {
   1558         EXTRACTOR_METATYPE_LOCATION_NAME,
   1559         EXTRACTOR_METAFORMAT_UTF8,
   1560         "text/plain",
   1561         "RECORDING_LOCATION",
   1562         strlen ("RECORDING_LOCATION") + 1,
   1563         0
   1564       },
   1565       {
   1566         EXTRACTOR_METATYPE_ENCODER,
   1567         EXTRACTOR_METAFORMAT_UTF8,
   1568         "text/plain",
   1569         "ENCODER",
   1570         strlen ("ENCODER") + 1,
   1571         0
   1572       },
   1573       {
   1574         EXTRACTOR_METATYPE_ISRC,
   1575         EXTRACTOR_METAFORMAT_UTF8,
   1576         "text/plain",
   1577         "ISRC",
   1578         strlen ("ISRC") + 1,
   1579         0
   1580       },
   1581       {
   1582         EXTRACTOR_METATYPE_LICENSE,
   1583         EXTRACTOR_METAFORMAT_UTF8,
   1584         "text/plain",
   1585         "LICENSE",
   1586         strlen ("LICENSE") + 1,
   1587         0
   1588       },
   1589       {
   1590         EXTRACTOR_METATYPE_CONTAINER_FORMAT,
   1591         EXTRACTOR_METAFORMAT_UTF8,
   1592         "text/plain",
   1593         "Matroska",
   1594         strlen ("Matroska") + 1,
   1595         0
   1596       },
   1597       {
   1598         EXTRACTOR_METATYPE_VIDEO_CODEC,
   1599         EXTRACTOR_METAFORMAT_UTF8,
   1600         "text/plain",
   1601         "Intel Video 4",
   1602         strlen ("Intel Video 4") + 1,
   1603         0
   1604       },
   1605       {
   1606         EXTRACTOR_METATYPE_VIDEO_LANGUAGE,
   1607         EXTRACTOR_METAFORMAT_UTF8,
   1608         "text/plain",
   1609         "it",
   1610         strlen ("it") + 1,
   1611         0
   1612       },
   1613       {
   1614         EXTRACTOR_METATYPE_VIDEO_DIMENSIONS,
   1615         EXTRACTOR_METAFORMAT_UTF8,
   1616         "text/plain",
   1617         "256x240",
   1618         strlen ("256x240") + 1,
   1619         0
   1620       },
   1621       {
   1622         EXTRACTOR_METATYPE_FRAME_RATE,
   1623         EXTRACTOR_METAFORMAT_UTF8,
   1624         "text/plain",
   1625         "35/1",
   1626         strlen ("35/1") + 1,
   1627         0
   1628       },
   1629       {
   1630         EXTRACTOR_METATYPE_PIXEL_ASPECT_RATIO,
   1631         EXTRACTOR_METAFORMAT_UTF8,
   1632         "text/plain",
   1633         "1/1",
   1634         strlen ("1/1") + 1,
   1635         0
   1636       },
   1637       { 0, 0, NULL, NULL, 0, -1 }
   1638     };
   1639     struct ProblemSet patched_ps[] = {
   1640       { "testdata/matroska_flame.mkv", matroska_flame_patched_sol },
   1641       { NULL, NULL }
   1642     };
   1643     g_print ("Running mkv test on GStreamer, assuming old version:\n");
   1644     result_stock = (0 == ET_main ("gstreamer", stock_ps));
   1645     g_print ("Old GStreamer test result: %s\n", result_stock == 0 ? "OK" :
   1646              "FAILED");
   1647     g_print ("Running mkv test on GStreamer, assuming new version:\n");
   1648     result_patched = (0 == ET_main ("gstreamer", patched_ps));
   1649     g_print ("New GStreamer test result: %s\n", result_patched == 0 ? "OK" :
   1650              "FAILED");
   1651     if ((! result_stock) && (! result_patched))
   1652       result++;
   1653   }
   1654   g_object_unref (dc);
   1655   if (0 != result)
   1656   {
   1657     fprintf (stderr,
   1658              "gstreamer library did not work perfectly --- consider updating it.\n");
   1659     /* do not fail hard, as we know many users have outdated gstreamer packages */
   1660     result = 0;
   1661   }
   1662   return result;
   1663 }
   1664 
   1665 
   1666 /* end of test_gstreamer.c */