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

Fixed seeking.

File:
1 edited

Legend:

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

    r372 r373  
    270270HRESULT CMPCOutputPin::DoNewSegment(REFERENCE_TIME rtStart, REFERENCE_TIME rtStop, double dRate)
    271271{
    272         DataPacket      *packet;
    273         int ret = GetDataPacket(&packet);
    274         if (ret < 0 || !packet) return E_FAIL;
    275272
    276273        // queue the EOS packet
     
    280277        eos_delivered = false;
    281278
    282         {
    283                 CAutoLock       lck(&lock_queue);
    284                 packet->type = DataPacket::PACKET_TYPE_NEW_SEGMENT;
    285                 packet->rtStart = rtStart;
    286                 packet->rtStop = rtStop;
    287                 packet->rate = rate;
    288                 queue.AddTail(packet);
    289                 ev_can_read.Set();
     279
     280        if (1) {
     281                return DeliverNewSegment(rtStart, rtStop, rate);
    290282                discontinuity = true;
    291         }
    292 
     283
     284        } else {
     285                DataPacket      *packet = new DataPacket();
     286                {
     287                        CAutoLock       lck(&lock_queue);
     288                        packet->type = DataPacket::PACKET_TYPE_NEW_SEGMENT;
     289                        packet->rtStart = rtStart;
     290                        packet->rtStop = rtStop;
     291                        packet->rate = rate;
     292                        queue.AddTail(packet);
     293                        ev_can_read.Set();
     294                        discontinuity = true;
     295                }
     296        }
    293297        return NOERROR;
    294298}
     
    352356        if (ret < 0 || !outp) return E_FAIL;
    353357
    354         REFERENCE_TIME start, stop;
    355 
    356358        outp->type        = DataPacket::PACKET_TYPE_DATA;
    357359
     
    421423        IMediaSample    *sample;
    422424        HRESULT hr = GetDeliveryBuffer(&sample, NULL, NULL, 0);
    423         if (FAILED(hr)) return E_FAIL;
     425        if (FAILED(hr)) {
     426                return E_FAIL;
     427        }
    424428
    425429        // we should have enough space in there
     
    496500                switch (cmd) {
    497501                case CMD_EXIT:          Reply(0); return 0; break;
    498                 case CMD_STOP:          Reply(0); break;
     502                case CMD_STOP:
     503                        {
     504                                Reply(0);
     505                        }
     506                        break;
    499507                case CMD_RUN:
    500508                        {
     
    530538                                                        DeliverEndOfStream();
    531539                                                } else
     540                                                if (packet->type == DataPacket::PACKET_TYPE_NEW_SEGMENT) {
     541                                                        hr = DeliverNewSegment(packet->rtStart, packet->rtStop, packet->rate);
     542                                                } else
    532543                                                if (packet->type == DataPacket::PACKET_TYPE_DATA) {
    533544                                                        hr = DeliverDataPacket(*packet);
     
    541552                                        }
    542553                                } while (!CheckRequest(&cmd2));
     554
    543555                        }
    544556                        break;
     
    614626
    615627        // TODO: Caching here !!!!
     628        //TRACE("    - read, %I64d, %d\n", position, size);
    616629
    617630        HRESULT hr = reader->SyncRead(position, size, (BYTE*)buf);
Note: See TracChangeset for help on using the changeset viewer.