/**********
This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2.1 of the License, or (at your
option) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.)

This library 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 Lesser General Public License for
more details.

You should have received a copy of the GNU Lesser General Public License
along with this library; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
**********/
// Null sinks
// Implementation

#include "NullSink.hh"

////////// NullSink //////////

NullSink::NullSink(UsageEnvironment& env, unsigned bufferSize)
  : MediaSink(env), fBufferSize(bufferSize) {
  fBuffer = new unsigned char[bufferSize];
}

NullSink::~NullSink() {
  delete[] fBuffer;
}

NullSink* NullSink::createNew(UsageEnvironment& env, unsigned bufferSize) {
    return new NullSink(env, bufferSize);

  return NULL;
}

Boolean NullSink::continuePlaying() {
  if (fSource == NULL) return False;

  fSource->getNextFrame(fBuffer, fBufferSize,
			afterGettingFrame, this,
			onSourceClosure, this);

  return True;
}

void NullSink::afterGettingFrame(void* clientData, unsigned frameSize,
				 unsigned /*numTruncatedBytes*/,
				 struct timeval presentationTime,
				 unsigned /*durationInMicroseconds*/) {
  NullSink* sink = (NullSink*)clientData;
  sink->afterGettingFrame1(frameSize, presentationTime);
} 


void NullSink::afterGettingFrame1(unsigned frameSize,
				  struct timeval presentationTime) {

  // Try getting the next frame:
  continuePlaying();
}
