Audacity 3.2.0
Public Member Functions | Protected Member Functions | Private Attributes | Friends | List of all members
MyFLACFile Class Referencefinal
Inheritance diagram for MyFLACFile:
[legend]
Collaboration diagram for MyFLACFile:
[legend]

Public Member Functions

 MyFLACFile (FLACImportFileHandle *handle)
 
bool get_was_error () const
 

Protected Member Functions

FLAC__StreamDecoderWriteStatus write_callback (const FLAC__Frame *frame, const FLAC__int32 *const buffer[]) override
 
void metadata_callback (const FLAC__StreamMetadata *metadata) override
 
void error_callback (FLAC__StreamDecoderErrorStatus status) override
 

Private Attributes

FLACImportFileHandlemFile
 
bool mWasError
 
wxArrayString mComments
 

Friends

class FLACImportFileHandle
 

Detailed Description

Definition at line 88 of file ImportFLAC.cpp.

Constructor & Destructor Documentation

◆ MyFLACFile()

MyFLACFile::MyFLACFile ( FLACImportFileHandle handle)
inline

Definition at line 91 of file ImportFLAC.cpp.

91 : mFile(handle)
92 {
93 mWasError = false;
94 set_metadata_ignore_all();
95 set_metadata_respond(FLAC__METADATA_TYPE_VORBIS_COMMENT);
96 set_metadata_respond(FLAC__METADATA_TYPE_STREAMINFO);
97 }
FLACImportFileHandle * mFile
Definition: ImportFLAC.cpp:105
bool mWasError
Definition: ImportFLAC.cpp:106

References mWasError.

Member Function Documentation

◆ error_callback()

void MyFLACFile::error_callback ( FLAC__StreamDecoderErrorStatus  status)
overrideprotected

Definition at line 214 of file ImportFLAC.cpp.

215{
216 mWasError = true;
217
218 /*
219 switch (status)
220 {
221 case FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC:
222 wxPrintf(wxT("Flac Error: Lost sync\n"));
223 break;
224 case FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH:
225 wxPrintf(wxT("Flac Error: Crc mismatch\n"));
226 break;
227 case FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER:
228 wxPrintf(wxT("Flac Error: Bad Header\n"));
229 break;
230 default:
231 wxPrintf(wxT("Flac Error: Unknown error code\n"));
232 break;
233 }*/
234}

References mWasError.

◆ get_was_error()

bool MyFLACFile::get_was_error ( ) const
inline

Definition at line 99 of file ImportFLAC.cpp.

100 {
101 return mWasError;
102 }

References mWasError.

◆ metadata_callback()

void MyFLACFile::metadata_callback ( const FLAC__StreamMetadata *  metadata)
overrideprotected

Definition at line 173 of file ImportFLAC.cpp.

174{
175 switch (metadata->type)
176 {
177 case FLAC__METADATA_TYPE_VORBIS_COMMENT:
178 for (FLAC__uint32 i = 0; i < metadata->data.vorbis_comment.num_comments; i++) {
179 mComments.push_back(UTF8CTOWX((char *)metadata->data.vorbis_comment.comments[i].entry));
180 }
181 break;
182
183 case FLAC__METADATA_TYPE_STREAMINFO:
184 mFile->mSampleRate=metadata->data.stream_info.sample_rate;
185 mFile->mNumChannels=metadata->data.stream_info.channels;
186 mFile->mBitsPerSample=metadata->data.stream_info.bits_per_sample;
187 mFile->mNumSamples=metadata->data.stream_info.total_samples;
188
189 // Widen mFormat after examining the file header
190 if (mFile->mBitsPerSample<=16) {
192 } else if (mFile->mBitsPerSample<=24) {
194 } else {
196 }
198 break;
199 // handle the other types we do nothing with to avoid a warning
200 case FLAC__METADATA_TYPE_PADDING: // do nothing with padding
201 case FLAC__METADATA_TYPE_APPLICATION: // no idea what to do with this
202 case FLAC__METADATA_TYPE_SEEKTABLE: // don't need a seektable here
203 case FLAC__METADATA_TYPE_CUESHEET: // convert this to labels?
204 case FLAC__METADATA_TYPE_PICTURE: // ignore pictures
205 case FLAC__METADATA_TYPE_UNDEFINED: // do nothing with this either
206
207 // FIXME: not declared when compiling on Ubuntu.
208 //case FLAC__MAX_METADATA_TYPE: // quiet compiler warning with this line
209 default:
210 break;
211 }
212}
#define UTF8CTOWX(X)
Definition: Internat.h:157
FLAC__uint64 mNumSamples
Definition: ImportFLAC.cpp:165
unsigned long mBitsPerSample
Definition: ImportFLAC.cpp:164
unsigned long mNumChannels
Definition: ImportFLAC.cpp:163
unsigned long mSampleRate
Definition: ImportFLAC.cpp:162
sampleFormat mFormat
Definition: ImportFLAC.cpp:159
wxArrayString mComments
Definition: ImportFLAC.cpp:107

References floatSample, int16Sample, int24Sample, FLACImportFileHandle::mBitsPerSample, mComments, mFile, FLACImportFileHandle::mFormat, FLACImportFileHandle::mNumChannels, FLACImportFileHandle::mNumSamples, FLACImportFileHandle::mSampleRate, FLACImportFileHandle::mStreamInfoDone, and UTF8CTOWX.

◆ write_callback()

FLAC__StreamDecoderWriteStatus MyFLACFile::write_callback ( const FLAC__Frame *  frame,
const FLAC__int32 *const  buffer[] 
)
overrideprotected

Definition at line 236 of file ImportFLAC.cpp.

238{
239 // Don't let C++ exceptions propagate through libflac
240 return GuardedCall< FLAC__StreamDecoderWriteStatus > ( [&] {
241 auto tmp = ArrayOf< short >{ frame->header.blocksize };
242
243 auto iter = mFile->mChannels.begin();
244 for (unsigned int chn=0; chn<mFile->mNumChannels; ++iter, ++chn) {
245 if (frame->header.bits_per_sample <= 16) {
246 if (frame->header.bits_per_sample == 8) {
247 for (unsigned int s = 0; s < frame->header.blocksize; s++) {
248 tmp[s] = buffer[chn][s] << 8;
249 }
250 } else /* if (frame->header.bits_per_sample == 16) */ {
251 for (unsigned int s = 0; s < frame->header.blocksize; s++) {
252 tmp[s] = buffer[chn][s];
253 }
254 }
255
256 iter->get()->Append((samplePtr)tmp.get(),
258 frame->header.blocksize, 1,
260 }
261 else {
262 iter->get()->Append((samplePtr)buffer[chn],
264 frame->header.blocksize, 1,
266 }
267 }
268
269 mFile->mSamplesDone += frame->header.blocksize;
270
271 mFile->mUpdateResult = mFile->mProgress->Update((wxULongLong_t) mFile->mSamplesDone, mFile->mNumSamples != 0 ? (wxULongLong_t)mFile->mNumSamples : 1);
273 {
274 return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
275 }
276
277 return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
278 }, MakeSimpleGuard(FLAC__STREAM_DECODER_WRITE_STATUS_ABORT) );
279}
SimpleGuard< R > MakeSimpleGuard(R value) noexcept(noexcept(SimpleGuard< R >{ value }))
Convert a value to a handler function returning that value, suitable for GuardedCall<R>
char * samplePtr
Definition: SampleFormat.h:55
Append([](My &table) -> Registry::BaseItemPtr { if(WaveTrackSubViews::slots() > 1) return std::make_unique< Entry >("MultiView", Entry::CheckItem, OnMultiViewID, XXO("&Multi-view"), POPUP_MENU_FN(OnMultiView), table, [](PopupMenuHandler &handler, wxMenu &menu, int id){ auto &table=static_cast< WaveTrackMenuTable & >(handler);auto &track=table.FindWaveTrack();const auto &view=WaveTrackView::Get(track);menu.Check(id, view.GetMultiView());});else return nullptr;})
This simplifies arrays of arrays, each array separately allocated with NEW[] But it might be better t...
Definition: MemoryX.h:27
NewChannelGroup mChannels
Definition: ImportFLAC.cpp:169
FLAC__uint64 mSamplesDone
Definition: ImportFLAC.cpp:166
ProgressResult mUpdateResult
Definition: ImportFLAC.cpp:168
std::unique_ptr< ProgressDialog > mProgress
Definition: ImportPlugin.h:164

References Append(), int16Sample, int24Sample, FLACImportFileHandle::mChannels, mFile, and FLACImportFileHandle::mNumChannels.

Here is the call graph for this function:

Friends And Related Function Documentation

◆ FLACImportFileHandle

friend class FLACImportFileHandle
friend

Definition at line 104 of file ImportFLAC.cpp.

Member Data Documentation

◆ mComments

wxArrayString MyFLACFile::mComments
private

Definition at line 107 of file ImportFLAC.cpp.

Referenced by metadata_callback().

◆ mFile

FLACImportFileHandle* MyFLACFile::mFile
private

Definition at line 105 of file ImportFLAC.cpp.

Referenced by metadata_callback(), and write_callback().

◆ mWasError

bool MyFLACFile::mWasError
private

Definition at line 106 of file ImportFLAC.cpp.

Referenced by error_callback(), get_was_error(), and MyFLACFile().


The documentation for this class was generated from the following file: