summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmpdemux/demux_rawdv.c18
-rw-r--r--libmpdemux/demuxer.c7
2 files changed, 25 insertions, 0 deletions
diff --git a/libmpdemux/demux_rawdv.c b/libmpdemux/demux_rawdv.c
index dea8463092..ad7a903137 100644
--- a/libmpdemux/demux_rawdv.c
+++ b/libmpdemux/demux_rawdv.c
@@ -225,4 +225,22 @@ void demux_close_rawdv(demuxer_t* demuxer)
free(frames);
}
+int demux_rawdv_control(demuxer_t *demuxer,int cmd, void *arg) {
+ rawdv_frames_t *frames = (rawdv_frames_t *)demuxer->priv;
+ sh_video_t *sh_video=demuxer->video->sh;
+
+ switch(cmd) {
+ case DEMUXER_CTRL_GET_TIME_LENGTH:
+ *((unsigned long *)arg)=frames->frame_number / sh_video->fps;
+ return DEMUXER_CTRL_OK;
+
+ case DEMUXER_CTRL_GET_PERCENT_POS:
+ *((int *)arg)=(int)(frames->current_frame * 100. / frames->frame_number);
+ return DEMUXER_CTRL_OK;
+
+ default:
+ return DEMUXER_CTRL_NOTIMPL;
+ }
+}
+
#endif
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index 27ddfa5d94..3c72dfe99f 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -1720,6 +1720,9 @@ extern int demux_mov_control(demuxer_t *demuxer, int cmd, void *arg);
#ifdef USE_WIN32DLL
extern int demux_avs_control(demuxer_t *demuxer, int cmd, void *arg);
#endif
+#ifdef HAVE_LIBDV095
+extern int demux_rawdv_control(demuxer_t *demuxer,int cmd, void *arg);
+#endif
int demux_control(demuxer_t *demuxer, int cmd, void *arg) {
switch(demuxer->type) {
@@ -1762,6 +1765,10 @@ int demux_control(demuxer_t *demuxer, int cmd, void *arg) {
case DEMUXER_TYPE_AVS:
return demux_avs_control(demuxer, cmd, arg);
#endif
+#ifdef HAVE_LIBDV095
+ case DEMUXER_TYPE_RAWDV:
+ return demux_rawdv_control(demuxer,cmd, arg);
+#endif
default:
return DEMUXER_CTRL_NOTIMPL;
}