summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-15 00:23:16 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-15 00:23:16 +0000
commitb28a18c13731695cf7a29080984d14da6621da3c (patch)
treed8c102abe70333067dd86f8f7c37ff328cda1afd
parent6bc31aecea7dccc9bcdfa4cd05fb7d7a94e80e10 (diff)
downloadmpv-b28a18c13731695cf7a29080984d14da6621da3c.tar.bz2
mpv-b28a18c13731695cf7a29080984d14da6621da3c.tar.xz
hw spu support for dxr3 - patch by David Holm
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4161 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--DOCS/DXR331
-rw-r--r--libvo/vo_dxr3.c24
-rw-r--r--mplayer.c11
3 files changed, 44 insertions, 22 deletions
diff --git a/DOCS/DXR3 b/DOCS/DXR3
index cc58c19e57..94b794de15 100644
--- a/DOCS/DXR3
+++ b/DOCS/DXR3
@@ -17,20 +17,23 @@ How to use a Sigma Designs Hollywood Plus and/or a Creative DXR3 by David Holm
2. Usage
- -vo dxr3:<devicenum> For video output
- -ao oss:<devicefile> For audio output
- -ac hwac3 For digital audio output instead of analog
- -vc mpegpes For mpeg playback
- <devicenum> Number of device to use for playback (if you
- have more than one card.). This can usually
- be left out (-vo dxr3).
- Mandrake 8.1 uses devfs by default. If you are
- running mandrake 8.1 please use -vo dxr3:0
- <devicefile> Normally /dev/em8300_ma or
- /dev/em8300_ma-<devicenum>
- (-ao dxr3:/dev/em8300_ma). If left out the
- default oss device will be used (normally
- soundcard).
+ -vo dxr3:<devicenum> For video output
+ -ao oss:<devicefile> For audio output
+ -ac hwac3 For digital audio output instead of
+ analog
+ -vc mpegpes For mpeg playback
+ -aop list=resample:fout=48000 If samplerate is below 44100Hz
+ <devicenum> Number of device to use for playback
+ (if you have more than one card.).
+ This can usually be left out (-vo dxr3).
+ Mandrake 8.1 uses devfs by default. If
+ you are running mandrake 8.1 please use
+ -vo dxr3:0
+ <devicefile> Normally /dev/em8300_ma or
+ /dev/em8300_ma-<devicenum>
+ (-ao dxr3:/dev/em8300_ma). If left out
+ the default oss device will be used
+ (normally soundcard).
MPEG-1, MPEG-2, VCD and DVD Notes
There are some important notes to take into account here for optimum playback.
diff --git a/libvo/vo_dxr3.c b/libvo/vo_dxr3.c
index 453394d12e..2fee2a0175 100644
--- a/libvo/vo_dxr3.c
+++ b/libvo/vo_dxr3.c
@@ -91,6 +91,8 @@ void write_dxr3(rte_context* context, void* data, size_t size, void* user_data)
}
#endif
+extern int vidmode;
+
static uint32_t init(uint32_t scr_width, uint32_t scr_height, uint32_t width, uint32_t height, uint32_t fullscreen, char *title, uint32_t format)
{
int tmp1,tmp2;
@@ -112,7 +114,7 @@ static uint32_t init(uint32_t scr_width, uint32_t scr_height, uint32_t width, ui
sprintf(devname, "/dev/em8300_mv-%s", vo_subdevice);
else
sprintf(devname, "/dev/em8300_mv");
- fd_video = open(devname, O_WRONLY);
+ fd_video = open(devname, O_WRONLY | O_NONBLOCK);
if (fd_video < 0) {
printf("VO: [dxr3] Error opening %s for writing!\n", devname);
uninit();
@@ -135,7 +137,7 @@ static uint32_t init(uint32_t scr_width, uint32_t scr_height, uint32_t width, ui
/* Subpic code isn't working yet, don't set to ON
* unless you are really sure what you are doing
*/
- ioval = EM8300_SPUMODE_OFF;
+ ioval = EM8300_SPUMODE_ON;
if (ioctl(fd_control, EM8300_IOCTL_SET_SPUMODE, &ioval) < 0) {
printf("VO: [dxr3] Unable to set subpicture mode!\n");
uninit();
@@ -332,11 +334,19 @@ static uint32_t draw_frame(uint8_t * src[])
vo_mpegpes_t *p = (vo_mpegpes_t *) src[0];
size_t data_left = p->size;
- if (ioctl(fd_video, EM8300_IOCTL_VIDEO_SETPTS, &vo_pts) < 0)
- printf("VO: [dxr3] Unable to set pts\n");
+ if (p->id == 0x20) {
+ if (ioctl(fd_spu, EM8300_IOCTL_SPU_SETPTS, &vo_pts) < 0)
+ printf("VO: [dxr3] Unable to set pts\n");
+
+ while (data_left)
+ data_left -= write(fd_spu, (void*) (p->data + p->size-data_left), data_left);
+ } else {
+ if (ioctl(fd_video, EM8300_IOCTL_VIDEO_SETPTS, &vo_pts) < 0)
+ printf("VO: [dxr3] Unable to set pts\n");
- while (data_left)
- data_left -= write(fd_video, (void*) (p->data + p->size-data_left), data_left);
+ while (data_left)
+ data_left -= write(fd_video, (void*) (p->data + p->size-data_left), data_left);
+ }
return 0;
}
#ifdef USE_MP1E
@@ -439,7 +449,7 @@ static uint32_t query_format(uint32_t format)
uint32_t flag = 0;
if (format == IMGFMT_MPEGPES)
- flag = 0x2 | 0x4;
+ flag = 0x2 | 0x4 | 0x8;
#ifdef USE_MP1E
if (format == IMGFMT_YV12)
flag = 0x1 | 0x4;
diff --git a/mplayer.c b/mplayer.c
index 2f99326255..9e927afd89 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -2333,7 +2333,16 @@ if(rel_seek_secs || abs_seek_pos){
#ifdef USE_DVDREAD
// DVD sub:
- if(vo_spudec){
+ if(vo_flags & 0x08){
+ static vo_mpegpes_t packet;
+ static vo_mpegpes_t *pkg=&packet;
+ packet.timestamp=sh_video->timer*90000.0;
+ packet.id=0x20; /* Subpic */
+ while((packet.size=ds_get_packet_sub(d_dvdsub,&packet.data))>0){
+ mp_msg(MSGT_CPLAYER,MSGL_V,"\rDVD sub: len=%d v_pts=%5.3f s_pts=%5.3f \n",packet.size,d_video->pts,d_dvdsub->pts);
+ video_out->draw_frame(&pkg);
+ }
+ }else if(vo_spudec){
unsigned char* packet=NULL;
int len;
current_module="spudec";