www.pudn.com > mediator15src.zip > audiosync.h


/* 
 * audiosync.h 
 * Copyright (C) 2001-2002 Arno Hornberger  
 * 
 * This file is part of MPEG Mediator, a free MPEG stream converter. 
 * 
 * MPEG Mediator 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. 
 * 
 * MPEG Mediator 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 */ 
 
#ifndef AUDIOSYNC_H 
#define AUDIOSYNC_H 
 
#include "mpegstream.h" 
 
class AudioSync 
{ 
		enum 
		{ 
			FRM_BUFFER_SIZE = 2048 
		}; 
	 
		MPEGStream *stream; 
		short *out_buffer;	// just a pointer 
		short *ass_buffer;	// ass means "assemble" 
		short *frm_buffer;	// frames coming in 
 
		bool finished; 
 
		// everything concerning the timing 
		 
		__int64 start_pts; 
		int total_frames; 
		__int64 total_samples; 
		__int64 frame_duration; 
		int samplerate; 
		int channels; 
 
	  int samples_per_frame;  // includes rounding 
 
		int rate_numerator; 
		int rate_denominator; 
 
		__int64 max_delta; 
 
		int frm_samples; 
		int frm_samplesi; 
		int mute_samples; 
 
		int last_frame_size; 
 
		void Mute(short *samples, int samplecount); 
 
	public: 
		AudioSync(); 
		~AudioSync(); 
 
		void SetInput(MPEGStream *stream); 
		bool GetFrame(short ***dest, int *framesize, bool has_alloc); 
		void GetSameFrame(short ***dest, int *framesize, bool has_alloc); 
		int GetBytesPerFrame() { return samples_per_frame * channels * 2; } 
}; 
 
#endif