示例#1
0
extern "C" Box* listSetitemSlice(BoxedList* self, BoxedSlice* slice, Box* v) {
    LOCK_REGION(self->lock.asWrite());

    assert(self->cls == list_cls);
    assert(slice->cls == slice_cls);
    i64 start, stop, step;
    parseSlice(slice, self->size, &start, &stop, &step);
    RELEASE_ASSERT(step == 1, "step sizes must be 1 for now");

    assert(0 <= start && start < self->size);
    ASSERT(0 <= stop && stop <= self->size, "%ld %ld", self->size, stop);
    assert(start <= stop);

    ASSERT(v->cls == list_cls, "unsupported %s", getTypeName(v)->c_str());
    BoxedList* lv = static_cast<BoxedList*>(v);

    int delts = lv->size - (stop - start);
    int remaining_elts = self->size - stop;
    self->ensure(delts);

    memmove(self->elts->elts + start + lv->size, self->elts->elts + stop, remaining_elts * sizeof(Box*));
    for (int i = 0; i < lv->size; i++) {
        Box* r = lv->elts->elts[i];
        self->elts->elts[start + i] = r;
    }

    self->size += delts;

    return None;
}
unsigned MPEG1or2VideoStreamParser::parse() {
  try {
    switch (fCurrentParseState) {
    case PARSING_VIDEO_SEQUENCE_HEADER: {
      return parseVideoSequenceHeader(False);
    }
    case PARSING_VIDEO_SEQUENCE_HEADER_SEEN_CODE: {
      return parseVideoSequenceHeader(True);
    }
    case PARSING_GOP_HEADER: {
      return parseGOPHeader(False);
    }
    case PARSING_GOP_HEADER_SEEN_CODE: {
      return parseGOPHeader(True);
    }
    case PARSING_PICTURE_HEADER: {
      return parsePictureHeader();
    }
    case PARSING_SLICE: {
      return parseSlice();
    }
    default: {
      return 0; // shouldn't happen
    }
    }
  } catch (int /*e*/) {
#ifdef DEBUG
    fprintf(stderr, "MPEG1or2VideoStreamParser::parse() EXCEPTION (This is normal behavior - *not* an error)\n");
#endif
    return 0;  // the parsing got interrupted
  }
}
示例#3
0
文件: tuple.cpp 项目: jmgc/pyston
Box* tupleGetitemSlice(BoxedTuple* self, BoxedSlice* slice) {
    assert(isSubclass(self->cls, tuple_cls));
    assert(slice->cls == slice_cls);

    i64 start, stop, step, length;
    parseSlice(slice, self->size(), &start, &stop, &step, &length);
    return _tupleSlice(self, start, stop, step, length);
}
示例#4
0
extern "C" Box* listGetitemSlice(BoxedList* self, BoxedSlice* slice) {
    LOCK_REGION(self->lock.asRead());

    assert(self->cls == list_cls);
    assert(slice->cls == slice_cls);
    i64 start, stop, step, length;
    parseSlice(slice, self->size, &start, &stop, &step, &length);
    return _listSlice(self, start, stop, step, length);
}
示例#5
0
extern "C" Box* listDelitemSlice(BoxedList* self, BoxedSlice* slice) {
    LOCK_REGION(self->lock.asWrite());

    i64 start, stop, step;
    parseSlice(slice, self->size, &start, &stop, &step);
    RELEASE_ASSERT(step == 1, "step sizes must be 1 for now");

    assert(0 <= start && start < self->size);
    ASSERT(0 <= stop && stop <= self->size, "%ld %ld", self->size, stop);
    assert(start <= stop);

    int remaining_elts = self->size - stop;

    memmove(self->elts->elts + start, self->elts->elts + stop, remaining_elts * sizeof(Box*));
    self->size -= (stop - start);
    return None;
}
示例#6
0
	void Decoder::parsePicture()
	{
		m_input->getBits(32); // pictureStartCode
		int temporalReference = m_input->getBits(10);
		m_pictureCodingType = m_input->getBits(3);
		m_input->getBits(16); // vbvDelay

		// This data is to be used later by the player
		m_currentPicture->setTemporalReference(temporalReference);
		m_currentPicture->setPictureType((VideoPicture::PictureCoding) m_pictureCodingType);

		// "Copy" picture from Future Picture Store to Previous Picture Store
		// Refer to section 2-D.2.4
		if (m_pictureCodingType == VideoPicture::PictureCodingI || m_pictureCodingType == VideoPicture::PictureCodingP)
		{
			if (m_future != -1)
        		m_previous = m_future;
		}

		if (m_pictureCodingType == VideoPicture::PictureCodingP || m_pictureCodingType == VideoPicture::PictureCodingB) 
		{
			bool fullPelForwardVector = m_input->getBits(1) == 1;
			int forwardFCode = m_input->getBits(3);  // Can't be 0
			m_forwardRSize = forwardFCode - 1;
			m_forwardF = 1 << m_forwardRSize;

			m_forward->initialize(m_forwardF, fullPelForwardVector);
		}

		if (m_pictureCodingType == VideoPicture::PictureCodingB) 
		{
			bool fullPelBackwardVector = m_input->getBits(1) == 1;
			int backwardFCode = m_input->getBits(3); // Can't be 0
			m_backwardRSize = backwardFCode - 1;
			m_backwardF = 1 << m_backwardRSize;

			m_backward->initialize(m_backwardF, fullPelBackwardVector);
		}

		bool extraBitPicture = 0;
		while (m_input->nextBool()) 
		{
			extraBitPicture = m_input->getBool();
			m_input->skipBits(8); // extraInformationPicture
		}
		extraBitPicture = m_input->getBits(1);

		nextStartCode();

		if (m_input->nextBits(32) == ExtensionStartCode) 
		{
			m_input->skipBits(32);

			while (m_input->nextBits(24) != StartCode) 
			{
				m_input->skipBits(8); // pictureExtensionData
			}

			nextStartCode();
		}

		if (m_input->nextBits(32) == UserDataStartCode) 
		{
			m_input->skipBits(32);

			while (m_input->nextBits(24) != StartCode) 
			{
				m_input->getBits(8); // userData
			}

			nextStartCode();
		}

		do {
			parseSlice();
		} while (m_input->nextBits(32) == SliceStartCode);
	}