From 1a50289baa5023b617772d75d63dc19120aa3cd6 Mon Sep 17 00:00:00 2001 From: David McPaul Date: Sun, 11 Jan 2009 07:06:51 +0000 Subject: [PATCH] Implement seeking support git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28876 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../media/plugins/ac3_decoder/ac3_decoder.cpp | 23 +++++++++++++++++++ .../media/plugins/ac3_decoder/ac3_decoder.h | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/add-ons/media/plugins/ac3_decoder/ac3_decoder.cpp b/src/add-ons/media/plugins/ac3_decoder/ac3_decoder.cpp index 498592f060..079f8b7d61 100644 --- a/src/add-ons/media/plugins/ac3_decoder/ac3_decoder.cpp +++ b/src/add-ons/media/plugins/ac3_decoder/ac3_decoder.cpp @@ -16,6 +16,9 @@ #include #include #include + +#include + #include "ac3_decoder.h" @@ -194,6 +197,8 @@ AC3Decoder::NegotiateOutputFormat(media_format *ioDecodedFormat) ioDecodedFormat->u.raw_audio.buffer_size = 6 * 256 * fChannelCount * sizeof(float); ioDecodedFormat->u.raw_audio.channel_mask = fChannelMask; + fFrameSize = (ioDecodedFormat->u.raw_audio.format & 0xf) * ioDecodedFormat->u.raw_audio.channel_count; + return B_OK; } @@ -205,6 +210,24 @@ AC3Decoder::Seek(uint32 seekTo, { fInputChunkSize = 0; fInputBufferSize = 0; + + TRACE("AC3Decoder::Seek called\n"); + + if (seekTo == B_MEDIA_SEEK_TO_TIME) { + TRACE("AC3Decoder::Seek by time "); + TRACE("from frame %Ld and time %Ld TO Required Time %Ld. ", *frame, *time, seekTime); + + *frame = (int64)(*time / (fFrameSize * 1000000.0 / fFrameRate)); + } else if (seekTo == B_MEDIA_SEEK_TO_FRAME) { + TRACE("AC3Decoder::Seek by Frame "); + TRACE("from Current Time %Ld and frame %Ld TO Required Frame %Ld. ", *time, *frame, seekFrame); + + *time = (bigtime_t)(*frame * fFrameSize * 1000000.0 / fFrameRate); + } else + return B_BAD_VALUE; + + TRACE("so new frame is %Ld at time %Ld\n", *frame, *time); + return B_OK; } diff --git a/src/add-ons/media/plugins/ac3_decoder/ac3_decoder.h b/src/add-ons/media/plugins/ac3_decoder/ac3_decoder.h index 55b45c9b14..94e8a0a00e 100644 --- a/src/add-ons/media/plugins/ac3_decoder/ac3_decoder.h +++ b/src/add-ons/media/plugins/ac3_decoder/ac3_decoder.h @@ -72,7 +72,7 @@ private: int fFlags; int fFrameRate; int fBitRate; - + int fFrameSize; int fChannelCount; int fChannelMask; int *fInterleaveOffset;