summaryrefslogtreecommitdiffstats
path: root/mplayer.c
diff options
context:
space:
mode:
authoruau <uau@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-02-22 21:05:31 +0000
committeruau <uau@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-02-22 21:05:31 +0000
commit8443741eefd6ba2a3a7a265ec380c23255f6bd4e (patch)
tree7ecf61a8869bb2bdf8b1019fc6930ece9a75bd38 /mplayer.c
parent29f6d11d8ca9115ce41c97bad02720c3ad1758ec (diff)
downloadmpv-8443741eefd6ba2a3a7a265ec380c23255f6bd4e.tar.bz2
mpv-8443741eefd6ba2a3a7a265ec380c23255f6bd4e.tar.xz
Move EDL code to separate functions
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22316 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'mplayer.c')
-rw-r--r--mplayer.c104
1 files changed, 58 insertions, 46 deletions
diff --git a/mplayer.c b/mplayer.c
index 1ef9fcb4a3..bb476d9501 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -2170,6 +2170,62 @@ void print_version(void){
#endif /* ARCH_X86 */
}
+
+// Find the right mute status and record position for new file position
+static void edl_seek_reset(MPContext *mpctx)
+{
+ mpctx->edl_muted = 0;
+ next_edl_record = edl_records;
+
+ while (next_edl_record) {
+ if (next_edl_record->start_sec >= mpctx->sh_video->pts)
+ break;
+
+ if (next_edl_record->action == EDL_MUTE)
+ mpctx->edl_muted = !mpctx->edl_muted;
+ next_edl_record = next_edl_record->next;
+ }
+ if ((mpctx->user_muted | mpctx->edl_muted) != mpctx->mixer.muted)
+ mixer_mute(&mpctx->mixer);
+}
+
+
+// Execute EDL command for the current position if one exists
+static void edl_update(MPContext *mpctx)
+{
+ if (!next_edl_record)
+ return;
+
+ if (!mpctx->sh_video) {
+ mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_EdlNOsh_video);
+ free_edl(edl_records);
+ next_edl_record = NULL;
+ edl_records = NULL;
+ return;
+ }
+
+ if (mpctx->sh_video->pts >= next_edl_record->start_sec) {
+ if (next_edl_record->action == EDL_SKIP) {
+ mpctx->osd_function = OSD_FFW;
+ abs_seek_pos = 0;
+ rel_seek_secs = next_edl_record->length_sec;
+ mp_msg(MSGT_CPLAYER, MSGL_DBG4, "EDL_SKIP: start [%f], stop "
+ "[%f], length [%f]\n", next_edl_record->start_sec,
+ next_edl_record->stop_sec, next_edl_record->length_sec);
+ edl_decision = 1;
+ }
+ else if (next_edl_record->action == EDL_MUTE) {
+ mpctx->edl_muted = !mpctx->edl_muted;
+ if ((mpctx->user_muted | mpctx->edl_muted) != mpctx->mixer.muted)
+ mixer_mute(&mpctx->mixer);
+ mp_msg(MSGT_CPLAYER, MSGL_DBG4, "EDL_MUTE: [%f]\n",
+ next_edl_record->start_sec );
+ }
+ next_edl_record = next_edl_record->next;
+ }
+}
+
+
int main(int argc,char* argv[]){
@@ -3419,31 +3475,7 @@ if(step_sec>0) {
rel_seek_secs+=step_sec;
}
-//================= EDL =========================================
-
- if( next_edl_record ) { // Are we (still?) doing EDL?
- if ( !mpctx->sh_video ) {
- mp_msg( MSGT_CPLAYER, MSGL_ERR, MSGTR_EdlNOsh_video );
- free_edl(edl_records);
- next_edl_record = NULL;
- edl_records = NULL;
- } else {
- if( mpctx->sh_video->pts >= next_edl_record->start_sec ) {
- if( next_edl_record->action == EDL_SKIP ) {
- mpctx->osd_function = OSD_FFW;
- abs_seek_pos = 0;
- rel_seek_secs = next_edl_record->length_sec;
- mp_msg(MSGT_CPLAYER, MSGL_DBG4, "EDL_SKIP: start [%f], stop [%f], length [%f]\n", next_edl_record->start_sec, next_edl_record->stop_sec, next_edl_record->length_sec );
- edl_decision = 1;
- } else if( next_edl_record->action == EDL_MUTE ) {
- mpctx->edl_muted = !mpctx->edl_muted;
- if ((mpctx->user_muted | mpctx->edl_muted) != mpctx->mixer.muted) mixer_mute(&mpctx->mixer);
- mp_msg(MSGT_CPLAYER, MSGL_DBG4, "EDL_MUTE: [%f]\n", next_edl_record->start_sec );
- }
- next_edl_record=next_edl_record->next;
- }
- }
- }
+ edl_update(mpctx);
//================= Keyboard events, SEEKing ====================
@@ -3539,28 +3571,8 @@ if(rel_seek_secs || abs_seek_pos){
update_subtitles(mpctx->sh_video, mpctx->d_sub, 1);
}
}
-/*
- * We saw a seek, have to rewind the EDL operations stack
- * and find the next EDL action to take care of.
- */
-
-mpctx->edl_muted = 0;
-next_edl_record = edl_records;
-
-while (next_edl_record)
-{
- /* Trying to remember if we need to mute/unmute first;
- * prior EDL implementation lacks this.
- */
-
- if (next_edl_record->start_sec >= mpctx->sh_video->pts)
- break;
- if (next_edl_record->action == EDL_MUTE) mpctx->edl_muted = !mpctx->edl_muted;
- next_edl_record = next_edl_record->next;
-
-}
-if ((mpctx->user_muted | mpctx->edl_muted) != mpctx->mixer.muted) mixer_mute(&mpctx->mixer);
+ edl_seek_reset(mpctx);
rel_seek_secs=0;
abs_seek_pos=0;