summaryrefslogtreecommitdiff
path: root/linux/drivers/media/dvb/ttpci/av7110_av.c
diff options
context:
space:
mode:
authorJohannes Stezenbach <devnull@localhost>2004-01-06 16:37:12 +0000
committerJohannes Stezenbach <devnull@localhost>2004-01-06 16:37:12 +0000
commitc426a1ce013912765b250fe8efcb05404438c007 (patch)
tree61fd4ad56ef9b9d90d593a776a4638f1537d7eb9 /linux/drivers/media/dvb/ttpci/av7110_av.c
parente1e895d56f5436855e6beaebbcb143171b7398e6 (diff)
downloadmediapointer-dvb-s2-c426a1ce013912765b250fe8efcb05404438c007.tar.gz
mediapointer-dvb-s2-c426a1ce013912765b250fe8efcb05404438c007.tar.bz2
coding style & whitespace
Diffstat (limited to 'linux/drivers/media/dvb/ttpci/av7110_av.c')
-rw-r--r--linux/drivers/media/dvb/ttpci/av7110_av.c1712
1 files changed, 845 insertions, 867 deletions
diff --git a/linux/drivers/media/dvb/ttpci/av7110_av.c b/linux/drivers/media/dvb/ttpci/av7110_av.c
index cf291c10b..51a40c25d 100644
--- a/linux/drivers/media/dvb/ttpci/av7110_av.c
+++ b/linux/drivers/media/dvb/ttpci/av7110_av.c
@@ -46,51 +46,52 @@ extern int av7110_debug;
#include "av7110_av.h"
#include "av7110_ipack.h"
+/* MPEG-2 (ISO 13818 / H.222.0) stream types */
#define PROG_STREAM_MAP 0xBC
#define PRIVATE_STREAM1 0xBD
-#define PADDING_STREAM 0xBE
+#define PADDING_STREAM 0xBE
#define PRIVATE_STREAM2 0xBF
-#define AUDIO_STREAM_S 0xC0
-#define AUDIO_STREAM_E 0xDF
-#define VIDEO_STREAM_S 0xE0
-#define VIDEO_STREAM_E 0xEF
-#define ECM_STREAM 0xF0
-#define EMM_STREAM 0xF1
-#define DSM_CC_STREAM 0xF2
+#define AUDIO_STREAM_S 0xC0
+#define AUDIO_STREAM_E 0xDF
+#define VIDEO_STREAM_S 0xE0
+#define VIDEO_STREAM_E 0xEF
+#define ECM_STREAM 0xF0
+#define EMM_STREAM 0xF1
+#define DSM_CC_STREAM 0xF2
#define ISO13522_STREAM 0xF3
#define PROG_STREAM_DIR 0xFF
-#define PTS_DTS_FLAGS 0xC0
+#define PTS_DTS_FLAGS 0xC0
//pts_dts flags
-#define PTS_ONLY 0x80
-#define PTS_DTS 0xC0
-#define TS_SIZE 188
-#define TRANS_ERROR 0x80
-#define PAY_START 0x40
-#define TRANS_PRIO 0x20
-#define PID_MASK_HI 0x1F
+#define PTS_ONLY 0x80
+#define PTS_DTS 0xC0
+#define TS_SIZE 188
+#define TRANS_ERROR 0x80
+#define PAY_START 0x40
+#define TRANS_PRIO 0x20
+#define PID_MASK_HI 0x1F
//flags
-#define TRANS_SCRMBL1 0x80
-#define TRANS_SCRMBL2 0x40
-#define ADAPT_FIELD 0x20
-#define PAYLOAD 0x10
-#define COUNT_MASK 0x0F
+#define TRANS_SCRMBL1 0x80
+#define TRANS_SCRMBL2 0x40
+#define ADAPT_FIELD 0x20
+#define PAYLOAD 0x10
+#define COUNT_MASK 0x0F
// adaptation flags
-#define DISCON_IND 0x80
-#define RAND_ACC_IND 0x40
-#define ES_PRI_IND 0x20
-#define PCR_FLAG 0x10
-#define OPCR_FLAG 0x08
-#define SPLICE_FLAG 0x04
-#define TRANS_PRIV 0x02
-#define ADAP_EXT_FLAG 0x01
+#define DISCON_IND 0x80
+#define RAND_ACC_IND 0x40
+#define ES_PRI_IND 0x20
+#define PCR_FLAG 0x10
+#define OPCR_FLAG 0x08
+#define SPLICE_FLAG 0x04
+#define TRANS_PRIV 0x02
+#define ADAP_EXT_FLAG 0x01
// adaptation extension flags
-#define LTW_FLAG 0x80
-#define PIECE_RATE 0x40
-#define SEAM_SPLICE 0x20
+#define LTW_FLAG 0x80
+#define PIECE_RATE 0x40
+#define SEAM_SPLICE 0x20
static void p_to_t(u8 const *buf, long int length, u16 pid,
@@ -99,287 +100,277 @@ static void p_to_t(u8 const *buf, long int length, u16 pid,
int record_cb(struct dvb_filter_pes2ts *p2t, u8 *buf, size_t len)
{
- struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) p2t->priv;
-
-// DEB_EE(("struct dvb_filter_pes2ts:%p\n",p2t));
-
- if (!(dvbdmxfeed->ts_type & TS_PACKET))
- return 0;
- if (buf[3]==0xe0) // video PES do not have a length in TS
- buf[4]=buf[5]=0;
- if (dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY)
- return dvbdmxfeed->cb.ts(buf, len, 0, 0,
- &dvbdmxfeed->feed.ts, DMX_OK);
- else
- return dvb_filter_pes2ts(p2t, buf, len, 1);
+ struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *) p2t->priv;
+
+// DEB_EE(("struct dvb_filter_pes2ts:%p\n", p2t));
+
+ if (!(dvbdmxfeed->ts_type & TS_PACKET))
+ return 0;
+ if (buf[3] == 0xe0) // video PES do not have a length in TS
+ buf[4] = buf[5] = 0;
+ if (dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY)
+ return dvbdmxfeed->cb.ts(buf, len, 0, 0,
+ &dvbdmxfeed->feed.ts, DMX_OK);
+ else
+ return dvb_filter_pes2ts(p2t, buf, len, 1);
}
static int dvb_filter_pes2ts_cb(void *priv, unsigned char *data)
{
- struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) priv;
+ struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *) priv;
-// DEB_EE(("dvb_demux_feed:%p\n",dvbdmxfeed));
+// DEB_EE(("dvb_demux_feed:%p\n", dvbdmxfeed));
- dvbdmxfeed->cb.ts(data, 188, 0, 0,
- &dvbdmxfeed->feed.ts,
- DMX_OK);
- return 0;
+ dvbdmxfeed->cb.ts(data, 188, 0, 0,
+ &dvbdmxfeed->feed.ts, DMX_OK);
+ return 0;
}
int AV_StartRecord(struct av7110 *av7110, int av,
struct dvb_demux_feed *dvbdmxfeed)
{
- struct dvb_demux *dvbdmx=dvbdmxfeed->demux;
-
- DEB_EE(("av7110: %p, dvb_demux_feed:%p\n",av7110,dvbdmxfeed));
-
- if (av7110->playing||(av7110->rec_mode&av))
- return -EBUSY;
- outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0);
- dvbdmx->recording=1;
- av7110->rec_mode|=av;
-
- switch (av7110->rec_mode) {
- case RP_AUDIO:
- dvb_filter_pes2ts_init (&av7110->p2t[0],
- dvbdmx->pesfilter[0]->pid,
- dvb_filter_pes2ts_cb,
- (void *)dvbdmx->pesfilter[0]);
- outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AudioPES, 0);
- break;
+ struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
+
+ DEB_EE(("av7110: %p, dvb_demux_feed:%p\n", av7110, dvbdmxfeed));
+
+ if (av7110->playing || (av7110->rec_mode & av))
+ return -EBUSY;
+ outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0);
+ dvbdmx->recording = 1;
+ av7110->rec_mode |= av;
+
+ switch (av7110->rec_mode) {
+ case RP_AUDIO:
+ dvb_filter_pes2ts_init(&av7110->p2t[0],
+ dvbdmx->pesfilter[0]->pid,
+ dvb_filter_pes2ts_cb,
+ (void *) dvbdmx->pesfilter[0]);
+ outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AudioPES, 0);
+ break;
case RP_VIDEO:
- dvb_filter_pes2ts_init (&av7110->p2t[1],
- dvbdmx->pesfilter[1]->pid,
- dvb_filter_pes2ts_cb,
- (void *)dvbdmx->pesfilter[1]);
- outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, VideoPES, 0);
- break;
+ dvb_filter_pes2ts_init(&av7110->p2t[1],
+ dvbdmx->pesfilter[1]->pid,
+ dvb_filter_pes2ts_cb,
+ (void *) dvbdmx->pesfilter[1]);
+ outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, VideoPES, 0);
+ break;
case RP_AV:
- dvb_filter_pes2ts_init (&av7110->p2t[0],
- dvbdmx->pesfilter[0]->pid,
- dvb_filter_pes2ts_cb,
- (void *)dvbdmx->pesfilter[0]);
- dvb_filter_pes2ts_init (&av7110->p2t[1],
- dvbdmx->pesfilter[1]->pid,
- dvb_filter_pes2ts_cb,
- (void *)dvbdmx->pesfilter[1]);
- outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AV_PES, 0);
- break;
- }
- return 0;
+ dvb_filter_pes2ts_init(&av7110->p2t[0],
+ dvbdmx->pesfilter[0]->pid,
+ dvb_filter_pes2ts_cb,
+ (void *) dvbdmx->pesfilter[0]);
+ dvb_filter_pes2ts_init(&av7110->p2t[1],
+ dvbdmx->pesfilter[1]->pid,
+ dvb_filter_pes2ts_cb,
+ (void *) dvbdmx->pesfilter[1]);
+ outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AV_PES, 0);
+ break;
+ }
+ return 0;
}
int AV_StartPlay(struct av7110 *av7110, int av)
{
- DEB_EE(("av7110: %p\n",av7110));
-
- if (av7110->rec_mode)
- return -EBUSY;
- if (av7110->playing&av)
- return -EBUSY;
-
- outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0);
-
- if (av7110->playing == RP_NONE) {
- av7110_ipack_reset(&av7110->ipack[0]);
- av7110_ipack_reset(&av7110->ipack[1]);
- }
-
- av7110->playing|=av;
- switch (av7110->playing) {
- case RP_AUDIO:
- outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AudioPES, 0);
- break;
- case RP_VIDEO:
- outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, VideoPES, 0);
- av7110->sinfo=0;
- break;
- case RP_AV:
- av7110->sinfo=0;
- outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AV_PES, 0);
- break;
- }
- return av7110->playing;
+ DEB_EE(("av7110: %p\n", av7110));
+
+ if (av7110->rec_mode)
+ return -EBUSY;
+ if (av7110->playing & av)
+ return -EBUSY;
+
+ outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0);
+
+ if (av7110->playing == RP_NONE) {
+ av7110_ipack_reset(&av7110->ipack[0]);
+ av7110_ipack_reset(&av7110->ipack[1]);
+ }
+
+ av7110->playing |= av;
+ switch (av7110->playing) {
+ case RP_AUDIO:
+ outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AudioPES, 0);
+ break;
+ case RP_VIDEO:
+ outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, VideoPES, 0);
+ av7110->sinfo = 0;
+ break;
+ case RP_AV:
+ av7110->sinfo = 0;
+ outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AV_PES, 0);
+ break;
+ }
+ return av7110->playing;
}
void AV_Stop(struct av7110 *av7110, int av)
{
- DEB_EE(("av7110: %p\n",av7110));
-
- if (!(av7110->playing&av) && !(av7110->rec_mode&av))
- return;
-
- outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0);
- if (av7110->playing) {
- av7110->playing&=~av;
- switch (av7110->playing) {
- case RP_AUDIO:
- outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AudioPES, 0);
- break;
- case RP_VIDEO:
- outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, VideoPES, 0);
- break;
- case RP_NONE:
- SetMode(av7110, av7110->vidmode);
- break;
- }
- } else {
- av7110->rec_mode&=~av;
- switch (av7110->rec_mode) {
- case RP_AUDIO:
- outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AudioPES, 0);
- break;
- case RP_VIDEO:
- outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, VideoPES, 0);
- break;
- case RP_NONE:
- break;
- }
- }
-}
+ DEB_EE(("av7110: %p\n", av7110));
+ if (!(av7110->playing & av) && !(av7110->rec_mode & av))
+ return;
-u8 pshead[0x26] = {
- 0x00, 0x00, 0x01, 0xba, 0x5f, 0xff, 0xfe, 0xe6,
- 0xc4, 0x01, 0x01, 0x89, 0xc3, 0xf8, 0x00, 0x00,
- 0x01, 0xbb, 0x00, 0x12, 0x80, 0xc4, 0xe1, 0x00,
- 0xe1, 0xff, 0xb9, 0xe0, 0xe8, 0xb8, 0xc0, 0x20,
- 0xbd, 0xe0, 0x44, 0xbf, 0xe0, 0x02,
-};
+ outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0);
+ if (av7110->playing) {
+ av7110->playing &= ~av;
+ switch (av7110->playing) {
+ case RP_AUDIO:
+ outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AudioPES, 0);
+ break;
+ case RP_VIDEO:
+ outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, VideoPES, 0);
+ break;
+ case RP_NONE:
+ SetMode(av7110, av7110->vidmode);
+ break;
+ }
+ } else {
+ av7110->rec_mode &= ~av;
+ switch (av7110->rec_mode) {
+ case RP_AUDIO:
+ outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AudioPES, 0);
+ break;
+ case RP_VIDEO:
+ outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, VideoPES, 0);
+ break;
+ case RP_NONE:
+ break;
+ }
+ }
+}
int pes_play(void *dest, struct dvb_ringbuffer *buf, int dlen)
{
- int len;
- u32 sync;
- u16 blen;
-
- DEB_EE(("dvb_ring_buffer_t: %p\n",buf));
-
- if (!dlen) {
- wake_up(&buf->queue);
- return -1;
- }
- while (1) {
- if ((len=dvb_ringbuffer_avail(buf)) < 6)
- return -1;
- sync= DVB_RINGBUFFER_PEEK(buf,0)<<24;
- sync|=DVB_RINGBUFFER_PEEK(buf,1)<<16;
- sync|=DVB_RINGBUFFER_PEEK(buf,2)<<8;
- sync|=DVB_RINGBUFFER_PEEK(buf,3);
-
- if (((sync&~0x0f)==0x000001e0) ||
- ((sync&~0x1f)==0x000001c0) ||
- (sync==0x000001bd))
- break;
- printk("resync\n");
- DVB_RINGBUFFER_SKIP(buf,1);
- }
- blen= DVB_RINGBUFFER_PEEK(buf,4)<<8;
- blen|=DVB_RINGBUFFER_PEEK(buf,5);
- blen+=6;
- if (len<blen || blen>dlen) {
- //printk("buffer empty - avail %d blen %u dlen %d\n",len,blen,dlen);
- wake_up(&buf->queue);
- return -1;
- }
-
- (void)dvb_ringbuffer_read(buf,dest,(size_t)blen,0);
-
- DEB_S(("pread=0x%08lx, pwrite=0x%08lx\n",(unsigned long)buf->pread, (unsigned long)buf->pwrite));
- wake_up(&buf->queue);
- return blen;
+ int len;
+ u32 sync;
+ u16 blen;
+
+ DEB_EE(("dvb_ring_buffer_t: %p\n", buf));
+
+ if (!dlen) {
+ wake_up(&buf->queue);
+ return -1;
+ }
+ while (1) {
+ if ((len = dvb_ringbuffer_avail(buf)) < 6)
+ return -1;
+ sync = DVB_RINGBUFFER_PEEK(buf, 0) << 24;
+ sync |= DVB_RINGBUFFER_PEEK(buf, 1) << 16;
+ sync |= DVB_RINGBUFFER_PEEK(buf, 2) << 8;
+ sync |= DVB_RINGBUFFER_PEEK(buf, 3);
+
+ if (((sync &~ 0x0f) == 0x000001e0) ||
+ ((sync &~ 0x1f) == 0x000001c0) ||
+ (sync == 0x000001bd))
+ break;
+ printk("resync\n");
+ DVB_RINGBUFFER_SKIP(buf, 1);
+ }
+ blen = DVB_RINGBUFFER_PEEK(buf, 4) << 8;
+ blen |= DVB_RINGBUFFER_PEEK(buf, 5);
+ blen += 6;
+ if (len < blen || blen > dlen) {
+ //printk("buffer empty - avail %d blen %u dlen %d\n", len, blen, dlen);
+ wake_up(&buf->queue);
+ return -1;
+ }
+
+ dvb_ringbuffer_read(buf, dest, (size_t) blen, 0);
+
+ DEB_S(("pread=0x%08lx, pwrite=0x%08lx\n",
+ (unsigned long) buf->pread, (unsigned long) buf->pwrite));
+ wake_up(&buf->queue);
+ return blen;
}
int SetVolume(struct av7110 *av7110, int volleft, int volright)
{
- int err, vol, val, balance = 0;
-
- DEB_EE(("av7110: %p\n",av7110));
-
- switch (av7110->adac_type) {
- case DVB_ADAC_TI:
- volleft = (volleft * 256) / 1036;
- volright = (volright * 256) / 1036;
- if (volleft > 0x3f)
- volleft = 0x3f;
- if (volright > 0x3f)
- volright = 0x3f;
- if ((err = SendDAC(av7110, 3, 0x80 + volleft)))
- return err;
- return SendDAC(av7110, 4, volright);
-
- case DVB_ADAC_CRYSTAL:
- volleft=127-volleft/2;
- volright=127-volright/2;
- i2c_writereg(av7110, 0x20, 0x03, volleft);
- i2c_writereg(av7110, 0x20, 0x04, volright);
- return 0;
-
- case DVB_ADAC_MSP:
- vol = (volleft > volright) ? volleft : volright;
- val = (vol * 0x73 / 255) << 8;
- if (vol > 0) {
- balance = ((volright-volleft) * 127) / vol;
- }
+ int err, vol, val, balance = 0;
+
+ DEB_EE(("av7110: %p\n", av7110));
+
+ switch (av7110->adac_type) {
+ case DVB_ADAC_TI:
+ volleft = (volleft * 256) / 1036;
+ volright = (volright * 256) / 1036;
+ if (volleft > 0x3f)
+ volleft = 0x3f;
+ if (volright > 0x3f)
+ volright = 0x3f;
+ if ((err = SendDAC(av7110, 3, 0x80 + volleft)))
+ return err;
+ return SendDAC(av7110, 4, volright);
+
+ case DVB_ADAC_CRYSTAL:
+ volleft = 127 - volleft / 2;
+ volright = 127 - volright / 2;
+ i2c_writereg(av7110, 0x20, 0x03, volleft);
+ i2c_writereg(av7110, 0x20, 0x04, volright);
+ return 0;
+
+ case DVB_ADAC_MSP:
+ vol = (volleft > volright) ? volleft : volright;
+ val = (vol * 0x73 / 255) << 8;
+ if (vol > 0)
+ balance = ((volright - volleft) * 127) / vol;
msp_writereg(av7110, MSP_WR_DSP, 0x0001, balance << 8);
msp_writereg(av7110, MSP_WR_DSP, 0x0000, val); /* loudspeaker */
msp_writereg(av7110, MSP_WR_DSP, 0x0006, val); /* headphonesr */
return 0;
- }
- return 0;
+ }
+ return 0;
}
void SetMode(struct av7110 *av7110, int mode)
{
- DEB_EE(("av7110: %p\n",av7110));
+ DEB_EE(("av7110: %p\n", av7110));
- outcom(av7110, COMTYPE_ENCODER, LoadVidCode, 1, mode);
+ outcom(av7110, COMTYPE_ENCODER, LoadVidCode, 1, mode);
- if (!av7110->playing) {
- ChangePIDs(av7110, av7110->pids[DMX_PES_VIDEO],
- av7110->pids[DMX_PES_AUDIO],
- av7110->pids[DMX_PES_TELETEXT],
- 0, av7110->pids[DMX_PES_PCR]);
- outcom(av7110, COMTYPE_PIDFILTER, Scan, 0);
- }
+ if (!av7110->playing) {
+ ChangePIDs(av7110, av7110->pids[DMX_PES_VIDEO],
+ av7110->pids[DMX_PES_AUDIO],
+ av7110->pids[DMX_PES_TELETEXT],
+ 0, av7110->pids[DMX_PES_PCR]);
+ outcom(av7110, COMTYPE_PIDFILTER, Scan, 0);
+ }
}
static int sw2mode[16] = {
- VIDEO_MODE_PAL, VIDEO_MODE_NTSC, VIDEO_MODE_NTSC, VIDEO_MODE_PAL,
- VIDEO_MODE_NTSC, VIDEO_MODE_NTSC, VIDEO_MODE_PAL, VIDEO_MODE_NTSC,
- VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL,
- VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL,
+ VIDEO_MODE_PAL, VIDEO_MODE_NTSC, VIDEO_MODE_NTSC, VIDEO_MODE_PAL,
+ VIDEO_MODE_NTSC, VIDEO_MODE_NTSC, VIDEO_MODE_PAL, VIDEO_MODE_NTSC,
+ VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL,
+ VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL,
};
static void get_video_format(struct av7110 *av7110, u8 *buf, int count)
{
- int i;
- int hsize,vsize;
- int sw;
- u8 *p;
-
- DEB_EE(("av7110: %p\n",av7110));
-
- if (av7110->sinfo)
- return;
- for (i=7; i<count-10; i++) {
- p=buf+i;
- if (p[0] || p[1] || p[2]!=0x01 || p[3]!=0xb3)
- continue;
- p+=4;
- hsize = ((p[1] &0xF0) >> 4) | (p[0] << 4);
- vsize = ((p[1] &0x0F) << 8) | (p[2]);
- sw = (p[3]&0x0F);
- SetMode(av7110, sw2mode[sw]);
- DEB_S(("dvb: playback %dx%d fr=%d\n", hsize, vsize, sw));
- av7110->sinfo=1;
- break;
- }
+ int i;
+ int hsize, vsize;
+ int sw;
+ u8 *p;
+
+ DEB_EE(("av7110: %p\n", av7110));
+
+ if (av7110->sinfo)
+ return;
+ for (i = 7; i < count - 10; i++) {
+ p = buf + i;
+ if (p[0] || p[1] || p[2] != 0x01 || p[3] != 0xb3)
+ continue;
+ p += 4;
+ hsize = ((p[1] &0xF0) >> 4) | (p[0] << 4);
+ vsize = ((p[1] &0x0F) << 8) | (p[2]);
+ sw = (p[3] & 0x0F);
+ SetMode(av7110, sw2mode[sw]);
+ DEB_S(("dvb: playback %dx%d fr=%d\n", hsize, vsize, sw));
+ av7110->sinfo = 1;
+ break;
+ }
}
@@ -390,150 +381,149 @@ static void get_video_format(struct av7110 *av7110, u8 *buf, int count)
static inline long aux_ring_buffer_write(struct dvb_ringbuffer *rbuf,
const char *buf, unsigned long count)
{
- unsigned long todo = count;
- int free;
+ unsigned long todo = count;
+ int free;
+
+ while (todo > 0) {
+ if (dvb_ringbuffer_free(rbuf) < 2048) {
+ if (wait_event_interruptible(rbuf->queue,
+ (dvb_ringbuffer_free(rbuf) >= 2048)))
+ return count - todo;
+ }
+ free = dvb_ringbuffer_free(rbuf);
+ if (free > todo)
+ free = todo;
+ dvb_ringbuffer_write(rbuf, buf, free, 0);
+ todo -= free;
+ buf += free;
+ }
- while (todo > 0) {
- if (dvb_ringbuffer_free(rbuf)<2048) {
- if (wait_event_interruptible(rbuf->queue,
- (dvb_ringbuffer_free(rbuf)>=2048)))
- return count-todo;
- }
- free = dvb_ringbuffer_free(rbuf);
- if (free > todo)
- free = todo;
- (void)dvb_ringbuffer_write(rbuf,buf,free,0);
- todo -= free;
- buf += free;
- }
-
- return count-todo;
+ return count - todo;
}
static void play_video_cb(u8 *buf, int count, void *priv)
{
- struct av7110 *av7110=(struct av7110 *) priv;
- DEB_EE(("av7110: %p\n",av7110));
-
- if ((buf[3]&0xe0)==0xe0) {
- get_video_format(av7110, buf, count);
- aux_ring_buffer_write(&av7110->avout, buf, count);
- } else
- aux_ring_buffer_write(&av7110->aout, buf, count);
+ struct av7110 *av7110 = (struct av7110 *) priv;
+ DEB_EE(("av7110: %p\n", av7110));
+
+ if ((buf[3] & 0xe0) == 0xe0) {
+ get_video_format(av7110, buf, count);
+ aux_ring_buffer_write(&av7110->avout, buf, count);
+ } else
+ aux_ring_buffer_write(&av7110->aout, buf, count);
}
static void play_audio_cb(u8 *buf, int count, void *priv)
{
- struct av7110 *av7110=(struct av7110 *) priv;
- DEB_EE(("av7110: %p\n",av7110));
+ struct av7110 *av7110 = (struct av7110 *) priv;
+ DEB_EE(("av7110: %p\n", av7110));
- aux_ring_buffer_write(&av7110->aout, buf, count);
+ aux_ring_buffer_write(&av7110->aout, buf, count);
}
-#define FREE_COND (dvb_ringbuffer_free(&av7110->avout)>=20*1024 && \
- dvb_ringbuffer_free(&av7110->aout)>=20*1024)
+#define FREE_COND (dvb_ringbuffer_free(&av7110->avout) >= 20 * 1024 && \
+ dvb_ringbuffer_free(&av7110->aout) >= 20 * 1024)
static ssize_t dvb_play(struct av7110 *av7110, const u8 *buf,
unsigned long count, int nonblock, int type, int umem)
{
- unsigned long todo = count, n;
- DEB_EE(("av7110: %p\n",av7110));
+ unsigned long todo = count, n;
+ DEB_EE(("av7110: %p\n", av7110));
- if (!av7110->kbuf[type])
- return -ENOBUFS;
+ if (!av7110->kbuf[type])
+ return -ENOBUFS;
if (nonblock && !FREE_COND)
- return -EWOULDBLOCK;
-
- while (todo>0) {
- if (!FREE_COND) {
- if (nonblock)
- return count-todo;
- if (wait_event_interruptible(av7110->avout.queue,
- FREE_COND))
- return count-todo;
+ return -EWOULDBLOCK;
+
+ while (todo > 0) {
+ if (!FREE_COND) {
+ if (nonblock)
+ return count - todo;
+ if (wait_event_interruptible(av7110->avout.queue,
+ FREE_COND))
+ return count - todo;
}
- n=todo;
- if (n>IPACKS*2)
- n=IPACKS*2;
- if (umem) {
+ n = todo;
+ if (n > IPACKS * 2)
+ n = IPACKS * 2;
+ if (umem) {
if (copy_from_user(av7110->kbuf[type], buf, n))
- return -EFAULT;
- av7110_ipack_instant_repack(av7110->kbuf[type], n,
+ return -EFAULT;
+ av7110_ipack_instant_repack(av7110->kbuf[type], n,
&av7110->ipack[type]);
- } else {
- av7110_ipack_instant_repack(buf, n,
+ } else {
+ av7110_ipack_instant_repack(buf, n,
&av7110->ipack[type]);
}
- todo -= n;
- buf += n;
- }
- return count-todo;
+ todo -= n;
+ buf += n;
+ }
+ return count - todo;
}
static ssize_t dvb_aplay(struct av7110 *av7110, const u8 *buf,
unsigned long count, int nonblock, int type)
{
- unsigned long todo = count, n;
- DEB_EE(("av7110: %p\n",av7110));
-
- if (!av7110->kbuf[type])
- return -ENOBUFS;
- if (nonblock && dvb_ringbuffer_free(&av7110->aout)<20*1024)
- return -EWOULDBLOCK;
-
- while (todo>0) {
- if (dvb_ringbuffer_free(&av7110->aout)<20*1024) {
- if (nonblock)
- return count-todo;
- if (wait_event_interruptible(av7110->aout.queue,
- (dvb_ringbuffer_free(&av7110->aout)>=
- 20*1024)))
+ unsigned long todo = count, n;
+ DEB_EE(("av7110: %p\n", av7110));
+
+ if (!av7110->kbuf[type])
+ return -ENOBUFS;
+ if (nonblock && dvb_ringbuffer_free(&av7110->aout) < 20 * 1024)
+ return -EWOULDBLOCK;
+
+ while (todo > 0) {
+ if (dvb_ringbuffer_free(&av7110->aout) < 20 * 1024) {
+ if (nonblock)
+ return count - todo;
+ if (wait_event_interruptible(av7110->aout.queue,
+ (dvb_ringbuffer_free(&av7110->aout) >= 20 * 1024)))
return count-todo;
- }
- n=todo;
- if (n>IPACKS*2)
- n=IPACKS*2;
+ }
+ n = todo;
+ if (n > IPACKS * 2)
+ n = IPACKS * 2;
if (copy_from_user(av7110->kbuf[type], buf, n))
- return -EFAULT;
- av7110_ipack_instant_repack(av7110->kbuf[type], n,
+ return -EFAULT;
+ av7110_ipack_instant_repack(av7110->kbuf[type], n,
&av7110->ipack[type]);
-// memcpy(dvb->kbuf[type], buf, n);
- todo -= n;
- buf += n;
- }
- return count-todo;
+ todo -= n;
+ buf += n;
+ }
+ return count - todo;
}
void init_p2t(struct av7110_p2t *p, struct dvb_demux_feed *feed)
{
- memset(p->pes,0,TS_SIZE);
+ memset(p->pes, 0, TS_SIZE);
p->counter = 0;
p->pos = 0;
p->frags = 0;
- if (feed) p->feed = feed;
+ if (feed)
+ p->feed = feed;
}
-void clear_p2t(struct av7110_p2t *p)
+static void clear_p2t(struct av7110_p2t *p)
{
- memset(p->pes,0,TS_SIZE);
+ memset(p->pes, 0, TS_SIZE);
// p->counter = 0;
p->pos = 0;
p->frags = 0;
}
-long int find_pes_header(u8 const *buf, long int length, int *frags)
+static int find_pes_header(u8 const *buf, long int length, int *frags)
{
int c = 0;
int found = 0;
*frags = 0;
- while (c < length-3 && !found) {
- if (buf[c] == 0x00 && buf[c+1] == 0x00 &&
- buf[c+2] == 0x01) {
- switch ( buf[c+3] ) {
+ while (c < length - 3 && !found) {
+ if (buf[c] == 0x00 && buf[c + 1] == 0x00 &&
+ buf[c + 2] == 0x01) {
+ switch ( buf[c + 3] ) {
case PROG_STREAM_MAP:
case PRIVATE_STREAM2:
case PROG_STREAM_DIR:
@@ -552,39 +542,43 @@ long int find_pes_header(u8 const *buf, long int length, int *frags)
c++;
break;
}
- } else c++;
+ } else
+ c++;
}
- if (c == length-3 && !found){
- if (buf[length-1] == 0x00) *frags = 1;
- if (buf[length-2] == 0x00 &&
- buf[length-1] == 0x00) *frags = 2;
- if (buf[length-3] == 0x00 &&
- buf[length-2] == 0x00 &&
- buf[length-1] == 0x01) *frags = 3;
+ if (c == length - 3 && !found) {
+ if (buf[length - 1] == 0x00)
+ *frags = 1;
+ if (buf[length - 2] == 0x00 &&
+ buf[length - 1] == 0x00)
+ *frags = 2;
+ if (buf[length - 3] == 0x00 &&
+ buf[length - 2] == 0x00 &&
+ buf[length - 1] == 0x01)
+ *frags = 3;
return -1;
}
return c;
}
-void pes_to_ts( u8 const *buf, long int length, u16 pid, struct av7110_p2t *p)
+void pes_to_ts(u8 const *buf, long int length, u16 pid, struct av7110_p2t *p)
{
- int c,c2,l,add;
- int check,rest;
+ int c, c2, l, add;
+ int check, rest;
c = 0;
c2 = 0;
if (p->frags){
check = 0;
- switch(p->frags){
+ switch(p->frags) {
case 1:
- if ( buf[c] == 0x00 && buf[c+1] == 0x01 ){
+ if (buf[c] == 0x00 && buf[c + 1] == 0x01) {
check = 1;
c += 2;
}
break;
case 2:
- if ( buf[c] == 0x01 ){
+ if (buf[c] == 0x01) {
check = 1;
c++;
}
@@ -592,8 +586,8 @@ void pes_to_ts( u8 const *buf, long int length, u16 pid, struct av7110_p2t *p)
case 3:
check = 1;
}
- if(check){
- switch ( buf[c] ) {
+ if (check) {
+ switch (buf[c]) {
case PROG_STREAM_MAP:
case PRIVATE_STREAM2:
case PROG_STREAM_DIR:
@@ -609,53 +603,52 @@ void pes_to_ts( u8 const *buf, long int length, u16 pid, struct av7110_p2t *p)
p->pes[1] = 0x00;
p->pes[2] = 0x01;
p->pes[3] = buf[c];
- p->pos=4;
- memcpy(p->pes+p->pos,buf+c,(TS_SIZE-4)-p->pos);
- c += (TS_SIZE-4)-p->pos;
- p_to_t(p->pes,(TS_SIZE-4),pid,&p->counter,
- p->feed);
+ p->pos = 4;
+ memcpy(p->pes + p->pos, buf + c, (TS_SIZE - 4) - p->pos);
+ c += (TS_SIZE - 4) - p->pos;
+ p_to_t(p->pes, (TS_SIZE - 4), pid, &p->counter, p->feed);
clear_p2t(p);
break;
default:
- c=0;
+ c = 0;
break;
}
}
p->frags = 0;
}
- if (p->pos){
- c2 = find_pes_header(buf+c,length-c,&p->frags);
- if (c2 >= 0 && c2 < (TS_SIZE-4)-p->pos){
+ if (p->pos) {
+ c2 = find_pes_header(buf + c, length - c, &p->frags);
+ if (c2 >= 0 && c2 < (TS_SIZE - 4) - p->pos)
l = c2+c;
- } else l = (TS_SIZE-4)-p->pos;
- memcpy(p->pes+p->pos,buf,l);
+ else
+ l = (TS_SIZE - 4) - p->pos;
+ memcpy(p->pes + p->pos, buf, l);
c += l;
p->pos += l;
- p_to_t(p->pes,p->pos,pid,&p->counter, p->feed);
+ p_to_t(p->pes, p->pos, pid, &p->counter, p->feed);
clear_p2t(p);
}
add = 0;
- while (c < length){
- c2 = find_pes_header(buf+c+add,length-c-add,&p->frags);
+ while (c < length) {
+ c2 = find_pes_header(buf + c + add, length - c - add, &p->frags);
if (c2 >= 0) {
- c2 += c+add;
+ c2 += c + add;
if (c2 > c){
- p_to_t(buf+c,c2-c,pid,&p->counter,
- p->feed);
+ p_to_t(buf + c, c2 - c, pid, &p->counter, p->feed);
c = c2;
clear_p2t(p);
add = 0;
- } else add = 1;
+ } else
+ add = 1;
} else {
- l = length-c;
- rest = l % (TS_SIZE-4);
+ l = length - c;
+ rest = l % (TS_SIZE - 4);
l -= rest;
- p_to_t(buf+c,l,pid,&p->counter,
- p->feed);
- memcpy(p->pes,buf+c+l,rest);
+ p_to_t(buf + c, l, pid, &p->counter, p->feed);
+ memcpy(p->pes, buf + c + l, rest);
p->pos = rest;
c = length;
}
@@ -668,32 +661,33 @@ int write_ts_header2(u16 pid, u8 *counter, int pes_start, u8 *buf, u8 length)
int i;
int c = 0;
int fill;
- u8 tshead[4] = { 0x47, 0x00, 0x00, 0x10};
-
- fill = (TS_SIZE-4)-length;
- if (pes_start) tshead[1] = 0x40;
- if (fill) tshead[3] = 0x30;
- tshead[1] |= (u8)((pid & 0x1F00) >> 8);
- tshead[2] |= (u8)(pid & 0x00FF);
- tshead[3] |= ((*counter)++ & 0x0F) ;
- memcpy(buf,tshead,4);
- c+=4;
-
-
- if (fill){
- buf[4] = fill-1;
+ u8 tshead[4] = { 0x47, 0x00, 0x00, 0x10 };
+
+ fill = (TS_SIZE - 4) - length;
+ if (pes_start)
+ tshead[1] = 0x40;
+ if (fill)
+ tshead[3] = 0x30;
+ tshead[1] |= (u8)((pid & 0x1F00) >> 8);
+ tshead[2] |= (u8)(pid & 0x00FF);
+ tshead[3] |= ((*counter)++ & 0x0F);
+ memcpy(buf, tshead, 4);
+ c += 4;
+
+ if (fill) {
+ buf[4] = fill - 1;
c++;
- if (fill >1){
+ if (fill > 1) {
buf[5] = 0x00;
c++;
}
- for ( i = 6; i < fill+4; i++){
+ for (i = 6; i < fill + 4; i++) {
buf[i] = 0xFF;
c++;
}
}
- return c;
+ return c;
}
@@ -702,12 +696,12 @@ static void p_to_t(u8 const *buf, long int length, u16 pid, u8 *counter,
{
int l, pes_start;
u8 obuf[TS_SIZE];
- long int c = 0;
+ long c = 0;
pes_start = 0;
- if ( length > 3 &&
- buf[0] == 0x00 && buf[1] == 0x00 && buf[2] == 0x01 )
- switch (buf[3]){
+ if (length > 3 &&
+ buf[0] == 0x00 && buf[1] == 0x00 && buf[2] == 0x01)
+ switch (buf[3]) {
case PROG_STREAM_MAP:
case PRIVATE_STREAM2:
case PROG_STREAM_DIR:
@@ -726,20 +720,20 @@ static void p_to_t(u8 const *buf, long int length, u16 pid, u8 *counter,
break;
}
- while ( c < length ){
- memset(obuf,0,TS_SIZE);
- if (length - c >= (TS_SIZE-4)){
- l = write_ts_header2(pid, counter, pes_start
- , obuf, (TS_SIZE-4));
- memcpy(obuf+l, buf+c, TS_SIZE-l);
- c += TS_SIZE-l;
+ while (c < length) {
+ memset(obuf, 0, TS_SIZE);
+ if (length - c >= (TS_SIZE - 4)){
+ l = write_ts_header2(pid, counter, pes_start,
+ obuf, (TS_SIZE - 4));
+ memcpy(obuf + l, buf + c, TS_SIZE - l);
+ c += TS_SIZE - l;
} else {
- l = write_ts_header2(pid, counter, pes_start
- , obuf, length-c);
- memcpy(obuf+l, buf+c, TS_SIZE-l);
+ l = write_ts_header2(pid, counter, pes_start,
+ obuf, length - c);
+ memcpy(obuf + l, buf + c, TS_SIZE - l);
c = length;
}
- feed->cb.ts(obuf, 188, 0, 0, &feed->feed.ts, DMX_OK);
+ feed->cb.ts(obuf, 188, 0, 0, &feed->feed.ts, DMX_OK);
pes_start = 0;
}
}
@@ -747,40 +741,39 @@ static void p_to_t(u8 const *buf, long int length, u16 pid, u8 *counter,
int av7110_write_to_decoder(struct dvb_demux_feed *feed, const u8 *buf, size_t len)
{
- struct dvb_demux *demux = feed->demux;
- struct av7110 *av7110 = (struct av7110 *) demux->priv;
- struct ipack *ipack = &av7110->ipack[feed->pes_type];
-
- DEB_EE(("av7110: %p\n",av7110));
-
- switch (feed->pes_type) {
- case 0:
- if (av7110->audiostate.stream_source==AUDIO_SOURCE_MEMORY)
- return -EINVAL;
- break;
- case 1:
- if (av7110->videostate.stream_source==VIDEO_SOURCE_MEMORY)
- return -EINVAL;
- break;
- default:
- return -1;
- }
-
- if (!(buf[3] & 0x10)) { // no payload?
- return -1;
- }
- if (buf[1] & 0x40)
- av7110_ipack_flush(ipack);
-
- if (buf[3] & 0x20) { // adaptation field?
- len -= buf[4]+1;
- buf += buf[4]+1;
- if (!len)
- return 0;
- }
-
- av7110_ipack_instant_repack(buf+4, len-4, &av7110->ipack[feed->pes_type]);
- return 0;
+ struct dvb_demux *demux = feed->demux;
+ struct av7110 *av7110 = (struct av7110 *) demux->priv;
+ struct ipack *ipack = &av7110->ipack[feed->pes_type];
+
+ DEB_EE(("av7110: %p\n", av7110));
+
+ switch (feed->pes_type) {
+ case 0:
+ if (av7110->audiostate.stream_source == AUDIO_SOURCE_MEMORY)
+ return -EINVAL;
+ break;
+ case 1:
+ if (av7110->videostate.stream_source == VIDEO_SOURCE_MEMORY)
+ return -EINVAL;
+ break;
+ default:
+ return -1;
+ }
+
+ if (!(buf[3] & 0x10)) /* no payload? */
+ return -1;
+ if (buf[1] & 0x40)
+ av7110_ipack_flush(ipack);
+
+ if (buf[3] & 0x20) { /* adaptation field? */
+ len -= buf[4] + 1;
+ buf += buf[4] + 1;
+ if (!len)
+ return 0;
+ }
+
+ av7110_ipack_instant_repack(buf + 4, len - 4, &av7110->ipack[feed->pes_type]);
+ return 0;
}
@@ -788,7 +781,7 @@ int av7110_write_to_decoder(struct dvb_demux_feed *feed, const u8 *buf, size_t l
/******************************************************************************
* Video MPEG decoder events
******************************************************************************/
-void dvb_video_add_event (struct av7110 *av7110, struct video_event *event)
+void dvb_video_add_event(struct av7110 *av7110, struct video_event *event)
{
struct dvb_video_events *events = &av7110->video_events;
int wp;
@@ -798,7 +791,6 @@ void dvb_video_add_event (struct av7110 *av7110, struct video_event *event)
spin_lock_bh(&events->lock);
wp = (events->eventw + 1) % MAX_VIDEO_EVENT;
-
if (wp == events->eventr) {
events->overflow = 1;
events->eventr = (events->eventr + 1) % MAX_VIDEO_EVENT;
@@ -806,12 +798,11 @@ void dvb_video_add_event (struct av7110 *av7110, struct video_event *event)
//FIXME: timestamp?
memcpy(&events->events[events->eventw], event, sizeof(struct video_event));
-
events->eventw = wp;
spin_unlock_bh(&events->lock);
- wake_up_interruptible (&events->wait_queue);
+ wake_up_interruptible(&events->wait_queue);
}
@@ -822,32 +813,30 @@ static int dvb_video_get_event (struct av7110 *av7110, struct video_event *event
DEB_D(("\n"));
if (events->overflow) {
- events->overflow = 0;
- return -EOVERFLOW;
- }
-
- if (events->eventw == events->eventr) {
+ events->overflow = 0;
+ return -EOVERFLOW;
+ }
+ if (events->eventw == events->eventr) {
int ret;
- if (flags & O_NONBLOCK)
- return -EWOULDBLOCK;
+ if (flags & O_NONBLOCK)
+ return -EWOULDBLOCK;
- ret = wait_event_interruptible (events->wait_queue,
- events->eventw != events->eventr);
- if (ret < 0)
- return ret;
- }
+ ret = wait_event_interruptible(events->wait_queue,
+ events->eventw != events->eventr);
+ if (ret < 0)
+ return ret;
+ }
spin_lock_bh(&events->lock);
- memcpy (event, &events->events[events->eventr],
- sizeof(struct video_event));
-
- events->eventr = (events->eventr + 1) % MAX_VIDEO_EVENT;
+ memcpy(event, &events->events[events->eventr],
+ sizeof(struct video_event));
+ events->eventr = (events->eventr + 1) % MAX_VIDEO_EVENT;
spin_unlock_bh(&events->lock);
- return 0;
+ return 0;
}
@@ -858,14 +847,13 @@ static int dvb_video_get_event (struct av7110 *av7110, struct video_event *event
static unsigned int dvb_video_poll(struct file *file, poll_table *wait)
{
struct dvb_device *dvbdev = (struct dvb_device *) file->private_data;
- struct av7110 *av7110 = (struct av7110 *) dvbdev->priv;
- unsigned int mask = 0;
+ struct av7110 *av7110 = (struct av7110 *) dvbdev->priv;
+ unsigned int mask = 0;
- DEB_EE(("av7110: %p\n",av7110));
+ DEB_EE(("av7110: %p\n", av7110));
- if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
+ if ((file->f_flags & O_ACCMODE) != O_RDONLY)
poll_wait(file, &av7110->avout.queue, wait);
- }
poll_wait(file, &av7110->video_events.wait_queue, wait);
@@ -873,66 +861,65 @@ static unsigned int dvb_video_poll(struct file *file, poll_table *wait)
mask = POLLPRI;
if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
- if (av7110->playing) {
+ if (av7110->playing) {
if (FREE_COND)
mask |= (POLLOUT | POLLWRNORM);
} else /* if not playing: may play if asked for */
mask |= (POLLOUT | POLLWRNORM);
}
- return mask;
+ return mask;
}
static ssize_t dvb_video_write(struct file *file, const char *buf,
- size_t count, loff_t *ppos)
+ size_t count, loff_t *ppos)
{
- struct dvb_device *dvbdev=(struct dvb_device *) file->private_data;
- struct av7110 *av7110=(struct av7110 *) dvbdev->priv;
+ struct dvb_device *dvbdev = (struct dvb_device *) file->private_data;
+ struct av7110 *av7110 = (struct av7110 *) dvbdev->priv;
- DEB_EE(("av7110: %p\n",av7110));
+ DEB_EE(("av7110: %p\n", av7110));
- if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
+ if ((file->f_flags & O_ACCMODE) == O_RDONLY)
return -EPERM;
- }
- if (av7110->videostate.stream_source!=VIDEO_SOURCE_MEMORY)
- return -EPERM;
+ if (av7110->videostate.stream_source != VIDEO_SOURCE_MEMORY)
+ return -EPERM;
- return dvb_play(av7110, buf, count, file->f_flags&O_NONBLOCK, 1, 1);
+ return dvb_play(av7110, buf, count, file->f_flags & O_NONBLOCK, 1, 1);
}
static unsigned int dvb_audio_poll(struct file *file, poll_table *wait)
{
struct dvb_device *dvbdev = (struct dvb_device *) file->private_data;
- struct av7110 *av7110 = (struct av7110 *) dvbdev->priv;
- unsigned int mask = 0;
+ struct av7110 *av7110 = (struct av7110 *) dvbdev->priv;
+ unsigned int mask = 0;
- DEB_EE(("av7110: %p\n",av7110));
+ DEB_EE(("av7110: %p\n", av7110));
poll_wait(file, &av7110->aout.queue, wait);
if (av7110->playing) {
- if (dvb_ringbuffer_free(&av7110->aout)>=20*1024)
- mask |= (POLLOUT | POLLWRNORM);
- } else /* if not playing: may play if asked for */
+ if (dvb_ringbuffer_free(&av7110->aout) >= 20 * 1024)
+ mask |= (POLLOUT | POLLWRNORM);
+ } else /* if not playing: may play if asked for */
mask = (POLLOUT | POLLWRNORM);
return mask;
}
static ssize_t dvb_audio_write(struct file *file, const char *buf,
- size_t count, loff_t *ppos)
+ size_t count, loff_t *ppos)
{
- struct dvb_device *dvbdev=(struct dvb_device *) file->private_data;
- struct av7110 *av7110=(struct av7110 *) dvbdev->priv;
+ struct dvb_device *dvbdev = (struct dvb_device *) file->private_data;
+ struct av7110 *av7110 = (struct av7110 *) dvbdev->priv;
- DEB_EE(("av7110: %p\n",av7110));
+ DEB_EE(("av7110: %p\n", av7110));
- if (av7110->audiostate.stream_source!=AUDIO_SOURCE_MEMORY) {
- printk(KERN_ERR "not audio source memory\n");
- return -EPERM;
- }
- return dvb_aplay(av7110, buf, count, file->f_flags&O_NONBLOCK, 0);
+ if (av7110->audiostate.stream_source != AUDIO_SOURCE_MEMORY) {
+ printk(KERN_ERR "not audio source memory\n");
+ return -EPERM;
+ }
+ return dvb_aplay(av7110, buf, count, file->f_flags & O_NONBLOCK, 0);
}
u8 iframe_header[] = { 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x80, 0x00, 0x00 };
@@ -941,25 +928,24 @@ u8 iframe_header[] = { 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x80, 0x00, 0x00 };
static int play_iframe(struct av7110 *av7110, u8 *buf, unsigned int len, int nonblock)
{
- int i, n=1;
+ int i, n;
- DEB_EE(("av7110: %p\n",av7110));
+ DEB_EE(("av7110: %p\n", av7110));
- if (!(av7110->playing&RP_VIDEO)) {
- if (AV_StartPlay(av7110, RP_VIDEO) < 0)
+ if (!(av7110->playing & RP_VIDEO)) {
+ if (AV_StartPlay(av7110, RP_VIDEO) < 0)
return -EBUSY;
- n=MIN_IFRAME/len+1;
- }
+ }
/* setting n always > 1, fixes problems when playing stillframes
consisting of I- and P-Frames */
- n=MIN_IFRAME/len+1;
+ n = MIN_IFRAME / len + 1;
/* FIXME: nonblock? */
dvb_play(av7110, iframe_header, sizeof(iframe_header), 0, 1, 0);
- for (i=0; i<n; i++)
- dvb_play(av7110, buf, len, 0, 1, 1);
+ for (i = 0; i < n; i++)
+ dvb_play(av7110, buf, len, 0, 1, 1);
av7110_ipack_flush(&av7110->ipack[1]);
return 0;
@@ -967,387 +953,381 @@ static int play_iframe(struct av7110 *av7110, u8 *buf, unsigned int len, int non
static int dvb_video_ioctl(struct inode *inode, struct file *file,
- unsigned int cmd, void *parg)
+ unsigned int cmd, void *parg)
{
- struct dvb_device *dvbdev=(struct dvb_device *) file->private_data;
- struct av7110 *av7110=(struct av7110 *) dvbdev->priv;
- unsigned long arg=(unsigned long) parg;
- int ret=0;
+ struct dvb_device *dvbdev = (struct dvb_device *) file->private_data;
+ struct av7110 *av7110 = (struct av7110 *) dvbdev->priv;
+ unsigned long arg = (unsigned long) parg;
+ int ret = 0;
- DEB_EE(("av7110: %p\n",av7110));
+ DEB_EE(("av7110: %p\n", av7110));
- if ((file->f_flags&O_ACCMODE)==O_RDONLY) {
- if ( cmd!=VIDEO_GET_STATUS && cmd!=VIDEO_GET_EVENT &&
- cmd!=VIDEO_GET_SIZE ) {
- return -EPERM;
+ if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
+ if ( cmd != VIDEO_GET_STATUS && cmd != VIDEO_GET_EVENT &&
+ cmd != VIDEO_GET_SIZE ) {
+ return -EPERM;
}
}
- switch (cmd) {
- case VIDEO_STOP:
- av7110->videostate.play_state=VIDEO_STOPPED;
- if (av7110->videostate.stream_source==VIDEO_SOURCE_MEMORY)
- AV_Stop(av7110, RP_VIDEO);
- else
- vidcom(av7110, 0x000e,
- av7110->videostate.video_blank ? 0 : 1);
- av7110->trickmode=TRICK_NONE;
- break;
-
- case VIDEO_PLAY:
- av7110->trickmode=TRICK_NONE;
- if (av7110->videostate.play_state==VIDEO_FREEZED) {
- av7110->videostate.play_state=VIDEO_PLAYING;
- vidcom(av7110, 0x000d, 0);
- }
-
- if (av7110->videostate.stream_source==VIDEO_SOURCE_MEMORY) {
- if (av7110->playing==RP_AV) {
- outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0);
- av7110->playing&=~RP_VIDEO;
- }
- AV_StartPlay(av7110,RP_VIDEO);
- vidcom(av7110, 0x000d, 0);
- } else {
- //AV_Stop(av7110, RP_VIDEO);
- vidcom(av7110, 0x000d, 0);
- }
- av7110->videostate.play_state=VIDEO_PLAYING;
- break;
-
- case VIDEO_FREEZE:
- av7110->videostate.play_state=VIDEO_FREEZED;
- if (av7110->playing&RP_VIDEO)
- outcom(av7110, COMTYPE_REC_PLAY, __Pause, 0);
- else
- vidcom(av7110, 0x0102, 1);
- av7110->trickmode=TRICK_FREEZE;
- break;
-
- case VIDEO_CONTINUE:
- if (av7110->playing&RP_VIDEO)
- outcom(av7110, COMTYPE_REC_PLAY, __Continue, 0);
- vidcom(av7110, 0x000d, 0);
- av7110->videostate.play_state=VIDEO_PLAYING;
- av7110->trickmode=TRICK_NONE;
- break;
-
- case VIDEO_SELECT_SOURCE:
- av7110->videostate.stream_source=(video_stream_source_t) arg;
- break;
-
- case VIDEO_SET_BLANK:
- av7110->videostate.video_blank=(int) arg;
+ switch (cmd) {
+ case VIDEO_STOP:
+ av7110->videostate.play_state = VIDEO_STOPPED;
+ if (av7110->videostate.stream_source == VIDEO_SOURCE_MEMORY)
+ AV_Stop(av7110, RP_VIDEO);
+ else
+ vidcom(av7110, 0x000e,
+ av7110->videostate.video_blank ? 0 : 1);
+ av7110->trickmode = TRICK_NONE;
+ break;
+
+ case VIDEO_PLAY:
+ av7110->trickmode = TRICK_NONE;
+ if (av7110->videostate.play_state == VIDEO_FREEZED) {
+ av7110->videostate.play_state = VIDEO_PLAYING;
+ vidcom(av7110, 0x000d, 0);
+ }
+
+ if (av7110->videostate.stream_source == VIDEO_SOURCE_MEMORY) {
+ if (av7110->playing == RP_AV) {
+ outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0);
+ av7110->playing &= ~RP_VIDEO;
+ }
+ AV_StartPlay(av7110, RP_VIDEO);
+ vidcom(av7110, 0x000d, 0);
+ } else {
+ //AV_Stop(av7110, RP_VIDEO);
+ vidcom(av7110, 0x000d, 0);
+ }
+ av7110->videostate.play_state = VIDEO_PLAYING;
+ break;
+
+ case VIDEO_FREEZE:
+ av7110->videostate.play_state = VIDEO_FREEZED;
+ if (av7110->playing & RP_VIDEO)
+ outcom(av7110, COMTYPE_REC_PLAY, __Pause, 0);
+ else
+ vidcom(av7110, 0x0102, 1);
+ av7110->trickmode = TRICK_FREEZE;
break;
- case VIDEO_GET_STATUS:
- memcpy(parg, &av7110->videostate, sizeof(struct video_status));
- break;
+ case VIDEO_CONTINUE:
+ if (av7110->playing & RP_VIDEO)
+ outcom(av7110, COMTYPE_REC_PLAY, __Continue, 0);
+ vidcom(av7110, 0x000d, 0);
+ av7110->videostate.play_state = VIDEO_PLAYING;
+ av7110->trickmode = TRICK_NONE;
+ break;
+
+ case VIDEO_SELECT_SOURCE:
+ av7110->videostate.stream_source = (video_stream_source_t) arg;
+ break;
- case VIDEO_GET_EVENT:
- ret=dvb_video_get_event(av7110, parg, file->f_flags);
+ case VIDEO_SET_BLANK:
+ av7110->videostate.video_blank = (int) arg;
+ break;
+
+ case VIDEO_GET_STATUS:
+ memcpy(parg, &av7110->videostate, sizeof(struct video_status));
+ break;
+
+ case VIDEO_GET_EVENT:
+ ret=dvb_video_get_event(av7110, parg, file->f_flags);
break;
case VIDEO_GET_SIZE:
- memcpy(parg, &av7110->video_size, sizeof(video_size_t));
+ memcpy(parg, &av7110->video_size, sizeof(video_size_t));
+ break;
+
+ case VIDEO_SET_DISPLAY_FORMAT:
+ {
+ video_displayformat_t format = (video_displayformat_t) arg;
+ u16 val = 0;
+
+ switch (format) {
+ case VIDEO_PAN_SCAN:
+ val = VID_PAN_SCAN_PREF;
+ break;
+
+ case VIDEO_LETTER_BOX:
+ val = VID_VC_AND_PS_PREF;
+ break;
+
+ case VIDEO_CENTER_CUT_OUT:
+ val = VID_CENTRE_CUT_PREF;
+ break;
+
+ default:
+ ret = -EINVAL;
+ }
+ if (ret < 0)
+ break;
+ av7110->videostate.video_format = format;
+ ret = outcom(av7110, COMTYPE_ENCODER, SetPanScanType,
+ 1, (u16) val);
+ break;
+ }
+
+ case VIDEO_SET_FORMAT:
+ if (arg > 1) {
+ ret = -EINVAL;
+ break;
+ }
+ av7110->display_ar = arg;
+ ret = outcom(av7110, COMTYPE_ENCODER, SetMonitorType,
+ 1, (u16) arg);
+ break;
+
+ case VIDEO_STILLPICTURE:
+ {
+ struct video_still_picture *pic =
+ (struct video_still_picture *) parg;
+ av7110->videostate.stream_source = VIDEO_SOURCE_MEMORY;
+ dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout);
+ ret = play_iframe(av7110, pic->iFrame, pic->size,
+ file->f_flags & O_NONBLOCK);
+ break;
+ }
+
+ case VIDEO_FAST_FORWARD:
+ //note: arg is ignored by firmware
+ if (av7110->playing & RP_VIDEO)
+ outcom(av7110, COMTYPE_REC_PLAY,
+ __Scan_I, 2, AV_PES, 0);
+ else
+ vidcom(av7110, 0x16, arg);
+ av7110->trickmode = TRICK_FAST;
+ av7110->videostate.play_state = VIDEO_PLAYING;
+ break;
+
+ case VIDEO_SLOWMOTION:
+ if (av7110->playing&RP_VIDEO) {
+ outcom(av7110, COMTYPE_REC_PLAY, __Slow, 2, 0, 0);
+ vidcom(av7110, 0x22, arg);
+ } else {
+ vidcom(av7110, 0x0d, 0);
+ vidcom(av7110, 0x0e, 0);
+ vidcom(av7110, 0x22, arg);
+ }
+ av7110->trickmode = TRICK_SLOW;
+ av7110->videostate.play_state = VIDEO_PLAYING;
+ break;
+
+ case VIDEO_GET_CAPABILITIES:
+ *(int *)parg = VIDEO_CAP_MPEG1 | VIDEO_CAP_MPEG2 |
+ VIDEO_CAP_SYS | VIDEO_CAP_PROG;
break;
- case VIDEO_SET_DISPLAY_FORMAT:
- {
- video_displayformat_t format=(video_displayformat_t) arg;
- u16 val=0;
-
- switch(format) {
- case VIDEO_PAN_SCAN:
- val=VID_PAN_SCAN_PREF;
- break;
-
- case VIDEO_LETTER_BOX:
- val=VID_VC_AND_PS_PREF;
- break;
-
- case VIDEO_CENTER_CUT_OUT:
- val=VID_CENTRE_CUT_PREF;
- break;
-
- default:
- ret=-EINVAL;
- break;
- }
- if (ret<0)
- break;
- av7110->videostate.video_format=format;
- ret=outcom(av7110, COMTYPE_ENCODER, SetPanScanType,
- 1, (u16) val);
- break;
- }
-
- case VIDEO_SET_FORMAT:
- if (arg>1) {
- ret=-EINVAL;
- break;
- }
- av7110->display_ar=arg;
- ret=outcom(av7110, COMTYPE_ENCODER, SetMonitorType,
- 1, (u16) arg);
- break;
-
- case VIDEO_STILLPICTURE:
- {
- struct video_still_picture *pic=
- (struct video_still_picture *) parg;
- av7110->videostate.stream_source = VIDEO_SOURCE_MEMORY;
- dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout);
- ret = play_iframe(av7110, pic->iFrame, pic->size,
- file->f_flags&O_NONBLOCK);
- break;
- }
-
- case VIDEO_FAST_FORWARD:
- //note: arg is ignored by firmware
- if (av7110->playing&RP_VIDEO)
- outcom(av7110, COMTYPE_REC_PLAY,
- __Scan_I, 2, AV_PES, 0);
- else
- vidcom(av7110, 0x16, arg);
- av7110->trickmode=TRICK_FAST;
- av7110->videostate.play_state=VIDEO_PLAYING;
- break;
-
- case VIDEO_SLOWMOTION:
- if (av7110->playing&RP_VIDEO) {
- outcom(av7110, COMTYPE_REC_PLAY, __Slow, 2, 0, 0);
- vidcom(av7110, 0x22, arg);
- } else {
- vidcom(av7110, 0x0d, 0);
- vidcom(av7110, 0x0e, 0);
- vidcom(av7110, 0x22, arg);
- }
- av7110->trickmode=TRICK_SLOW;
- av7110->videostate.play_state=VIDEO_PLAYING;
- break;
-
- case VIDEO_GET_CAPABILITIES:
- *(int *)parg=VIDEO_CAP_MPEG1|
- VIDEO_CAP_MPEG2|
- VIDEO_CAP_SYS|
- VIDEO_CAP_PROG;
- break;
-
- case VIDEO_CLEAR_BUFFER:
- dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout);
- av7110_ipack_reset(&av7110->ipack[1]);
-
- if (av7110->playing==RP_AV) {
- outcom(av7110, COMTYPE_REC_PLAY,
- __Play, 2, AV_PES, 0);
- if (av7110->trickmode==TRICK_FAST)
- outcom(av7110, COMTYPE_REC_PLAY,
- __Scan_I, 2, AV_PES, 0);
- if (av7110->trickmode==TRICK_SLOW) {
- outcom(av7110, COMTYPE_REC_PLAY, __Slow, 2, 0, 0);
- vidcom(av7110, 0x22, arg);
- }
- if (av7110->trickmode==TRICK_FREEZE)
- vidcom(av7110, 0x000e, 1);
- }
- break;
-
- case VIDEO_SET_STREAMTYPE:
-
- break;
-
- default:
- ret=-ENOIOCTLCMD;
- break;
- }
- return ret;
+ case VIDEO_CLEAR_BUFFER:
+ dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout);
+ av7110_ipack_reset(&av7110->ipack[1]);
+
+ if (av7110->playing == RP_AV) {
+ outcom(av7110, COMTYPE_REC_PLAY,
+ __Play, 2, AV_PES, 0);
+ if (av7110->trickmode == TRICK_FAST)
+ outcom(av7110, COMTYPE_REC_PLAY,
+ __Scan_I, 2, AV_PES, 0);
+ if (av7110->trickmode == TRICK_SLOW) {
+ outcom(av7110, COMTYPE_REC_PLAY, __Slow, 2, 0, 0);
+ vidcom(av7110, 0x22, arg);
+ }
+ if (av7110->trickmode == TRICK_FREEZE)
+ vidcom(av7110, 0x000e, 1);
+ }
+ break;
+
+ case VIDEO_SET_STREAMTYPE:
+
+ break;
+
+ default:
+ ret = -ENOIOCTLCMD;
+ break;
+ }
+ return ret;
}
static int dvb_audio_ioctl(struct inode *inode, struct file *file,
- unsigned int cmd, void *parg)
+ unsigned int cmd, void *parg)
{
- struct dvb_device *dvbdev=(struct dvb_device *) file->private_data;
- struct av7110 *av7110=(struct av7110 *) dvbdev->priv;
- unsigned long arg=(unsigned long) parg;
- int ret=0;
-
- DEB_EE(("av7110: %p\n",av7110));
-
- if (((file->f_flags&O_ACCMODE)==O_RDONLY) &&
- (cmd!=AUDIO_GET_STATUS))
- return -EPERM;
-
- switch (cmd) {
- case AUDIO_STOP:
- if (av7110->audiostate.stream_source==AUDIO_SOURCE_MEMORY)
- AV_Stop(av7110, RP_AUDIO);
- else
- audcom(av7110, 1);
- av7110->audiostate.play_state=AUDIO_STOPPED;
- break;
-
- case AUDIO_PLAY:
- if (av7110->audiostate.stream_source==AUDIO_SOURCE_MEMORY)
- AV_StartPlay(av7110, RP_AUDIO);
- audcom(av7110, 2);
- av7110->audiostate.play_state=AUDIO_PLAYING;
- break;
-
- case AUDIO_PAUSE:
- audcom(av7110, 1);
- av7110->audiostate.play_state=AUDIO_PAUSED;
- break;
-
- case AUDIO_CONTINUE:
- if (av7110->audiostate.play_state==AUDIO_PAUSED) {
- av7110->audiostate.play_state=AUDIO_PLAYING;
- audcom(av7110, 0x12);
- }
- break;
-
- case AUDIO_SELECT_SOURCE:
- av7110->audiostate.stream_source=(audio_stream_source_t) arg;
- break;
-
- case AUDIO_SET_MUTE:
- {
- audcom(av7110, arg ? 1 : 2);
- av7110->audiostate.mute_state=(int) arg;
- break;
- }
-
- case AUDIO_SET_AV_SYNC:
- av7110->audiostate.AV_sync_state=(int) arg;
- audcom(av7110, arg ? 0x0f : 0x0e);
- break;
-
- case AUDIO_SET_BYPASS_MODE:
- ret=-EINVAL;
- break;
-
- case AUDIO_CHANNEL_SELECT:
- av7110->audiostate.channel_select=(audio_channel_select_t) arg;
-
- switch(av7110->audiostate.channel_select) {
- case AUDIO_STEREO:
- audcom(av7110, 0x80);
- break;
-
- case AUDIO_MONO_LEFT:
- audcom(av7110, 0x100);
- break;
-
- case AUDIO_MONO_RIGHT:
- audcom(av7110, 0x200);
- break;
-
- default:
- ret=-EINVAL;
- break;
- }
- break;
-
- case AUDIO_GET_STATUS:
- memcpy(parg, &av7110->audiostate, sizeof(struct audio_status));
- break;
-
- case AUDIO_GET_CAPABILITIES:
- *(int *)parg=AUDIO_CAP_LPCM|
- AUDIO_CAP_MP1|
- AUDIO_CAP_MP2;
- break;
-
- case AUDIO_CLEAR_BUFFER:
- dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout);
- av7110_ipack_reset(&av7110->ipack[0]);
- if (av7110->playing==RP_AV)
- outcom(av7110, COMTYPE_REC_PLAY,
- __Play, 2, AV_PES, 0);
- break;
- case AUDIO_SET_ID:
-
- break;
- case AUDIO_SET_MIXER:
- {
- struct audio_mixer *amix=(struct audio_mixer *)parg;
-
- SetVolume(av7110, amix->volume_left, amix->volume_right);
- break;
- }
- case AUDIO_SET_STREAMTYPE:
- break;
- default:
- ret=-ENOIOCTLCMD;
- break;
- }
- return ret;
+ struct dvb_device *dvbdev = (struct dvb_device *) file->private_data;
+ struct av7110 *av7110 = (struct av7110 *) dvbdev->priv;
+ unsigned long arg = (unsigned long) parg;
+ int ret = 0;
+
+ DEB_EE(("av7110: %p\n", av7110));
+
+ if (((file->f_flags & O_ACCMODE) == O_RDONLY) &&
+ (cmd != AUDIO_GET_STATUS))
+ return -EPERM;
+
+ switch (cmd) {
+ case AUDIO_STOP:
+ if (av7110->audiostate.stream_source == AUDIO_SOURCE_MEMORY)
+ AV_Stop(av7110, RP_AUDIO);
+ else
+ audcom(av7110, 1);
+ av7110->audiostate.play_state = AUDIO_STOPPED;
+ break;
+
+ case AUDIO_PLAY:
+ if (av7110->audiostate.stream_source == AUDIO_SOURCE_MEMORY)
+ AV_StartPlay(av7110, RP_AUDIO);
+ audcom(av7110, 2);
+ av7110->audiostate.play_state = AUDIO_PLAYING;
+ break;
+
+ case AUDIO_PAUSE:
+ audcom(av7110, 1);
+ av7110->audiostate.play_state = AUDIO_PAUSED;
+ break;
+
+ case AUDIO_CONTINUE:
+ if (av7110->audiostate.play_state == AUDIO_PAUSED) {
+ av7110->audiostate.play_state = AUDIO_PLAYING;
+ audcom(av7110, 0x12);
+ }
+ break;
+
+ case AUDIO_SELECT_SOURCE:
+ av7110->audiostate.stream_source = (audio_stream_source_t) arg;
+ break;
+
+ case AUDIO_SET_MUTE:
+ {
+ audcom(av7110, arg ? 1 : 2);
+ av7110->audiostate.mute_state = (int) arg;
+ break;
+ }
+
+ case AUDIO_SET_AV_SYNC:
+ av7110->audiostate.AV_sync_state = (int) arg;
+ audcom(av7110, arg ? 0x0f : 0x0e);
+ break;
+
+ case AUDIO_SET_BYPASS_MODE:
+ ret = -EINVAL;
+ break;
+
+ case AUDIO_CHANNEL_SELECT:
+ av7110->audiostate.channel_select = (audio_channel_select_t) arg;
+
+ switch(av7110->audiostate.channel_select) {
+ case AUDIO_STEREO:
+ audcom(av7110, 0x80);
+ break;
+
+ case AUDIO_MONO_LEFT:
+ audcom(av7110, 0x100);
+ break;
+
+ case AUDIO_MONO_RIGHT:
+ audcom(av7110, 0x200);
+ break;
+
+ default:
+ ret = -EINVAL;
+ break;
+ }
+ break;
+
+ case AUDIO_GET_STATUS:
+ memcpy(parg, &av7110->audiostate, sizeof(struct audio_status));
+ break;
+
+ case AUDIO_GET_CAPABILITIES:
+ *(int *)parg = AUDIO_CAP_LPCM | AUDIO_CAP_MP1 | AUDIO_CAP_MP2;
+ break;
+
+ case AUDIO_CLEAR_BUFFER:
+ dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout);
+ av7110_ipack_reset(&av7110->ipack[0]);
+ if (av7110->playing == RP_AV)
+ outcom(av7110, COMTYPE_REC_PLAY,
+ __Play, 2, AV_PES, 0);
+ break;
+ case AUDIO_SET_ID:
+
+ break;
+ case AUDIO_SET_MIXER:
+ {
+ struct audio_mixer *amix = (struct audio_mixer *)parg;
+
+ SetVolume(av7110, amix->volume_left, amix->volume_right);
+ break;
+ }
+ case AUDIO_SET_STREAMTYPE:
+ break;
+ default:
+ ret = -ENOIOCTLCMD;
+ }
+ return ret;
}
static int dvb_video_open(struct inode *inode, struct file *file)
{
- struct dvb_device *dvbdev=(struct dvb_device *) file->private_data;
- struct av7110 *av7110=(struct av7110 *) dvbdev->priv;
- int err;
+ struct dvb_device *dvbdev = (struct dvb_device *) file->private_data;
+ struct av7110 *av7110 = (struct av7110 *) dvbdev->priv;
+ int err;
- DEB_EE(("av7110: %p\n",av7110));
+ DEB_EE(("av7110: %p\n", av7110));
- if ((err=dvb_generic_open(inode, file))<0)
- return err;
+ if ((err = dvb_generic_open(inode, file)) < 0)
+ return err;
if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout);
dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout);
- av7110->video_blank=1;
- av7110->audiostate.AV_sync_state=1;
- av7110->videostate.stream_source=VIDEO_SOURCE_DEMUX;
+ av7110->video_blank = 1;
+ av7110->audiostate.AV_sync_state = 1;
+ av7110->videostate.stream_source = VIDEO_SOURCE_DEMUX;
/* empty event queue */
av7110->video_events.eventr = av7110->video_events.eventw = 0;
}
- return 0;
+ return 0;
}
static int dvb_video_release(struct inode *inode, struct file *file)
{
- struct dvb_device *dvbdev=(struct dvb_device *) file->private_data;
- struct av7110 *av7110=(struct av7110 *) dvbdev->priv;
+ struct dvb_device *dvbdev = (struct dvb_device *) file->private_data;
+ struct av7110 *av7110 = (struct av7110 *) dvbdev->priv;
- DEB_EE(("av7110: %p\n",av7110));
+ DEB_EE(("av7110: %p\n", av7110));
if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
- AV_Stop(av7110, RP_VIDEO);
+ AV_Stop(av7110, RP_VIDEO);
}
- return dvb_generic_release(inode, file);
+ return dvb_generic_release(inode, file);
}
static int dvb_audio_open(struct inode *inode, struct file *file)
{
- struct dvb_device *dvbdev=(struct dvb_device *) file->private_data;
- struct av7110 *av7110=(struct av7110 *) dvbdev->priv;
- int err=dvb_generic_open(inode, file);
+ struct dvb_device *dvbdev = (struct dvb_device *) file->private_data;
+ struct av7110 *av7110 = (struct av7110 *) dvbdev->priv;
+ int err=dvb_generic_open(inode, file);
- DEB_EE(("av7110: %p\n",av7110));
+ DEB_EE(("av7110: %p\n", av7110));
- if (err<0)
- return err;
- dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout);
- av7110->audiostate.stream_source=AUDIO_SOURCE_DEMUX;
- return 0;
+ if (err < 0)
+ return err;
+ dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout);
+ av7110->audiostate.stream_source = AUDIO_SOURCE_DEMUX;
+ return 0;
}
static int dvb_audio_release(struct inode *inode, struct file *file)
{
- struct dvb_device *dvbdev=(struct dvb_device *) file->private_data;
- struct av7110 *av7110=(struct av7110 *) dvbdev->priv;
+ struct dvb_device *dvbdev = (struct dvb_device *) file->private_data;
+ struct av7110 *av7110 = (struct av7110 *) dvbdev->priv;
- DEB_EE(("av7110: %p\n",av7110));
+ DEB_EE(("av7110: %p\n", av7110));
- AV_Stop(av7110, RP_AUDIO);
- return dvb_generic_release(inode, file);
+ AV_Stop(av7110, RP_AUDIO);
+ return dvb_generic_release(inode, file);
}
@@ -1394,19 +1374,19 @@ static struct dvb_device dvbdev_audio = {
int av7110_av_register(struct av7110 *av7110)
{
- av7110->audiostate.AV_sync_state=0;
- av7110->audiostate.mute_state=0;
- av7110->audiostate.play_state=AUDIO_STOPPED;
- av7110->audiostate.stream_source=AUDIO_SOURCE_DEMUX;
- av7110->audiostate.channel_select=AUDIO_STEREO;
- av7110->audiostate.bypass_mode=0;
-
- av7110->videostate.video_blank=0;
- av7110->videostate.play_state=VIDEO_STOPPED;
- av7110->videostate.stream_source=VIDEO_SOURCE_DEMUX;
- av7110->videostate.video_format=VIDEO_FORMAT_4_3;
- av7110->videostate.display_format=VIDEO_CENTER_CUT_OUT;
- av7110->display_ar=VIDEO_FORMAT_4_3;
+ av7110->audiostate.AV_sync_state = 0;
+ av7110->audiostate.mute_state = 0;
+ av7110->audiostate.play_state = AUDIO_STOPPED;
+ av7110->audiostate.stream_source = AUDIO_SOURCE_DEMUX;
+ av7110->audiostate.channel_select = AUDIO_STEREO;
+ av7110->audiostate.bypass_mode = 0;
+
+ av7110->videostate.video_blank = 0;
+ av7110->videostate.play_state = VIDEO_STOPPED;
+ av7110->videostate.stream_source = VIDEO_SOURCE_DEMUX;
+ av7110->videostate.video_format = VIDEO_FORMAT_4_3;
+ av7110->videostate.display_format = VIDEO_CENTER_CUT_OUT;
+ av7110->display_ar = VIDEO_FORMAT_4_3;
init_waitqueue_head(&av7110->video_events.wait_queue);
spin_lock_init(&av7110->video_events.lock);
@@ -1423,28 +1403,26 @@ int av7110_av_register(struct av7110 *av7110)
return 0;
}
-
void av7110_av_unregister(struct av7110 *av7110)
{
dvb_unregister_device(av7110->audio_dev);
dvb_unregister_device(av7110->video_dev);
}
-
int av7110_av_init(struct av7110 *av7110)
{
- av7110->vidmode=VIDEO_MODE_PAL;
+ av7110->vidmode = VIDEO_MODE_PAL;
- av7110_ipack_init(&av7110->ipack[0], IPACKS, play_audio_cb);
- av7110->ipack[0].data=(void *) av7110;
- av7110_ipack_init(&av7110->ipack[1], IPACKS, play_video_cb);
- av7110->ipack[1].data=(void *) av7110;
+ av7110_ipack_init(&av7110->ipack[0], IPACKS, play_audio_cb);
+ av7110->ipack[0].data = (void *) av7110;
+ av7110_ipack_init(&av7110->ipack[1], IPACKS, play_video_cb);
+ av7110->ipack[1].data = (void *) av7110;
- dvb_ringbuffer_init(&av7110->avout, av7110->iobuf, AVOUTLEN);
- dvb_ringbuffer_init(&av7110->aout, av7110->iobuf+AVOUTLEN, AOUTLEN);
+ dvb_ringbuffer_init(&av7110->avout, av7110->iobuf, AVOUTLEN);
+ dvb_ringbuffer_init(&av7110->aout, av7110->iobuf + AVOUTLEN, AOUTLEN);
- av7110->kbuf[0]=(u8 *)(av7110->iobuf+AVOUTLEN+AOUTLEN+BMPLEN);
- av7110->kbuf[1]=av7110->kbuf[0]+2*IPACKS;
+ av7110->kbuf[0] = (u8 *)(av7110->iobuf + AVOUTLEN + AOUTLEN + BMPLEN);
+ av7110->kbuf[1] = av7110->kbuf[0] + 2 * IPACKS;
return 0;
}