# HG changeset patch # User alex # Date 1005946210 0 # Node ID bce9c945b29c6a8cc5857739552616f81bdc96b7 # Parent 511f8eba46be8560c62978918a306e4f8cf187ec tv interface update diff -r 511f8eba46be -r bce9c945b29c libmpdemux/demuxer.c --- a/libmpdemux/demuxer.c Fri Nov 16 21:14:38 2001 +0000 +++ b/libmpdemux/demuxer.c Fri Nov 16 21:30:10 2001 +0000 @@ -160,7 +160,10 @@ #ifdef USE_TV #include "tv.h" extern tvi_handle_t *tv_handler; -int demux_tv_fill_buffer(demuxer_t *demux, tvi_handle_t *tvh); +extern int tv_param_on; + +extern int demux_tv_fill_buffer(demuxer_t *demux, tvi_handle_t *tvh); +extern int demux_open_tv(demuxer_t *demuxer, tvi_handle_t *tvh); #endif int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){ @@ -352,10 +355,8 @@ int mov_check_file(demuxer_t* demuxer); int mov_read_header(demuxer_t* demuxer); -#ifdef USE_TV -/* tv ! */ -extern int tv_param_on; -#endif +extern int vivo_check_file(demuxer_t *demuxer); +extern void demux_open_vivo(demuxer_t *demuxer); demuxer_t* demux_open(stream_t *stream,int file_format,int audio_id,int video_id,int dvdsub_id){ diff -r 511f8eba46be -r bce9c945b29c libmpdemux/open.c --- a/libmpdemux/open.c Fri Nov 16 21:14:38 2001 +0000 +++ b/libmpdemux/open.c Fri Nov 16 21:30:10 2001 +0000 @@ -73,6 +73,8 @@ #ifdef USE_TV #include "tv.h" tvi_handle_t *tv_handler; + +extern int stream_open_tv(stream_t *stream, tvi_handle_t *tvh); #endif // Open a new stream (stdin/file/vcd/url) @@ -249,14 +251,29 @@ #ifdef USE_TV //============ Check for TV-input ==== - if (tv_param_on==1) + if (tv_param_on == 1) { - stream = new_stream(-1,STREAMTYPE_TV); + /* create stream */ + stream = new_stream(-1, STREAMTYPE_TV); + if (!stream) + return(NULL); + + /* create tvi handler */ tv_handler = tv_begin(); if (!tv_handler) return(NULL); - if (tv_init(tv_handler) == 1) - return(stream); + + /* preinit */ + if (!tv_init(tv_handler)) + goto tv_err; + + if (!stream_open_tv(stream, tv_handler)) + goto tv_err; + + return(stream); + + /* something went wrong - uninit */ +tv_err: tv_uninit(tv_handler); return(NULL); } diff -r 511f8eba46be -r bce9c945b29c libmpdemux/tv.c --- a/libmpdemux/tv.c Fri Nov 16 21:14:38 2001 +0000 +++ b/libmpdemux/tv.c Fri Nov 16 21:30:10 2001 +0000 @@ -3,7 +3,7 @@ API idea based on libvo2's - UNDER HEAVY DEVELOPEMENT, DO NOT USE! :) + UNDER HEAVY DEVELOPEMENT, NO FEATURE REQUESTS PLEASE! :) */ #include @@ -53,7 +53,7 @@ demux_packet_t* dp; int len; - mp_msg(MSGT_DEMUX, MSGL_DBG2, "demux_tv_fill_buffer(sequence:%d) called!\n", seq); + mp_dbg(MSGT_DEMUX, MSGL_DBG2, "demux_tv_fill_buffer(sequence:%d) called!\n", seq); // demux->filepos = -1; @@ -88,6 +88,10 @@ return 1; } +int stream_open_tv(stream_t *stream, tvi_handle_t *tvh) +{ +} + int demux_open_tv(demuxer_t *demuxer, tvi_handle_t *tvh) { sh_video_t *sh_video = NULL; @@ -176,6 +180,7 @@ demuxer->video->sh = sh_video; sh_video->ds = demuxer->video; demuxer->video->id = 0; + demuxer->seekable = 0; /* here comes audio init */ if (funcs->control(tvh->priv, TVI_CONTROL_IS_AUDIO, 0) == TVI_CONTROL_TRUE) diff -r 511f8eba46be -r bce9c945b29c libmpdemux/tv.h --- a/libmpdemux/tv.h Fri Nov 16 21:14:38 2001 +0000 +++ b/libmpdemux/tv.h Fri Nov 16 21:30:10 2001 +0000 @@ -97,9 +97,8 @@ #define TVI_CONTROL_SPC_GET_INPUT 0x401 /* set input channel (tv,s-video,composite..) */ #define TVI_CONTROL_SPC_SET_INPUT 0x402 /* set input channel (tv,s-video,composite..) */ -//extern int demux_tv_fill_buffer(demuxer_t *demux, tvi_handle_t *tvh); -//extern int demux_open_tv(demuxer_t *demux, tvi_handle_t *tvh); extern tvi_handle_t *tv_begin(void); extern int tv_init(tvi_handle_t *tvh); +extern int tv_uninit(tvi_handle_t *tvh); #endif /* USE_TV */ diff -r 511f8eba46be -r bce9c945b29c libmpdemux/tvi_v4l.c --- a/libmpdemux/tvi_v4l.c Fri Nov 16 21:14:38 2001 +0000 +++ b/libmpdemux/tvi_v4l.c Fri Nov 16 21:30:10 2001 +0000 @@ -22,6 +22,8 @@ #include #include #include +#include +#include #include "mp_msg.h" #include "../libao2/afmt.h" @@ -349,7 +351,6 @@ /* video buffers */ priv->buf = (struct video_mmap *)malloc(priv->nbuf * sizeof(struct video_mmap)); memset(priv->buf, 0, priv->nbuf * sizeof(struct video_mmap)); - return(1); @@ -363,6 +364,8 @@ { close(priv->fd); #warning "Implement uninit!" + + return(1); } static int start(priv_t *priv) @@ -404,6 +407,20 @@ mp_msg(MSGT_TV, MSGL_DBG2, "buffer: %d => %p\n", i, &priv->buf[i]); } +#if 0 + { + struct video_play_mode pmode; + + pmode.mode = VID_PLAY_NORMAL; + pmode.p1 = 1; + pmode.p2 = 0; + if (ioctl(priv->fd, VIDIOCSPLAYMODE, &pmode) == -1) + { + mp_msg(MSGT_TV, MSGL_ERR, "ioctl set play mode failed: %s\n", strerror(errno)); +// return(0); + } + } +#endif #if 0 { @@ -709,10 +726,10 @@ int frame = priv->queue % priv->nbuf; int nextframe = (priv->queue+1) % priv->nbuf; - mp_msg(MSGT_TV, MSGL_DBG2, "grab_video_frame(priv=%p, buffer=%p, len=%d\n", + mp_dbg(MSGT_TV, MSGL_DBG2, "grab_video_frame(priv=%p, buffer=%p, len=%d\n", priv, buffer, len); - mp_msg(MSGT_TV, MSGL_DBG3, "buf: %p + frame: %d => %p\n", + mp_dbg(MSGT_TV, MSGL_DBG3, "buf: %p + frame: %d => %p\n", priv->buf, nextframe, &priv->buf[nextframe]); if (ioctl(priv->fd, VIDIOCMCAPTURE, &priv->buf[nextframe]) == -1) { @@ -724,9 +741,14 @@ mp_msg(MSGT_TV, MSGL_ERR, "ioctl sync failed: %s\n", strerror(errno)); priv->queue++; - mp_msg(MSGT_TV, MSGL_DBG3, "mmap: %p + offset: %d => %p\n", + mp_dbg(MSGT_TV, MSGL_DBG3, "mmap: %p + offset: %d => %p\n", priv->mmap, priv->mbuf.offsets[frame], priv->mmap+priv->mbuf.offsets[frame]); + + /* XXX also directrendering would be nicer! */ + /* 3 times copying the same picture to other buffer :( */ + + /* copy the actual frame */ memcpy(buffer, priv->mmap+priv->mbuf.offsets[frame], len); return(len); @@ -734,16 +756,17 @@ static int get_video_framesize(priv_t *priv) { - return priv->bytesperline * priv->height; + return(priv->bytesperline * priv->height); } static int grab_audio_frame(priv_t *priv, char *buffer, int len) { + return(65536); } static int get_audio_framesize(priv_t *priv) { - return 65536; + return(65536); } #endif /* USE_TV */