Ignore:
Timestamp:
12/15/07 19:09:12 (15 years ago)
Author:
radscorpion
Message:

Fixed seeking.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • dsfilters/dec_mpc/src/mpc_filter.cpp

    r372 r373  
    77//-----------------------------------------------------------------------------
    88#include "stdafx.h"
     9
    910
    1011
     
    283284HRESULT CMPCDecoder::Receive(IMediaSample *pSample)
    284285{
    285         if (!m_pOutput->IsConnected()) return NOERROR;
     286        if (!m_pOutput->IsConnected()) {
     287                return E_FAIL;
     288        }
     289
     290        // we don't accept data while flushing
     291        if (m_pInput->IsFlushing()) {
     292                return E_UNEXPECTED;
     293        }
     294
    286295
    287296        // we receive whole AP packets so just decode the frames :D
     
    295304        reader.AppendSE();
    296305
    297         // manually clear the buffer for demuxer
    298         demux->bytes_total = 0;
    299         demux->bits_reader.buff = demux->buffer;
    300         demux->bits_reader.count = 8;
    301         demux->block_bits = 0;
    302         demux->block_frames = 0;
    303 
    304306        // TODO: use some more clever way of doing this.
    305307        MPC_SAMPLE_FORMAT       samples[1152 * 8];
     
    322324        }
    323325
     326        // manually clear the buffer for demuxer
     327        demux->bytes_total = reader.size; // 0
     328        demux->bits_reader.buff = reader.buf; //d->buffer;
     329        demux->bits_reader.count = 8;
     330        demux->block_bits = 0;
     331        demux->block_frames = 0;
     332        demux->d->decoded_samples = 0;
     333
    324334        // now scan through the frames
    325         while (true) {
     335        int frame_cnt = 1 << stream_info.block_pwr;
     336        for (int i=0; i<frame_cnt; i++) {
    326337
    327338                //---------------------------------------------------------------------
     
    336347                // decode one frame
    337348                err = mpc_demux_decode(demux, &frame);
    338                 if (err != MPC_STATUS_OK) break;
    339                 if (frame.bits == -1) break;                            // done.
     349                if (err != MPC_STATUS_OK) {
     350                        break;
     351                }
     352                if (frame.bits == -1) {
     353                        break;                          // done.
     354                }
     355
    340356
    341357                //---------------------------------------------------------------------
     
    352368                                __int64 to_skip = min(frame.samples, samples_to_skip);
    353369                                decoded_time_samples -= to_skip;
     370                                samples_to_skip          -= to_skip;
    354371                                current_sample           += to_skip;
    355372                                src_samples                      += (to_skip * stream_info.channels);
Note: See TracChangeset for help on using the changeset viewer.