Selaa lähdekoodia

osx/framework: added methods to access end-user-compliant names of subtitles, audio tracks, etc.

Felix Paul Kühne 15 vuotta sitten
vanhempi
commit
4b5467b5e3
2 muutettua tiedostoa jossa 68 lisäystä ja 11 poistoa
  1. 5 1
      Headers/Public/VLCMediaPlayer.h
  2. 63 10
      Sources/VLCMediaPlayer.m

+ 5 - 1
Headers/Public/VLCMediaPlayer.h

@@ -107,8 +107,9 @@ extern NSString * VLCMediaPlayerStateToString(VLCMediaPlayerState state);
 - (char *)videoAspectRatio;
 - (void)setVideoSubTitles:(int)value;
 - (int)countOfVideoSubTitles;
-- (int)currentVideoSubTitles;
 - (BOOL)openVideoSubTitlesFromFile:(NSString *)path;
+- (int)currentVideoSubTitles;
+- (NSArray *)videoSubTitles;
 
 - (void)setVideoCropGeometry:(char *)value;
 - (char *)videoCropGeometry;
@@ -163,15 +164,18 @@ extern NSString * VLCMediaPlayerStateToString(VLCMediaPlayerState state);
 - (void)setChapter:(int)value;
 - (int)currentChapter;
 - (int)countOfChapters;
+- (NSArray *)chaptersForTitle:(int)title;
 
 - (void)setCurrentTitle:(int)value;
 - (int)currentTitle;
 - (int)countOfTitles;
+- (NSArray *)titles;
 
 /* Audio Options */
 - (void)setAudioTrack:(int)value;
 - (int)currentAudioTrack;
 - (int)countOfAudioTracks;
+- (NSArray *)audioTracks;
 
 - (void)setAudioChannel:(int)value;
 - (int)audioChannel;

+ 63 - 10
Sources/VLCMediaPlayer.m

@@ -297,16 +297,8 @@ static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void *
     libvlc_exception_t ex;
     libvlc_exception_init( &ex );
     int result = libvlc_video_get_spu( instance, &ex );
-    if (libvlc_exception_raised(&ex))
-    {
-        libvlc_exception_clear(&ex);
-        return -1;
-    }
-    else
-    {
-        libvlc_exception_clear(&ex);
-        return result;
-    }
+    catch_exception( &ex );
+    return result;
 }
 
 - (BOOL)openVideoSubTitlesFromFile:(NSString *)path
@@ -318,6 +310,21 @@ static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void *
     return result;
 }
 
+- (NSArray *)videoSubTitles
+{
+    libvlc_exception_t ex;
+    libvlc_exception_init( &ex );
+    libvlc_track_description_t *tracks = libvlc_video_get_spu_description( instance, &ex );
+    NSMutableArray *tempArray = [NSMutableArray array];
+    NSInteger i;
+    for (i = 0; i < [self countOfVideoSubTitles] ; i++)
+    {
+        [tempArray addObject:[NSString stringWithUTF8String: tracks->psz_name]];
+        tracks = tracks->p_next;
+    }
+    return [NSArray arrayWithArray: tempArray];
+}
+
 - (void)setVideoCropGeometry:(char *)value
 {
     libvlc_exception_t ex;
@@ -493,6 +500,21 @@ static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void *
     catch_exception( &ex );
 }
 
+- (NSArray *)chaptersForTitle:(int)title
+{
+    libvlc_exception_t ex;
+    libvlc_exception_init( &ex );
+    libvlc_track_description_t *tracks = libvlc_video_get_chapter_description( instance, title, &ex );
+    NSMutableArray *tempArray = [NSMutableArray array];
+    NSInteger i;
+    for (i = 0; i < [self countOfChapters] ; i++)
+    {
+        [tempArray addObject:[NSString stringWithUTF8String: tracks->psz_name]];
+        tracks = tracks->p_next;
+    }
+    return [NSArray arrayWithArray: tempArray];
+}
+
 - (void)setCurrentTitle:(int)value
 {
     libvlc_exception_t ex;
@@ -519,6 +541,21 @@ static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void *
     return result;
 }
 
+- (NSArray *)titles
+{
+    libvlc_exception_t ex;
+    libvlc_exception_init( &ex );
+    libvlc_track_description_t *tracks = libvlc_video_get_title_description( instance, &ex );
+    NSMutableArray *tempArray = [NSMutableArray array];
+    NSInteger i;
+    for (i = 0; i < [self countOfTitles] ; i++)
+    {
+        [tempArray addObject:[NSString stringWithUTF8String: tracks->psz_name]];
+        tracks = tracks->p_next;
+    }
+    return [NSArray arrayWithArray: tempArray];
+}
+
 - (void)setAudioTrack:(int)value
 {
     libvlc_exception_t ex;
@@ -545,6 +582,22 @@ static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void *
     return result;
 }
 
+- (NSArray *)audioTracks
+{
+    libvlc_exception_t ex;
+    libvlc_exception_init( &ex );
+    libvlc_track_description_t *tracks = libvlc_audio_get_track_description( instance, &ex );
+    NSMutableArray *tempArray = [NSMutableArray array];
+    NSInteger i;
+    for (i = 0; i < [self countOfAudioTracks] ; i++)
+    {
+        [tempArray addObject:[NSString stringWithUTF8String: tracks->psz_name]];
+        tracks = tracks->p_next;
+    }
+
+    return [NSArray arrayWithArray: tempArray];
+}
+
 - (void)setAudioChannel:(int)value
 {
     libvlc_exception_t ex;