media/libsoundtouch/src/FIFOSamplePipe.h

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 ////////////////////////////////////////////////////////////////////////////////
     2 ///
     3 /// 'FIFOSamplePipe' : An abstract base class for classes that manipulate sound
     4 /// samples by operating like a first-in-first-out pipe: New samples are fed
     5 /// into one end of the pipe with the 'putSamples' function, and the processed
     6 /// samples are received from the other end with the 'receiveSamples' function.
     7 ///
     8 /// 'FIFOProcessor' : A base class for classes the do signal processing with 
     9 /// the samples while operating like a first-in-first-out pipe. When samples
    10 /// are input with the 'putSamples' function, the class processes them
    11 /// and moves the processed samples to the given 'output' pipe object, which
    12 /// may be either another processing stage, or a fifo sample buffer object.
    13 ///
    14 /// Author        : Copyright (c) Olli Parviainen
    15 /// Author e-mail : oparviai 'at' iki.fi
    16 /// SoundTouch WWW: http://www.surina.net/soundtouch
    17 ///
    18 ////////////////////////////////////////////////////////////////////////////////
    19 //
    20 // Last changed  : $Date: 2012-06-13 14:29:53 -0500 (Wed, 13 Jun 2012) $
    21 // File revision : $Revision: 4 $
    22 //
    23 // $Id: FIFOSamplePipe.h 143 2012-06-13 19:29:53Z oparviai $
    24 //
    25 ////////////////////////////////////////////////////////////////////////////////
    26 //
    27 // License :
    28 //
    29 //  SoundTouch audio processing library
    30 //  Copyright (c) Olli Parviainen
    31 //
    32 //  This library is free software; you can redistribute it and/or
    33 //  modify it under the terms of the GNU Lesser General Public
    34 //  License as published by the Free Software Foundation; either
    35 //  version 2.1 of the License, or (at your option) any later version.
    36 //
    37 //  This library is distributed in the hope that it will be useful,
    38 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
    39 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    40 //  Lesser General Public License for more details.
    41 //
    42 //  You should have received a copy of the GNU Lesser General Public
    43 //  License along with this library; if not, write to the Free Software
    44 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    45 //
    46 ////////////////////////////////////////////////////////////////////////////////
    48 #ifndef FIFOSamplePipe_H
    49 #define FIFOSamplePipe_H
    51 #include <assert.h>
    52 #include <stdlib.h>
    53 #include "STTypes.h"
    55 namespace soundtouch
    56 {
    58 /// Abstract base class for FIFO (first-in-first-out) sample processing classes.
    59 class FIFOSamplePipe
    60 {
    61 public:
    62     // virtual default destructor
    63     virtual ~FIFOSamplePipe() {}
    66     /// Returns a pointer to the beginning of the output samples. 
    67     /// This function is provided for accessing the output samples directly. 
    68     /// Please be careful for not to corrupt the book-keeping!
    69     ///
    70     /// When using this function to output samples, also remember to 'remove' the
    71     /// output samples from the buffer by calling the 
    72     /// 'receiveSamples(numSamples)' function
    73     virtual SAMPLETYPE *ptrBegin() = 0;
    75     /// Adds 'numSamples' pcs of samples from the 'samples' memory position to
    76     /// the sample buffer.
    77     virtual void putSamples(const SAMPLETYPE *samples,  ///< Pointer to samples.
    78                             uint numSamples             ///< Number of samples to insert.
    79                             ) = 0;
    82     // Moves samples from the 'other' pipe instance to this instance.
    83     void moveSamples(FIFOSamplePipe &other  ///< Other pipe instance where from the receive the data.
    84          )
    85     {
    86         int oNumSamples = other.numSamples();
    88         putSamples(other.ptrBegin(), oNumSamples);
    89         other.receiveSamples(oNumSamples);
    90     };
    92     /// Output samples from beginning of the sample buffer. Copies requested samples to 
    93     /// output buffer and removes them from the sample buffer. If there are less than 
    94     /// 'numsample' samples in the buffer, returns all that available.
    95     ///
    96     /// \return Number of samples returned.
    97     virtual uint receiveSamples(SAMPLETYPE *output, ///< Buffer where to copy output samples.
    98                                 uint maxSamples                 ///< How many samples to receive at max.
    99                                 ) = 0;
   101     /// Adjusts book-keeping so that given number of samples are removed from beginning of the 
   102     /// sample buffer without copying them anywhere. 
   103     ///
   104     /// Used to reduce the number of samples in the buffer when accessing the sample buffer directly
   105     /// with 'ptrBegin' function.
   106     virtual uint receiveSamples(uint maxSamples   ///< Remove this many samples from the beginning of pipe.
   107                                 ) = 0;
   109     /// Returns number of samples currently available.
   110     virtual uint numSamples() const = 0;
   112     // Returns nonzero if there aren't any samples available for outputting.
   113     virtual int isEmpty() const = 0;
   115     /// Clears all the samples.
   116     virtual void clear() = 0;
   118     /// allow trimming (downwards) amount of samples in pipeline.
   119     /// Returns adjusted amount of samples
   120     virtual uint adjustAmountOfSamples(uint numSamples) = 0;
   122 };
   126 /// Base-class for sound processing routines working in FIFO principle. With this base 
   127 /// class it's easy to implement sound processing stages that can be chained together,
   128 /// so that samples that are fed into beginning of the pipe automatically go through 
   129 /// all the processing stages.
   130 ///
   131 /// When samples are input to this class, they're first processed and then put to 
   132 /// the FIFO pipe that's defined as output of this class. This output pipe can be
   133 /// either other processing stage or a FIFO sample buffer.
   134 class FIFOProcessor :public FIFOSamplePipe
   135 {
   136 protected:
   137     /// Internal pipe where processed samples are put.
   138     FIFOSamplePipe *output;
   140     /// Sets output pipe.
   141     void setOutPipe(FIFOSamplePipe *pOutput)
   142     {
   143         assert(output == NULL);
   144         assert(pOutput != NULL);
   145         output = pOutput;
   146     }
   149     /// Constructor. Doesn't define output pipe; it has to be set be 
   150     /// 'setOutPipe' function.
   151     FIFOProcessor()
   152     {
   153         output = NULL;
   154     }
   157     /// Constructor. Configures output pipe.
   158     FIFOProcessor(FIFOSamplePipe *pOutput   ///< Output pipe.
   159                  )
   160     {
   161         output = pOutput;
   162     }
   165     /// Destructor.
   166     virtual ~FIFOProcessor()
   167     {
   168     }
   171     /// Returns a pointer to the beginning of the output samples. 
   172     /// This function is provided for accessing the output samples directly. 
   173     /// Please be careful for not to corrupt the book-keeping!
   174     ///
   175     /// When using this function to output samples, also remember to 'remove' the
   176     /// output samples from the buffer by calling the 
   177     /// 'receiveSamples(numSamples)' function
   178     virtual SAMPLETYPE *ptrBegin()
   179     {
   180         return output->ptrBegin();
   181     }
   183 public:
   185     /// Output samples from beginning of the sample buffer. Copies requested samples to 
   186     /// output buffer and removes them from the sample buffer. If there are less than 
   187     /// 'numsample' samples in the buffer, returns all that available.
   188     ///
   189     /// \return Number of samples returned.
   190     virtual uint receiveSamples(SAMPLETYPE *outBuffer, ///< Buffer where to copy output samples.
   191                                 uint maxSamples                    ///< How many samples to receive at max.
   192                                 )
   193     {
   194         return output->receiveSamples(outBuffer, maxSamples);
   195     }
   198     /// Adjusts book-keeping so that given number of samples are removed from beginning of the 
   199     /// sample buffer without copying them anywhere. 
   200     ///
   201     /// Used to reduce the number of samples in the buffer when accessing the sample buffer directly
   202     /// with 'ptrBegin' function.
   203     virtual uint receiveSamples(uint maxSamples   ///< Remove this many samples from the beginning of pipe.
   204                                 )
   205     {
   206         return output->receiveSamples(maxSamples);
   207     }
   210     /// Returns number of samples currently available.
   211     virtual uint numSamples() const
   212     {
   213         return output->numSamples();
   214     }
   217     /// Returns nonzero if there aren't any samples available for outputting.
   218     virtual int isEmpty() const
   219     {
   220         return output->isEmpty();
   221     }
   223     /// allow trimming (downwards) amount of samples in pipeline.
   224     /// Returns adjusted amount of samples
   225     virtual uint adjustAmountOfSamples(uint numSamples)
   226     {
   227         return output->adjustAmountOfSamples(numSamples);
   228     }
   230 };
   232 }
   234 #endif

mercurial