Kill scrubbing code and audio_provider_stream; they were last touched four years ago and never did work.

Originally committed to SVN as r4709.
This commit is contained in:
Thomas Goyne 2010-07-25 03:11:00 +00:00
parent 6040334278
commit d4a4db0388
5 changed files with 0 additions and 421 deletions

View File

@ -523,14 +523,6 @@
RelativePath="..\..\src\audio_provider_ram.h"
>
</File>
<File
RelativePath="..\..\src\audio_provider_stream.cpp"
>
</File>
<File
RelativePath="..\..\src\audio_provider_stream.h"
>
</File>
</Filter>
<Filter
Name="Automation"

View File

@ -53,7 +53,6 @@
#ifdef _DEBUG
#include "audio_provider_dummy.h"
#endif
#include "audio_provider_stream.h"
#include "colorspace.h"
#include "compat.h"
#include "fft.h"
@ -102,7 +101,6 @@ AudioDisplay::AudioDisplay(wxWindow *parent)
dontReadTimes = false;
holding = false;
draggingScale = false;
scrubbing = false;
Position = 0;
PositionSample = 0;
oldCurPos = 0;
@ -1777,120 +1775,6 @@ int AudioDisplay::GetBoundarySnap(int ms,int rangeX,bool shiftHeld,bool start) {
return bestMS;
}
//
// SCRUBBING CODE, REMOVED FROM THE FUNCTION ABOVE
/*
// Stop scrubbing
bool scrubButton = false && event.ButtonIsDown(wxMOUSE_BTN_MIDDLE);
if (scrubbing && !scrubButton) {
// Release mouse
scrubbing = false;
if (HasCapture()) ReleaseMouse();
// Stop player
player->Stop();
player->SetProvider(provider);
delete scrubProvider;
}
// Start scrubbing
if (!scrubbing && scrubButton && provider->GetChannels() == 1) {
// Get mouse
CaptureMouse();
scrubbing = true;
// Initialize provider
player->Stop();
scrubProvider = new StreamAudioProvider();
scrubProvider->SetParams(provider->GetChannels(),provider->GetSampleRate(),provider->GetBytesPerSample());
player->SetProvider(scrubProvider);
// Set variables
scrubLastPos = GetSampleAtX(x);
scrubTime = clock();
scrubLastRate = provider->GetSampleRate();
}
// Scrub
if (scrubbing && scrubButton) {
// Get current data
int64_t exactPos = MAX(0,GetSampleAtX(x));
int curScrubTime = clock();
int scrubDeltaTime = curScrubTime - scrubTime;
bool invert = exactPos < scrubLastPos;
int64_t curScrubPos = exactPos;
if (scrubDeltaTime > 0) {
// Get derived data
int rateChange = provider->GetSampleRate()/20;
int curRate = MID(int(scrubLastRate-rateChange),abs(int(exactPos - scrubLastPos)) * CLOCKS_PER_SEC / scrubDeltaTime,int(scrubLastRate+rateChange));
if (abs(curRate-scrubLastRate) < rateChange) curRate = scrubLastRate;
curScrubPos = scrubLastPos + (curRate * scrubDeltaTime / CLOCKS_PER_SEC * (invert ? -1 : 1));
int64_t scrubDelta = curScrubPos - scrubLastPos;
scrubLastRate = curRate;
// Copy data to buffer
if (scrubDelta != 0) {
// Create buffer
int bufSize = scrubDeltaTime * scrubProvider->GetSampleRate() / CLOCKS_PER_SEC;
short *buf = new short[bufSize];
// Flag as inverted, if necessary
if (invert) scrubDelta = -scrubDelta;
// Copy data from original provider to temp buffer
short *temp = new short[scrubDelta];
provider->GetAudio(temp,MIN(curScrubPos,scrubLastPos),scrubDelta);
// Scale
float scale = float(double(scrubDelta) / double(bufSize));
float start,end;
int istart,iend;
float tempfinal;
for (int i=0;i<bufSize;i++) {
start = i*scale;
end = (i+1)*scale;
istart = (int) start;
iend = MIN((int) end,scrubDelta-1);
if (istart == iend) tempfinal = temp[istart] * (end - start);
else {
tempfinal = temp[istart] * (1 + istart - start) + temp[iend] * (end - iend);
for (int j=istart+1;j<iend;j++) tempfinal += temp[i];
}
buf[i] = tempfinal / scale;
}
//int len = MIN(bufSize,scrubDelta);
//for (int i=0;i<len;i++) buf[i] = temp[i];
//for (int i=len;i<bufSize;i++) buf[i] = 0;
delete temp;
// Invert
if (invert) {
short aux;
for (int i=0;i<bufSize/2;i++) {
aux = buf[i];
buf[i] = buf[bufSize-i-1];
buf[bufSize-i-1] = aux;
}
}
// Send data to provider
scrubProvider->Append(buf,bufSize);
if (!player->IsPlaying()) player->Play(0,~0ULL);
delete buf;
}
}
// Update last pos and time
scrubLastPos = curScrubPos;
scrubTime = curScrubTime;
// Return
return;
}
*/
/// @brief Size event
/// @param event
void AudioDisplay::OnSize(wxSizeEvent &event) {

View File

@ -49,7 +49,6 @@
#include "audio_renderer_spectrum.h"
class AssDialogue;
class StreamAudioProvider;
class SubtitlesGrid;
class AudioBox;
class AudioKaraoke;
@ -179,18 +178,6 @@ private:
/// DOCME
int *min;
/// DOCME
int scrubTime;
/// DOCME
int64_t scrubLastPos;
/// DOCME
bool scrubbing;
/// DOCME
int scrubLastRate;
void OnPaint(wxPaintEvent &event);
void OnMouseEvent(wxMouseEvent &event);
void OnSize(wxSizeEvent &event);
@ -218,9 +205,6 @@ public:
/// DOCME
AudioProvider *provider;
/// DOCME
StreamAudioProvider *scrubProvider;
/// DOCME
AudioPlayer *player;

View File

@ -1,174 +0,0 @@
// Copyright (c) 2006, Rodrigo Braz Monteiro
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither the name of the Aegisub Group nor the names of its contributors
// may be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// Aegisub Project http://www.aegisub.org/
//
// $Id$
/// @file audio_provider_stream.cpp
/// @brief Unused aggregate audio provider, intended to be used for audio scrubbing feature
/// @ingroup audio_input
///
///////////
// Headers
#include "config.h"
#include "audio_provider_stream.h"
#include "utils.h"
/// DOCME
#define BUFSIZE 65536
/// @brief Constructor
///
StreamAudioProvider::StreamAudioProvider() {
bufLen = 8192;
startPos = 0;
endPos = BUFSIZE;
buffered = 0;
hasBuf = false;
num_samples = ~0ULL;
}
/// @brief Destructor
///
StreamAudioProvider::~StreamAudioProvider() {
for (std::list<BufferChunk*>::iterator cur=buffer.begin();cur!=buffer.end();cur++) {
delete *cur;
}
buffer.clear();
}
/// @brief Get audio
/// @param buf
/// @param start
/// @param count
///
void StreamAudioProvider::GetAudio(void *buf, int64_t start, int64_t count) {
// Write
int64_t left = count;
int written = 0;
int toWrite;
short *dst = (short*) buf;
while (hasBuf && left > 0) {
// Discard done
if (startPos == BUFSIZE) {
delete buffer.front();
buffer.pop_front();
startPos = 0;
}
// Is last?
bool isLast = buffer.size() == 1;
int size = BUFSIZE;
if (isLast) size = endPos;
// Write
toWrite = MIN(size-startPos,int(left));
memcpy(dst+written,&(buffer.front()->buf[startPos]),toWrite*2);
startPos += toWrite;
written += toWrite;
left -= toWrite;
buffered -= toWrite;
// Last
if (isLast) break;
}
// Still left, fill with zero
if (left > 0) {
hasBuf = false;
for (int64_t i=written;i<count;i++) {
dst[i] = 0;
}
}
}
/// @brief Append audio to stream
/// @param voidptr
/// @param count
///
void StreamAudioProvider::Append(void *voidptr, int64_t count) {
// Read
int64_t left = count;
int read = 0;
int toRead;
short *src = (short*) voidptr;
while (left > 0) {
// Check space
if (endPos == BUFSIZE) {
buffer.push_back(new BufferChunk);
endPos = 0;
}
// Read
toRead = MIN(int(BUFSIZE-endPos),int(left));
memcpy(&(buffer.back()->buf[endPos]),src+read,toRead*2);
endPos += toRead;
read += toRead;
buffered += toRead;
left -= toRead;
}
// Set buffered status
if (buffered > bufLen) hasBuf = true;
}
/// @brief Set parameters
/// @param chan
/// @param rate
/// @param bps
///
void StreamAudioProvider::SetParams(int chan,int rate,int bps) {
channels = chan;
sample_rate = rate;
bytes_per_sample = bps;
}
/// @brief Buffer chunk constructor
///
StreamAudioProvider::BufferChunk::BufferChunk() {
buf.resize(BUFSIZE);
isFree = true;
}

View File

@ -1,107 +0,0 @@
// Copyright (c) 2006, Rodrigo Braz Monteiro
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither the name of the Aegisub Group nor the names of its contributors
// may be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// Aegisub Project http://www.aegisub.org/
//
// $Id$
/// @file audio_provider_stream.h
/// @see audio_provider_stream.cpp
/// @ingroup audio_input
///
///////////
// Headers
#ifndef AGI_PRE
#include <list>
#include <vector>
#endif
#include "include/aegisub/audio_provider.h"
/// DOCME
/// @class StreamAudioProvider
/// @brief DOCME
///
/// DOCME
class StreamAudioProvider : public AudioProvider {
private:
/// DOCME
/// @class BufferChunk
/// @brief DOCME
///
/// DOCME
class BufferChunk {
public:
/// DOCME
std::vector<short> buf;
/// DOCME
bool isFree;
BufferChunk();
};
/// DOCME
std::list<BufferChunk*> buffer;
/// DOCME
int startPos;
/// DOCME
int endPos;
/// DOCME
int bufLen;
/// DOCME
int buffered;
/// DOCME
bool hasBuf;
public:
StreamAudioProvider();
~StreamAudioProvider();
// The AreSamplesNativeEndian() method is intentionally missing.
// This class was used with the experimental scrubbing code but never
// used outside that.
// The method is left out to make it break compilation in case it does
// get used again, so it can get a review and stuff.
void GetAudio(void *buf, int64_t start, int64_t count);
void Append(void *buf, int64_t count);
void SetParams(int channels,int rate,int bps);
};