| 1334 | |
| 1335 | |
| 1336 | void SampleBuffer::loadFromBase64( const QString & _data ) |
| 1337 | { |
| 1338 | char * dst = NULL; |
| 1339 | int dsize = 0; |
| 1340 | base64::decode( _data, &dst, &dsize ); |
| 1341 | |
| 1342 | #ifdef LMMS_HAVE_FLAC_STREAM_DECODER_H |
| 1343 | |
| 1344 | QByteArray orig_data = QByteArray::fromRawData( dst, dsize ); |
| 1345 | QBuffer ba_reader( &orig_data ); |
| 1346 | ba_reader.open( QBuffer::ReadOnly ); |
| 1347 | |
| 1348 | QBuffer ba_writer; |
| 1349 | ba_writer.open( QBuffer::WriteOnly ); |
| 1350 | |
| 1351 | flacStreamDecoderClientData cdata = { &ba_reader, &ba_writer } ; |
| 1352 | |
| 1353 | FLAC__StreamDecoder * flac_dec = FLAC__stream_decoder_new(); |
| 1354 | |
| 1355 | FLAC__stream_decoder_set_read_callback( flac_dec, |
| 1356 | flacStreamDecoderReadCallback ); |
| 1357 | FLAC__stream_decoder_set_write_callback( flac_dec, |
| 1358 | flacStreamDecoderWriteCallback ); |
| 1359 | FLAC__stream_decoder_set_error_callback( flac_dec, |
| 1360 | flacStreamDecoderErrorCallback ); |
| 1361 | FLAC__stream_decoder_set_metadata_callback( flac_dec, |
| 1362 | flacStreamDecoderMetadataCallback ); |
| 1363 | FLAC__stream_decoder_set_client_data( flac_dec, &cdata ); |
| 1364 | |
| 1365 | FLAC__stream_decoder_init( flac_dec ); |
| 1366 | |
| 1367 | FLAC__stream_decoder_process_until_end_of_stream( flac_dec ); |
| 1368 | |
| 1369 | FLAC__stream_decoder_finish( flac_dec ); |
| 1370 | FLAC__stream_decoder_delete( flac_dec ); |
| 1371 | |
| 1372 | ba_reader.close(); |
| 1373 | |
| 1374 | orig_data = ba_writer.buffer(); |
| 1375 | printf("%d\n", (int) orig_data.size() ); |
| 1376 | |
| 1377 | m_origFrames = orig_data.size() / sizeof( sampleFrame ); |
| 1378 | MM_FREE( m_origData ); |
| 1379 | m_origData = MM_ALLOC( sampleFrame, m_origFrames ); |
| 1380 | memcpy( m_origData, orig_data.data(), orig_data.size() ); |
| 1381 | |
| 1382 | #else /* LMMS_HAVE_FLAC_STREAM_DECODER_H */ |
| 1383 | |
| 1384 | m_origFrames = dsize / sizeof( sampleFrame ); |
| 1385 | MM_FREE( m_origData ); |
| 1386 | m_origData = MM_ALLOC( sampleFrame, m_origFrames ); |
| 1387 | memcpy( m_origData, dst, dsize ); |
| 1388 | |
| 1389 | #endif |
| 1390 | |
| 1391 | delete[] dst; |
| 1392 | |
| 1393 | m_audioFile = QString(); |