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