123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- /*
- **********************************************************************
- * passthrough.h -- Emu10k1 digital passthrough header file
- * Copyright (C) 2001 Juha Yrjölä <jyrjola@cc.hut.fi>
- *
- **********************************************************************
- *
- * Date Author Summary of changes
- * ---- ------ ------------------
- * May 15, 2001 Juha Yrjölä base code release
- *
- **********************************************************************
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
- * USA.
- *
- **********************************************************************
- */
- #ifndef _PASSTHROUGH_H
- #define _PASSTHROUGH_H
- #include "audio.h"
- /* number of 16-bit stereo samples in XTRAM buffer */
- #define PT_SAMPLES 0x8000
- #define PT_BLOCKSAMPLES 0x400
- #define PT_BLOCKSIZE (PT_BLOCKSAMPLES*4)
- #define PT_BLOCKSIZE_LOG2 12
- #define PT_BLOCKCOUNT (PT_SAMPLES/PT_BLOCKSAMPLES)
- #define PT_INITPTR (PT_SAMPLES/2-1)
- #define PT_STATE_INACTIVE 0
- #define PT_STATE_ACTIVATED 1
- #define PT_STATE_PLAYING 2
- /* passthrough struct */
- struct pt_data
- {
- u8 selected, state, spcs_to_use;
- int intr_gpr, enable_gpr, pos_gpr;
- u32 blocks_played, blocks_copied, old_spcs[3];
- u32 playptr, copyptr;
- u32 prepend_size;
- u8 *buf;
- u8 ac3data;
- char *patch_name, *intr_gpr_name, *enable_gpr_name, *pos_gpr_name;
- wait_queue_head_t wait;
- spinlock_t lock;
- };
- /*
- Passthrough can be done in two methods:
- Method 1 : tram
- In original emu10k1, we couldn't bypass the sample rate converters. Even at 48kHz
- (the internal sample rate of the emu10k1) the samples would get messed up.
- To over come this, samples are copied into the tram and a special dsp patch copies
- the samples out and generates interrupts when a block has finnished playing.
- Method 2 : Interpolator bypass
- Creative fixed the sample rate convert problem in emu10k1 rev 7 and higher
- (including the emu10k2 (audigy)). This allows us to use the regular, and much simpler
- playback method.
- In both methods, dsp code is used to mux audio and passthrough. This ensures that the spdif
- doesn't receive audio and pasthrough data at the same time. The spdif flag SPCS_NOTAUDIODATA
- is set to tell
- */
- // emu10k1 revs greater than or equal to 7 can use method2
- #define USE_PT_METHOD2 (card->is_audigy)
- #define USE_PT_METHOD1 !USE_PT_METHOD2
- ssize_t emu10k1_pt_write(struct file *file, const char __user *buf, size_t count);
- int emu10k1_pt_setup(struct emu10k1_wavedevice *wave_dev);
- void emu10k1_pt_stop(struct emu10k1_card *card);
- void emu10k1_pt_waveout_update(struct emu10k1_wavedevice *wave_dev);
- #endif /* _PASSTHROUGH_H */
|