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_pin.cpp

    r368 r372  
    248248        ev_abort.Reset();
    249249
     250        HRESULT hr = CBaseOutputPin::Active();
     251        if (FAILED(hr)) {
     252                active = FALSE;
     253                return hr;
     254        }
     255
     256        // new segment
     257        DoNewSegment(rtStart, rtStop, rate);
     258
    250259        // vytvorime novu queue
    251260        if (!ThreadExists()) {
     
    254263        }
    255264
    256         HRESULT hr = CBaseOutputPin::Active();
    257         if (FAILED(hr)) {
    258                 active = FALSE;
    259                 return hr;
    260         }
    261 
    262         // new segment
    263         DoNewSegment(rtStart, rtStop, rate);
    264265        active = TRUE;
    265266        return hr;
     
    343344HRESULT CMPCOutputPin::DeliverPacket(CMPCPacket &packet)
    344345{
     346        // we don't accept packets while aborting...
     347        if (ev_abort.Check()) return E_FAIL;
     348
    345349        // ziskame novy packet na vystup
    346350        DataPacket      *outp = NULL;
     
    388392HRESULT CMPCOutputPin::DoEndOfStream()
    389393{
    390         DataPacket      *packet;
    391         int ret = GetDataPacket(&packet);
    392         if (ret < 0 || !packet) return E_FAIL;
     394        DataPacket      *packet = new DataPacket();
    393395
    394396        // naqueueujeme EOS
     
    413415        ev_can_read.Reset();
    414416        ev_can_write.Set();
    415 
    416         // we return buffer level only for the first pin
    417         /*
    418         if (stream_index == demux->buf_index) {
    419                 //MonoBase::AutoLock    lck2(&demux->lock_info);
    420                 demux->buf_size_ms = GetBufferTime_MS();
    421         }
    422         */
    423417}
    424418
     
    538532                                                if (packet->type == DataPacket::PACKET_TYPE_DATA) {
    539533                                                        hr = DeliverDataPacket(*packet);
    540                                                         if (SUCCEEDED(hr)) {
    541 
    542                                                                 /*
    543                                                                 if (stream_index == demux->buf_index) {
    544                                                                         int     size = GetBufferTime_MS();
    545                                                                         {
    546                                                                                 MonoBase::AutoLock      lck2(&demux->lock_info);
    547                                                                                 demux->buf_size_ms = size;
    548                                                                                 demux->NotifyEvent(EC_BUFFER_STATE, size, demux->internal_buffer_size);         // v milisekundach
    549                                                                         }
    550                                                                         demux->UpdatePage(1);
    551 
    552                                                                         // posleme notifikaciu, ze data boli dorucene
    553                                                                         if (is_first) {
    554                                                                                 is_first = false;
    555                                                                                 demux->NotifyEvent(EC_FRAME_READY, 0, 0);
    556                                                                         }
    557 
    558                                                                         // starvation
    559                                                                         if (size < 0.05*demux->internal_buffer_size && !eos_delivered &&
    560                                                                                 demux->ev_ready.Check() == TRUE
    561                                                                                 ) {
    562                                                                                 demux->NotifyStarvation();
    563                                                                         }
    564                                                                 }
    565                                                                 */
    566                                                         }
    567534                                                }                                       
    568535
     
    596563        reader = rd;
    597564        reader->AddRef();
    598         pos = 0;
     565        position = 0;
    599566}
    600567
     
    623590
    624591        // aktualna pozicia
    625         if (pos) *pos = this->pos;
     592        if (pos) *pos = position;
    626593        return 0;
    627594}
     
    634601
    635602        // seekneme
    636         this->pos = pos;
     603        position = pos;
    637604        return 0;
    638605}
     
    642609        __int64 avail, total;
    643610        GetSize(&avail, &total);
    644         if (pos + size > avail) return -1;
     611        if (position + size > avail) {
     612                return -1;
     613        }
    645614
    646615        // TODO: Caching here !!!!
    647616
    648         HRESULT hr = reader->SyncRead(pos, size, (BYTE*)buf);
    649         if (FAILED(hr)) return -2;
     617        HRESULT hr = reader->SyncRead(position, size, (BYTE*)buf);
     618        if (FAILED(hr)) {
     619                return -1;
     620        }
    650621
    651622        // update position
    652         pos += size;
     623        position += size;
    653624        return 0;
    654625}
Note: See TracChangeset for help on using the changeset viewer.