| 1 | use ffi::*; |
| 2 | use {DictionaryRef, Rational}; |
| 3 | |
| 4 | use format::context::common::Context; |
| 5 | |
| 6 | // WARNING: index refers to the offset in the chapters array (starting from 0) |
| 7 | // it is not necessarly equal to the id (which may start at 1) |
| 8 | pub struct Chapter<'a> { |
| 9 | context: &'a Context, |
| 10 | index: usize, |
| 11 | } |
| 12 | |
| 13 | impl<'a> Chapter<'a> { |
| 14 | pub unsafe fn wrap(context: &Context, index: usize) -> Chapter { |
| 15 | Chapter { context, index } |
| 16 | } |
| 17 | |
| 18 | pub unsafe fn as_ptr(&self) -> *const AVChapter { |
| 19 | *(*self.context.as_ptr()).chapters.add(self.index) |
| 20 | } |
| 21 | } |
| 22 | |
| 23 | impl<'a> Chapter<'a> { |
| 24 | pub fn index(&self) -> usize { |
| 25 | self.index |
| 26 | } |
| 27 | |
| 28 | pub fn id(&self) -> i64 { |
| 29 | #[allow (clippy::unnecessary_cast)] |
| 30 | unsafe { |
| 31 | (*self.as_ptr()).id as i64 |
| 32 | } |
| 33 | } |
| 34 | |
| 35 | pub fn time_base(&self) -> Rational { |
| 36 | unsafe { Rational::from((*self.as_ptr()).time_base) } |
| 37 | } |
| 38 | |
| 39 | pub fn start(&self) -> i64 { |
| 40 | unsafe { (*self.as_ptr()).start } |
| 41 | } |
| 42 | |
| 43 | pub fn end(&self) -> i64 { |
| 44 | unsafe { (*self.as_ptr()).end } |
| 45 | } |
| 46 | |
| 47 | pub fn metadata(&self) -> DictionaryRef { |
| 48 | unsafe { DictionaryRef::wrap((*self.as_ptr()).metadata) } |
| 49 | } |
| 50 | } |
| 51 | |
| 52 | impl<'a> PartialEq for Chapter<'a> { |
| 53 | fn eq(&self, other: &Self) -> bool { |
| 54 | unsafe { self.as_ptr() == other.as_ptr() } |
| 55 | } |
| 56 | } |
| 57 | |