Ignore:
Timestamp:
12/15/07 17:04:51 (16 years ago)
Author:
radscorpion
Message:

Seeking fixes. Splitter now registers mediatypes

File:
1 edited

Legend:

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

    r368 r372  
    338338                                if (output.GetCount() <= 0) break;
    339339                                if (output[0]->IsConnected() == FALSE) break;
     340                                int     delivered = 0;
    340341
    341342                                do {
    342343
    343344                                        // are we supposed to abort ?
    344                                         if (ev_abort.Check()) {
    345                                                 ret = 0;
     345                                        if (ev_abort.Check()) {
    346346                                                break;
    347347                                        }
    348348
    349349                                        ret = file->ReadAudioPacket(&packet, &current_sample);
     350                                        if (ret == -2) {
     351                                                // end of stream
     352                                                if (!ev_abort.Check()) {
     353                                                        output[0]->DoEndOfStream();
     354                                                }
     355                                                break;
     356                                        } else
    350357                                        if (ret < 0) {
    351                                                 // end of stream
    352358                                                break;
    353359                                        } else {
     
    359365
    360366                                                // deliver packet
    361                                                 output[0]->DeliverPacket(packet);
     367                                                hr = output[0]->DeliverPacket(packet);
     368                                                if (FAILED(hr)) break;
     369
     370                                                delivered++;
    362371                                        }
    363372
    364373                                } while (!CheckRequest(&cmd2));
    365 
    366                                 // end of stream
    367                                 if (ret == -1) {
    368                                         output[0]->DoEndOfStream();
    369                                 }
    370 
    371374                        }
    372375                        break;
     
    484487        if (reader) reader->BeginFlush();
    485488
    486         for (int i=0; i<output.GetCount(); i++) {
    487                 CMPCOutputPin   *pin = output[i];
    488                 if (pin->IsConnected()) {
    489                         // abort
    490                         if (m_State != State_Stopped) {
    491                                 if (pin->ThreadExists()) {
    492                                         pin->ev_abort.Set();
    493                                         pin->DeliverBeginFlush();
    494                                         pin->CallWorker(CMD_STOP);
    495                                         pin->FlushQueue();
    496                                 }
     489        CMPCOutputPin   *pin = output[0];
     490        FILTER_STATE    state = m_State;
     491
     492        if (pin->IsConnected()) {
     493                // abort
     494                if (state != State_Stopped) {
     495                        if (pin->ThreadExists()) {
     496                                pin->ev_abort.Set();
     497                                pin->DeliverBeginFlush();
     498
     499                                pin->CallWorker(CMD_STOP);
     500                                pin->FlushQueue();
    497501                        }
    498502                }
    499503        }
    500504
    501         for (int i=0; i<output.GetCount(); i++) {
    502                 CMPCOutputPin   *pin = output[i];
    503                 if (pin->IsConnected()) {
    504                         if (m_State != State_Stopped) {
    505                                 if (pin->ThreadExists()) {
    506                                         pin->ev_abort.Reset();
    507                                         pin->DeliverEndFlush();
    508                                 }
     505        if (reader) reader->EndFlush();
     506
     507        if (pin->IsConnected()) {
     508                if (state != State_Stopped) {
     509                        if (pin->ThreadExists()) {
     510                                pin->ev_abort.Reset();
     511                                pin->DeliverEndFlush();
    509512                        }
    510                         pin->DoNewSegment(rtCurrent, rtStop, rate);
    511                 }
     513                }
     514                pin->DoNewSegment(rtCurrent, rtStop, rate);
    512515        }
    513516
     
    515518                CallWorker(CMD_STOP);
    516519        }
    517         if (reader) reader->EndFlush();
    518520
    519521        // seek the file
     
    528530        }
    529531
    530         for (int i=0; i<output.GetCount(); i++) {
    531                 CMPCOutputPin   *pin = output[i];
    532 
    533                 // we only care about connected pins
    534                 if (pin->IsConnected()) {
    535                         if (m_State != State_Stopped) {
    536                                 // spustime aj jeho thread
    537                                 if (pin->ThreadExists()) {
    538                                         pin->CallWorker(CMD_RUN);
    539                                 }
     532        if (pin->IsConnected()) {
     533                if (state != State_Stopped) {
     534                        // spustime aj jeho thread
     535                        if (pin->ThreadExists()) {
     536                                pin->FlushQueue();
     537                                pin->CallWorker(CMD_RUN);
    540538                        }
    541539                }
     
    594592
    595593                if (reader) reader->EndFlush();
     594                ev_abort.Reset();
    596595        }
    597596
Note: See TracChangeset for help on using the changeset viewer.