Changeset 372 for dsfilters/demux_mpc/src/mpc_filter.cpp
- Timestamp:
- 12/15/07 17:04:51 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
dsfilters/demux_mpc/src/mpc_filter.cpp
r368 r372 338 338 if (output.GetCount() <= 0) break; 339 339 if (output[0]->IsConnected() == FALSE) break; 340 int delivered = 0; 340 341 341 342 do { 342 343 343 344 // are we supposed to abort ? 344 if (ev_abort.Check()) { 345 ret = 0; 345 if (ev_abort.Check()) { 346 346 break; 347 347 } 348 348 349 349 ret = file->ReadAudioPacket(&packet, ¤t_sample); 350 if (ret == -2) { 351 // end of stream 352 if (!ev_abort.Check()) { 353 output[0]->DoEndOfStream(); 354 } 355 break; 356 } else 350 357 if (ret < 0) { 351 // end of stream352 358 break; 353 359 } else { … … 359 365 360 366 // deliver packet 361 output[0]->DeliverPacket(packet); 367 hr = output[0]->DeliverPacket(packet); 368 if (FAILED(hr)) break; 369 370 delivered++; 362 371 } 363 372 364 373 } while (!CheckRequest(&cmd2)); 365 366 // end of stream367 if (ret == -1) {368 output[0]->DoEndOfStream();369 }370 371 374 } 372 375 break; … … 484 487 if (reader) reader->BeginFlush(); 485 488 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(); 497 501 } 498 502 } 499 503 } 500 504 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(); 509 512 } 510 pin->DoNewSegment(rtCurrent, rtStop, rate);511 }513 } 514 pin->DoNewSegment(rtCurrent, rtStop, rate); 512 515 } 513 516 … … 515 518 CallWorker(CMD_STOP); 516 519 } 517 if (reader) reader->EndFlush();518 520 519 521 // seek the file … … 528 530 } 529 531 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); 540 538 } 541 539 } … … 594 592 595 593 if (reader) reader->EndFlush(); 594 ev_abort.Reset(); 596 595 } 597 596
Note: See TracChangeset
for help on using the changeset viewer.