📄 streams.c
字号:
} else if (AType == 2) { // PCM card->reg090 |= 0x01; // PCM in Transport Private 1 Stream stored in AudioES channel buffer DecoderWriteByte(card, 0x090, card->reg090); //DecoderSetByte(card,0x090,0x01); // PCM in Transport Private 1 Stream stored in AudioES channel buffer AudioSetMode(card, 4); } else { // MPEG card->reg090 &= ~0x01; // MPEG Audio stored in AudioES channel buffer DecoderWriteByte(card, 0x090, card->reg090); //DecoderDelByte(card,0x090,0x01); // MPEG Audio stored in AudioES channel buffer if (AID < 0) AType = 4; if (AExt >= 0) AType = 5; else AExt = -1; AudioSetMode(card, ((IEC956) ? 0 : 2)); } card->setup.audioID = AID; card->setup.audioIDext = AExt; DecoderSelectAudioID(card); card->reg08F = (card->reg08F & ~0xE0) | ((AType & 0x07) << 5); // Set Stream Type DecoderWriteByte(card, 0x08F, card->reg08F); //DecoderMaskByte(card,0x08F,0xE0,(AType&0x07)<<5); // Set Stream Type AudioSetVolume(card, 0xFF); // Set PCM scale to full volume //DecoderMaskByte(card,0x093,0xC3,(AHeader&0x03)|0xC0); // write header select card->reg093 = (card->reg093 & ~0x03) | (AHeader & 0x03); // write header select DecoderWriteByte(card, 0x093, card->reg093); // Mute the card and put it in play mode, then wait for the parameters to be parsed and un-mute if successful //AudioMute(card,1); if (AType > 0) { AudioStartDecode(card); //AudioSetPlayMode(card,MAUDIO_PLAY); AudioSetPlayMode(card, MAUDIO_PAUSE); } //card->startingA=1; } card->lastaattr = 0;}// VHeader: -1=disable Video, 0=No Headers, 1=first PTS/DTS header, 2=all headers, 3=All with PTS/DTS// VID: -1=all MPEG, 0..15=Video Stream IDvoid DecoderPrepareVideo(struct cvdv_cards *card){ int VHeader = 3; int VID = card->setup.videoID; if (VHeader < 0) { card->reg091 = 0x00; DecoderWriteByte(card, 0x091, card->reg091); //DecoderWriteByte(card,0x091,0x00); } else { if (VID < 0) { card->reg091 = ((VHeader & 0x03) << 6) | (2 << 4); DecoderWriteByte(card, 0x091, card->reg091); //DecoderWriteByte(card,0x091,((VHeader&0x03)<<6)|(2<<4)); } else { card->reg091 = ((VHeader & 0x03) << 6) | (1 << 4) | (VID & 0x0F); DecoderWriteByte(card, 0x091, card->reg091); //DecoderWriteByte(card,0x091,((VHeader&0x03)<<6)|(1<<4)|(VID&0x0F)); } }}// Prepare Decoder for Elementary Streams, Disable Preparserint DecoderPrepareES(struct cvdv_cards *card){ int i; MDEBUG(1, ": -- PrepareES\n"); //DecoderStopDecode(card);// DecoderWriteByte(card,0x05,0x00); DecoderMaskByte(card, 0x007, 0xCE, 0xC2 | (3 << 2)); // Stream Select: A/V Elementary Stream MDEBUG(3, ": Int - A VideoES w/r addr: %08X %08X\n", (DecoderReadByte(card,0x060)|(DecoderReadByte(card,0x061)<<8)| (DecoderReadByte(card,0x062)<<16))<<2, (DecoderReadByte(card,0x06C)|(DecoderReadByte(card,0x06D)<<8)| (DecoderReadByte(card,0x06E)<<16))<<2); // set the decoding buffers card->reg093 = (card->reg093 & ~0xFC); // write no header DecoderWriteByte(card, 0x093, card->reg093); if ((i = DecoderSetChannelBuffers(card, 256000, 4096, 0, 0, 0, 0))) { MDEBUG(0, ": SetDecoderBuffers failed for buffer at 0x%03X\n", i); DecoderKillChannelBuffers(card); return 1; } MDEBUG(3, ": Int - B VideoES w/r addr: %08X %08X\n", (DecoderReadByte(card,0x060)|(DecoderReadByte(card,0x061)<<8)| (DecoderReadByte(card,0x062)<<16))<<2, (DecoderReadByte(card,0x06C)|(DecoderReadByte(card,0x06D)<<8)| (DecoderReadByte(card,0x06E)<<16))<<2); MDEBUG(3, ": Int - C VideoES w/r addr: %08X %08X\n", (DecoderReadByte(card,0x060)|(DecoderReadByte(card,0x061)<<8)| (DecoderReadByte(card,0x062)<<16))<<2, (DecoderReadByte(card,0x06C)|(DecoderReadByte(card,0x06D)<<8)| (DecoderReadByte(card,0x06E)<<16))<<2);// DecoderStartChannel(card); // DecoderStartDecode(card); MDEBUG(3, ": Int - D VideoES w/r addr: %08X %08X\n", (DecoderReadByte(card,0x060)|(DecoderReadByte(card,0x061)<<8)| (DecoderReadByte(card,0x062)<<16))<<2, (DecoderReadByte(card,0x06C)|(DecoderReadByte(card,0x06D)<<8)| (DecoderReadByte(card,0x06E)<<16))<<2); DecoderPrepare(card); return 0;}// Prepare Decoder for Packetised Elementary Streams, set parameters of Preparserint DecoderPreparePES(struct cvdv_cards *card){ // SPUID: -1=No SPU, 0..31=Display SPU of this ID // DataDump: 0=disable DataDump, 1=process DataDump Substreams // PackHeader: 0=write no headers, 1=write one header, 2=write all headers // SysHeader: 0=write no headers, 1=write one header, 2=write all headers // DSIHeader: 0=write no headers, 3=write PCI and DSI headers and packets int i; int SPUID = -1; int DataDump = 0; int PackHeader = 0; int SysHeader = 0; int DSIHeader = 0; MDEBUG(1, ": -- PreparePES\n"); DecoderMaskByte(card, 0x007, 0xCE, 0xC2 | (0 << 2)); // Stream Select: A/V PES Packets if (SPUID < 0) card->reg092 = 0; // Do we use SPU? else card->reg092 = 0x20 | (SPUID & 0x1F); if (DataDump) card->reg092 |= 0x40; // Do we use DataDump? DecoderWriteByte(card, 0x092, card->reg092); //DecoderMaskByte(card,0x093,0xFC,((DSIHeader&0x03)<<6)|((PackHeader&0x03)<<4)|((SysHeader&0x03)<<2)); card->reg093 = (card->reg093 & ~0xFC) | (((DSIHeader & 0x03) << 6) | ((PackHeader & 0x03) << 4) | ((SysHeader & 0x03) << 2)); DecoderWriteByte(card, 0x093, card->reg093); // set the decoding buffers if ( (i = DecoderSetChannelBuffers(card, 256000, 4096, 512, 0, 512, 0))) { MDEBUG(0,": SetDecoderBuffers failed for buffer at 0x%03X\n", i); DecoderKillChannelBuffers(card); return 1; } DecoderPrepare(card); return 0;}// Prepare Decoder for MPEG 1 Systems Streams or MPEG 2 Program Streams// SPUID: -1:ignore, 0...15 SPU Substream ID// DataDump: 0:disable data dump stream, 1:enable data dump stream// PackHeader: 0:write no headers, 1:write one header, 2:write all headers, 3:always discard// SysHeader: 0:always discard, 1:write one header, 2:write all headers, 3:always discard// DSIHeader: 0:write no DSI or PCI headers, 3:write DSI and PCI headers + packets// DVD: 0: normal MPEG-2 data, 1: DVD stream with navi pack dataint DecoderPreparePS(struct cvdv_cards *card, int SPUID, int DataDump, int PackHeader, int SysHeader, int DSIHeader, int DVD){ int i=0; MDEBUG(1, ": -- PreparePS %s\n", ((DVD) ? "DVD" : "")); //DecoderStopDecode(card); DecoderMaskByte(card, 0x007, 0xCE, 0xC2 | (1 << 2)); // Stream Select: MPEG1 System / MPEG2 Program Stream if (SPUID < 0) card->reg092 = 0; // Do we use SPU? else card->reg092 = 0x20 | (SPUID & 0x1F); if (DataDump) card->reg092 |= 0x40; // Do we use DataDump? DecoderWriteByte(card, 0x092, card->reg092); //DecoderMaskByte(card,0x093,0xFC,((DSIHeader&0x03)<<6)|((PackHeader&0x03)<<4)|((SysHeader&0x03)<<2)); card->reg093 = (card->reg093 & ~0xFC) | (((DSIHeader & 0x03) << 6) | ((PackHeader & 0x03) << 4) | ((SysHeader & 0x03) << 2)); DecoderWriteByte(card, 0x093, card->reg093); // set the decoding buffers if (DVD) { // do we need SPU-, navi- and datadump-buffers? // if(card->videomode == NTSC) i = DecoderSetChannelBuffers(card, 340000, 32768, 32768, 0, 512,4096) ; //else // i = DecoderSetChannelBuffers(card, 291878, 16384, 512, 0, // 512,0) ; if (i) { MDEBUG(0,": SetDecoderBuffers failed for buffer at 0x%03X\n", i); DecoderKillChannelBuffers(card); return 1; } } else { // normal PS if ( (i = DecoderSetChannelBuffers(card, 340000, 32768, 512, 0, 512, 0))) { MDEBUG(0,": SetDecoderBuffers failed for buffer at 0x%03X\n", i); DecoderKillChannelBuffers(card); return 1; } } DecoderPrepare(card); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -