summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demuxer.c
diff options
context:
space:
mode:
authornicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-01-05 14:28:57 +0000
committernicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-01-05 14:28:57 +0000
commita913d9061452920b24165913a020238d06713505 (patch)
tree33e9300e4199e544271c6836ce55ebb69bb050c7 /libmpdemux/demuxer.c
parent4af051b6c31a845bb430894f71a34fd43d93c57e (diff)
downloadmpv-a913d9061452920b24165913a020238d06713505.tar.bz2
mpv-a913d9061452920b24165913a020238d06713505.tar.xz
wrapper functions to get/set angle: the wrapping is needed to RESYNC the demuxer; patch by oattila chello hu
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25603 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demuxer.c')
-rw-r--r--libmpdemux/demuxer.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index 8a81fc66f9..03bb402830 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -1287,3 +1287,52 @@ int demuxer_chapter_count(demuxer_t *demuxer) {
return demuxer->num_chapters;
}
+int demuxer_angles_count(demuxer_t *demuxer) {
+ int ris, angles=-1;
+
+ ris = stream_control(demuxer->stream, STREAM_CTRL_GET_NUM_ANGLES, &angles);
+ if(ris == STREAM_UNSUPPORTED) return -1;
+ return angles;
+}
+
+int demuxer_get_current_angle(demuxer_t *demuxer) {
+ int ris, curr_angle=-1;
+ ris = stream_control(demuxer->stream, STREAM_CTRL_GET_ANGLE, &curr_angle);
+ if(ris == STREAM_UNSUPPORTED) return -1;
+ return curr_angle;
+}
+
+
+int demuxer_set_angle(demuxer_t *demuxer, int angle) {
+ int ris, angles=-1;
+ sh_video_t *sh_video = demuxer->video->sh;
+ sh_audio_t *sh_audio = demuxer->audio->sh;
+
+ angles = demuxer_angles_count(demuxer);
+ if((angles < 1) || (angle > angles)) return -1;
+
+ if(demuxer->video->sh)
+ ds_free_packs(demuxer->video);
+
+ if(demuxer->audio->sh)
+ ds_free_packs(demuxer->audio);
+
+ if(demuxer->sub->id >= 0)
+ ds_free_packs(demuxer->sub);
+
+ ris = stream_control(demuxer->stream, STREAM_CTRL_SET_ANGLE, &angle);
+ if(ris == STREAM_UNSUPPORTED) return -1;
+
+ demux_control(demuxer, DEMUXER_CTRL_RESYNC, NULL);
+ if(sh_video) {
+ ds_fill_buffer(demuxer->video);
+ resync_video_stream(sh_video);
+ }
+
+ if(sh_audio) {
+ ds_fill_buffer(demuxer->audio);
+ resync_audio_stream(sh_audio);
+ }
+
+ return angle;
+}