diff options
Diffstat (limited to 'apps/metadata/mp4.c')
-rw-r--r-- | apps/metadata/mp4.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/apps/metadata/mp4.c b/apps/metadata/mp4.c index 00f0bf9d4c..a520597972 100644 --- a/apps/metadata/mp4.c +++ b/apps/metadata/mp4.c | |||
@@ -42,6 +42,7 @@ | |||
42 | #define MP4_cART MP4_ID(0xa9, 'A', 'R', 'T') | 42 | #define MP4_cART MP4_ID(0xa9, 'A', 'R', 'T') |
43 | #define MP4_cgrp MP4_ID(0xa9, 'g', 'r', 'p') | 43 | #define MP4_cgrp MP4_ID(0xa9, 'g', 'r', 'p') |
44 | #define MP4_cgen MP4_ID(0xa9, 'g', 'e', 'n') | 44 | #define MP4_cgen MP4_ID(0xa9, 'g', 'e', 'n') |
45 | #define MP4_chpl MP4_ID('c', 'h', 'p', 'l') | ||
45 | #define MP4_cnam MP4_ID(0xa9, 'n', 'a', 'm') | 46 | #define MP4_cnam MP4_ID(0xa9, 'n', 'a', 'm') |
46 | #define MP4_cwrt MP4_ID(0xa9, 'w', 'r', 't') | 47 | #define MP4_cwrt MP4_ID(0xa9, 'w', 'r', 't') |
47 | #define MP4_ccmt MP4_ID(0xa9, 'c', 'm', 't') | 48 | #define MP4_ccmt MP4_ID(0xa9, 'c', 'm', 't') |
@@ -681,6 +682,26 @@ static bool read_mp4_container(int fd, struct mp3entry* id3, | |||
681 | id3->filesize = size; | 682 | id3->filesize = size; |
682 | break; | 683 | break; |
683 | 684 | ||
685 | case MP4_chpl: | ||
686 | { | ||
687 | /* ADDME: add support for real chapters. Right now it's only | ||
688 | * used for Nero's gapless hack */ | ||
689 | uint8_t chapters; | ||
690 | uint64_t timestamp; | ||
691 | |||
692 | lseek(fd, 8, SEEK_CUR); | ||
693 | read_uint8(fd, &chapters); | ||
694 | size -= 9; | ||
695 | |||
696 | /* the first chapter will be used as the lead_trim */ | ||
697 | if (chapters > 0) { | ||
698 | read_uint64be(fd, ×tamp); | ||
699 | id3->lead_trim = (timestamp * id3->frequency) / 10000000; | ||
700 | size -= 8; | ||
701 | } | ||
702 | } | ||
703 | break; | ||
704 | |||
684 | default: | 705 | default: |
685 | break; | 706 | break; |
686 | } | 707 | } |