[wdmaudiodev] Re: Blocky looking metering in SoundForge

  • From: Waldemar Haszlakiewicz <waldemar.haszlakiewicz@xxxxxxxx>
  • To: wade <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Thu, 13 Nov 2003 16:26:05 +0100

You can transfer smaller chunks and everything will still work.

In our driver we copy the driver buffer size chunk (chunk size: 64 samples, 
128, 256,...)
and advance the stream pointer everything else is done by the ks driver.

//Advance buffer.
if ( pChannelInfo->type == CHANNEL_TYPE_OUT )
{
  KsStreamPointerAdvanceOffsetsAndUnlock(
    streamPointer,
    advanceOffset_bytes,
    0,
    FALSE
  );
}
else
{
  KsStreamPointerAdvanceOffsetsAndUnlock(
    streamPointer,
    0,
    advanceOffset_bytes,
    FALSE
  );
}

All your increase stuff is useless it's done by the 
KsStreamPointerAdvanceOffsetsAndUnlock procedure
and more it's probably even faulty( StreamPointer -> StreamHeader -> DataUsed 
+= TransferSize;).

Waldemar



w> I have written an AVStreams capture driver.
 
w> I am experiencing a clunky, blocky display in audio applications that 
provide visual metering of the audio signal.  Upon closer inspection,  in 
Soundforge, If I set the "Status Format" to
w> "samples", and record, the  "time recorded" field on the record window 
increments by ~12k samples (48kBytes).  Other audio cards increment by MUCH 
smaller amounts.  I notice that
w> 12k*2channels*2bytes is about one AVSream queue's worth of data (6 * 8192k 
frames).  
w> I am KsEditing the Allocator structure to allow selection of frame size, but 
in this instance, 6, 8k frames were alloc'd.
 
w> I am completing the frames with the following code:
 
w> .... transfer the data to the StreamPointerBuffer
w>  StreamPointer -> StreamHeader -> DataUsed += TransferSize;
w>  Pin->audioPosition.WriteOffset += TransferSize;
 
w>   // Now figure the duration 
w>    StreamPointer -> StreamHeader ->OptionsFlags = 
(KSSTREAM_HEADER_OPTIONSF_DURATIONVALID);
w>    StreamPointer -> StreamHeader->PresentationTime.Numerator = 
Pin->kstimeNumer;
w>    StreamPointer -> StreamHeader->PresentationTime.Denominator = 
Pin->kstimeDenom;
w>    StreamPointer -> StreamHeader->Duration = (TransferSize);
 
w>    if (STATUS_DEVICE_NOT_READY == (status=KsStreamPointerAdvanceOffsets 
(StreamPointer,0,StreamPointer->OffsetOut.Remaining,FALSE)))
w>    {
w>        status = STATUS_PENDING;
w>    }
w>    else
w>    {
w>     status = STATUS_SUCCESS;
w>  //   KsStreamPointerUnlock(StreamPointer,FALSE/*(!Pin->streamRunning)*/);
w>    }
w> .
w> .
w> .
w>    break;
w> return status;
 
w> Any ideas?
 


w> ---------------------------------
w> Do you Yahoo!?
w> Protect your identity with Yahoo! Mail AddressGuard

******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.de/

Other related posts: