mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-24 03:59:43 +00:00
oggdec: Parse ogm chapters
Originally committed as revision 22477 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
2e5085854c
commit
8730fad595
@ -41,6 +41,40 @@ const AVMetadataConv ff_vorbiscomment_metadata_conv[] = {
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static int ogm_chapter(AVFormatContext *as, uint8_t *key, uint8_t *val)
|
||||
{
|
||||
int i, cnum, h, m, s, ms, keylen = strlen(key);
|
||||
AVChapter *chapter = NULL;
|
||||
|
||||
if (keylen < 9 || sscanf(key, "CHAPTER%02d", &cnum) != 1)
|
||||
return 0;
|
||||
|
||||
if (keylen == 9) {
|
||||
if (sscanf(val, "%02d:%02d:%02d.%03d", &h, &m, &s, &ms) < 4)
|
||||
return 0;
|
||||
|
||||
ff_new_chapter(as, cnum, (AVRational){1,1000},
|
||||
ms + 1000*(s + 60*(m + 60*h)),
|
||||
AV_NOPTS_VALUE, NULL);
|
||||
av_free(val);
|
||||
} else if (!strcmp(key+9, "NAME")) {
|
||||
for(i = 0; i < as->nb_chapters; i++)
|
||||
if (as->chapters[i]->id == cnum) {
|
||||
chapter = as->chapters[i];
|
||||
break;
|
||||
}
|
||||
if (!chapter)
|
||||
return 0;
|
||||
|
||||
av_metadata_set2(&chapter->metadata, "title", val,
|
||||
AV_METADATA_DONT_STRDUP_VAL);
|
||||
} else
|
||||
return 0;
|
||||
|
||||
av_free(key);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
ff_vorbis_comment(AVFormatContext * as, AVMetadata **m, const uint8_t *buf, int size)
|
||||
{
|
||||
@ -101,7 +135,8 @@ ff_vorbis_comment(AVFormatContext * as, AVMetadata **m, const uint8_t *buf, int
|
||||
memcpy(ct, v, vl);
|
||||
ct[vl] = 0;
|
||||
|
||||
av_metadata_set2(m, tt, ct,
|
||||
if (!ogm_chapter(as, tt, ct))
|
||||
av_metadata_set2(m, tt, ct,
|
||||
AV_METADATA_DONT_STRDUP_KEY |
|
||||
AV_METADATA_DONT_STRDUP_VAL);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user