| 631 | } |
| 632 | |
| 633 | void QuickTimeVideo::tagDecoder(Exiv2::DataBuf& buf, size_t size, size_t recursion_depth) { |
| 634 | enforce(recursion_depth < max_recursion_depth_, Exiv2::ErrorCode::kerCorruptedMetadata); |
| 635 | assert(buf.size() > 4); |
| 636 | |
| 637 | if (ignoreList(buf)) |
| 638 | discard(size); |
| 639 | |
| 640 | else if (dataIgnoreList(buf)) { |
| 641 | decodeBlock(recursion_depth + 1, Exiv2::toString(buf.data())); |
| 642 | } else if (equalsQTimeTag(buf, "ftyp")) |
| 643 | fileTypeDecoder(size); |
| 644 | |
| 645 | else if (equalsQTimeTag(buf, "trak")) |
| 646 | setMediaStream(); |
| 647 | |
| 648 | else if (equalsQTimeTag(buf, "mvhd")) |
| 649 | movieHeaderDecoder(size); |
| 650 | |
| 651 | else if (equalsQTimeTag(buf, "tkhd")) |
| 652 | trackHeaderDecoder(size); |
| 653 | |
| 654 | else if (equalsQTimeTag(buf, "mdhd")) |
| 655 | mediaHeaderDecoder(size); |
| 656 | |
| 657 | else if (equalsQTimeTag(buf, "hdlr")) |
| 658 | handlerDecoder(size); |
| 659 | |
| 660 | else if (equalsQTimeTag(buf, "vmhd")) |
| 661 | videoHeaderDecoder(size); |
| 662 | |
| 663 | else if (equalsQTimeTag(buf, "udta")) |
| 664 | userDataDecoder(size, recursion_depth + 1); |
| 665 | |
| 666 | else if (equalsQTimeTag(buf, "dref")) |
| 667 | multipleEntriesDecoder(recursion_depth + 1); |
| 668 | |
| 669 | else if (equalsQTimeTag(buf, "stsd")) |
| 670 | sampleDesc(size); |
| 671 | |
| 672 | else if (equalsQTimeTag(buf, "stts")) |
| 673 | timeToSampleDecoder(); |
| 674 | |
| 675 | else if (equalsQTimeTag(buf, "pnot")) |
| 676 | previewTagDecoder(size); |
| 677 | |
| 678 | else if (equalsQTimeTag(buf, "tapt")) |
| 679 | trackApertureTagDecoder(size); |
| 680 | |
| 681 | else if (equalsQTimeTag(buf, "keys")) |
| 682 | keysTagDecoder(size); |
| 683 | |
| 684 | else if (equalsQTimeTag(buf, "url ")) { |
| 685 | if (currentStream_ == Video) |
| 686 | xmpData_["Xmp.video.URL"] = readString(*io_, size); |
| 687 | else if (currentStream_ == Audio) |
| 688 | xmpData_["Xmp.audio.URL"] = readString(*io_, size); |
| 689 | else |
| 690 | discard(size); |
nothing calls this directly
no test coverage detected