Class: Chapter
- Inherits:
-
Object
- Object
- Chapter
- Defined in:
- ext/chapter/chapter.c
Class Method Summary collapse
Class Method Details
.chapters(path) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'ext/chapter/chapter.c', line 6
static VALUE
rb_get_chapters(VALUE self, VALUE path) {
char* fileName = StringValuePtr(path);
MP4FileHandle file = MP4Read(fileName, 0);
if(file == MP4_INVALID_FILE_HANDLE )
{
rb_raise(rb_eException, "could not load file");
return Qnil;
}
MP4Chapter_t * chapters = 0;
uint32_t chapterCount = 0;
// get the list of chapters
MP4ChapterType chtp = MP4GetChapters(file, &chapters, &chapterCount, MP4ChapterTypeAny);
uint32_t i;
uint32_t pos = 0;
VALUE result = rb_ary_new();
for (i = 0; i < chapterCount; ++i)
{
VALUE chapter = rb_hash_new();
// print the infos
rb_hash_aset(chapter, rb_str_new2("title"), rb_str_new2(chapters[i].title));
rb_hash_aset(chapter, rb_str_new2("duration"), INT2NUM(chapters[i].duration));
rb_hash_aset(chapter, rb_str_new2("position"), INT2NUM(pos));
rb_ary_push(result, chapter);
pos = pos + chapters[i].duration;
}
// free up the memory
MP4Free(chapters);
MP4Close(file);
return result;
}
|
.set_chapters(path, chapters) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'ext/chapter/chapter.c', line 41
static VALUE
rb_set_chapters(VALUE self, VALUE path, VALUE chapters) {
char* fileName = StringValuePtr(path);
MP4FileHandle file = MP4Modify(fileName, 0, 0);
if(file == MP4_INVALID_FILE_HANDLE )
{
rb_raise(rb_eException, "could not load file");
return Qnil;
}
uint32_t chapter_len = RARRAY_LEN(chapters);
uint32_t i;
MP4Chapter_t newChapters[chapter_len];
MP4Chapter_t *chapter = malloc(sizeof(MP4Chapter_t));
for (i = 0; i < chapter_len; i++) {
VALUE duration = rb_hash_aref(rb_ary_entry(chapters, i), rb_str_new2("duration"));
VALUE title = rb_hash_aref(rb_ary_entry(chapters, i), rb_str_new2("title"));
chapter->duration = NUM2UINT(duration);
strcpy(chapter->title, StringValuePtr(title));
newChapters[i] = *chapter;
}
free(chapter);
MP4SetChapters(file, &newChapters[0], chapter_len, MP4ChapterTypeQt);
MP4Close(file);
return Qnil;
}
|