Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo

Close

[f189ec]: plugins / codec_mp3 / MP3Encoder.h Maximize Restore History

Download this file

MP3Encoder.h    124 lines (93 with data), 3.6 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*************************************************************************
MP3Encoder.h - export of MP3 data via "lame"
-------------------
begin : Sat May 19 2012
copyright : (C) 2012 by Thomas Eschenbacher
email : Thomas.Eschenbacher@gmx.de
***************************************************************************/
/***************************************************************************
* *
* This program 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. *
* *
***************************************************************************/
#ifndef _MP3_ENCODER_H_
#define _MP3_ENCODER_H_
#include "config.h"
#include <limits.h>
#include <QList>
#include <QMutex>
#include <QProcess>
#include "libkwave/Encoder.h"
#include "ID3_PropertyMap.h"
class ID3_Tag;
class QIODevice;
class QWidget;
class MultiTrackReader;
namespace Kwave {
class MP3Encoder: public Encoder
{
Q_OBJECT
public:
/** Constructor */
MP3Encoder();
/** Destructor */
virtual ~MP3Encoder();
/** Returns a new instance of the encoder */
virtual Encoder *instance();
/**
* Encodes a signal into a stream of bytes.
* @param widget a widget that can be used for displaying
* message boxes or dialogs
* @param src MultiTrackReader used as source of the audio data
* @param dst file or other source to receive a stream of bytes
* @param meta_data meta data of the file to save
* @return true if succeeded, false on errors
*/
virtual bool encode(QWidget *widget, MultiTrackReader &src,
QIODevice &dst,
const Kwave::MetaDataList &meta_data);
/** Returns a list of supported file properties */
virtual QList<FileProperty> supportedProperties();
private slots:
/** called when data from the external process is available */
void dataAvailable();
private:
/**
* encode all meta data into ID3 tags
* @param meta_data reference to the meta data to encode
* @param tag the ID3 tag to receive the ID3 frames
*/
void encodeID3Tags(const Kwave::MetaDataList &meta_data,
ID3_Tag &tag);
private:
/** property - to - ID3 mapping */
ID3_PropertyMap m_property_map;
/** lock for protecting m_dst and m_process */
QMutex m_lock;
/** pointer to the QIODevice for storing, used while encoding */
QIODevice *m_dst;
/** the external process with the encoder */
QProcess m_process;
/** path to the external program */
QString m_program;
/** list with commandline parameters */
QStringList m_params;
/**
* buffer for writing to the encoder
* @note The size of this buffer should never be bigger than
* PIPE_BUF (see POSIX.1-2001), otherwise there could be some
* leftover when writing to the stdin queue of the process
* which would be catched and queued up within Qt.
* After some time that leads to a critically increasing memory
* consumption and a large delay when the progress bar has
* reached 99%.
*/
quint8 m_write_buffer[PIPE_BUF];
/** buffer for reading from the encoder (size is not critical) */
char m_read_buffer[PIPE_BUF];
};
}
#endif /* _MP3_ENCODER_H_ */