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 } }
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); }
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); }
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; }
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); }