mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-neutrino.git
synced 2025-09-01 09:51:13 +02:00
neutrino: fix playback position display in flacdec.cpp
git-svn-id: file:///home/bas/coolstream_public_svn/THIRDPARTY/applications/neutrino-experimental@1541 e54a6e83-5905-42d5-8d5c-058d10e6a962
Origin commit data
------------------
Commit: 545ff5456a
Author: Stefan Seyfried <seife@tuxbox-git.slipkontur.de>
Date: 2011-06-13 (Mon, 13 Jun 2011)
This commit is contained in:
@@ -423,6 +423,8 @@ CBaseDec::RetCode CFlacDec::Decoder(FILE *in, const int /*OutputFd*/, State* con
|
|||||||
mTimePlayed = time_played;
|
mTimePlayed = time_played;
|
||||||
mFrameCount = 0;
|
mFrameCount = 0;
|
||||||
mSamplesProcessed = 0;
|
mSamplesProcessed = 0;
|
||||||
|
struct stat s;
|
||||||
|
FLAC__uint64 filesize = 0;
|
||||||
|
|
||||||
mFlacDec = FLAC__stream_decoder_new();
|
mFlacDec = FLAC__stream_decoder_new();
|
||||||
|
|
||||||
@@ -432,6 +434,14 @@ CBaseDec::RetCode CFlacDec::Decoder(FILE *in, const int /*OutputFd*/, State* con
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fstat(fileno(in), &s))
|
||||||
|
{
|
||||||
|
perror("CFlacDec::Decoder fstat");
|
||||||
|
*time_played = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
filesize = (FLAC__uint64)s.st_size;
|
||||||
|
|
||||||
/* up and away ... */
|
/* up and away ... */
|
||||||
mSlotSize = MAX_OUTPUT_SAMPLES * 2 * FLAC__stream_decoder_get_channels(mFlacDec);
|
mSlotSize = MAX_OUTPUT_SAMPLES * 2 * FLAC__stream_decoder_get_channels(mFlacDec);
|
||||||
// State oldstate=*state;
|
// State oldstate=*state;
|
||||||
@@ -440,7 +450,7 @@ CBaseDec::RetCode CFlacDec::Decoder(FILE *in, const int /*OutputFd*/, State* con
|
|||||||
int bytes_to_skip = (int) (1.0 * actSecsToSkip * meta_data->bitrate / 8);
|
int bytes_to_skip = (int) (1.0 * actSecsToSkip * meta_data->bitrate / 8);
|
||||||
int bytes_to_play = (int) (1.0 * MSECS_TO_PLAY / 1000 * meta_data->bitrate / 8);
|
int bytes_to_play = (int) (1.0 * MSECS_TO_PLAY / 1000 * meta_data->bitrate / 8);
|
||||||
unsigned int oldSecsToSkip = *secondsToSkip;
|
unsigned int oldSecsToSkip = *secondsToSkip;
|
||||||
// FLAC__uint64 position;
|
FLAC__uint64 position;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -490,8 +500,10 @@ CBaseDec::RetCode CFlacDec::Decoder(FILE *in, const int /*OutputFd*/, State* con
|
|||||||
}
|
}
|
||||||
|
|
||||||
rval = FLAC__stream_decoder_process_single(mFlacDec);
|
rval = FLAC__stream_decoder_process_single(mFlacDec);
|
||||||
// TODO: calculate time_played from the actual file position so that REW/FF actions will be included
|
|
||||||
*time_played = (mSamplesProcessed * (mLengthInMsec/1000)) / mTotalSamples;
|
/* update playback position */
|
||||||
|
if (filesize > 0 && FLAC__stream_decoder_get_decode_position(mFlacDec, &position))
|
||||||
|
*time_played = position / 1000ULL * mLengthInMsec / filesize;
|
||||||
|
|
||||||
} while (rval && *state != STOP_REQ && Status == OK);
|
} while (rval && *state != STOP_REQ && Status == OK);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user