00001
00002
00003
00004
00005 #ifndef _AUDIO_TRACK_H_
00006 #define _AUDIO_TRACK_H_
00007
00008 #include <sys/types.h>
00009
00010 #include "Track.h"
00011 #include "A_Format.h"
00012
00013 class VideoFile;
00014 class A_Codec;
00015
00022 class A_Track: public Track, public A_Format {
00023 friend class A_Codec;
00024 public:
00025
00026 A_Track( VideoFile *File, int track=0 );
00027 A_Track ( VideoFile *File,
00028 int Sample_rate,
00029 int Channels,
00030 const char *Codec_name = NULL );
00031
00032 virtual ~A_Track();
00033
00034
00039 virtual int64_t Samples( void ) { return total_samples; }
00040
00043 virtual double TotalTime( void ) { return (double)total_samples / sample_rate; }
00044
00047 inline A_Codec *Codec( void ) { return codec; }
00048
00053 virtual int readData( unsigned char *&data, long &bytes );
00054
00059 virtual int readBytes( unsigned char *data, long &bytes );
00060
00063 virtual int writeData( unsigned char *data, long bytes, long samp = 0 );
00064
00065
00066
00067
00070 int encodeAudio( int16_t **daten, int sampels );
00071
00074 int decodeAudio( int16_t **&daten, int sampels );
00075
00076
00077 protected:
00080 virtual int readRaw( unsigned char *&data, long &bytes );
00081
00084 virtual int writeRaw( unsigned char *data, long bytes, int samp=0 );
00085
00086 A_Codec *codec;
00087
00088 long long total_samples;
00089
00090 unsigned char *read_puffer;
00091 long read_puffer_rest;
00092 long read_puffer_start;
00093 long read_puffer_gr;
00094 long read_last_pos;
00095 };
00096
00097 #endif