nsresult OggCodecState::PacketOutUntilGranulepos(bool& aFoundGranulepos) { int r; aFoundGranulepos = false; // Extract packets from the sync state until either no more packets // come out, or we get a data packet with non -1 granulepos. do { ogg_packet packet; r = ogg_stream_packetout(&mState, &packet); if (r == 1) { ogg_packet* clone = Clone(&packet); if (IsHeader(&packet)) { // Header packets go straight into the packet queue. mPackets.Append(clone); } else { // We buffer data packets until we encounter a granulepos. We'll // then use the granulepos to figure out the granulepos of the // preceeding packets. mUnstamped.AppendElement(clone); aFoundGranulepos = packet.granulepos > 0; } } } while (r != 0 && !aFoundGranulepos); if (ogg_stream_check(&mState)) { NS_WARNING("Unrecoverable error in ogg_stream_packetout"); return NS_ERROR_FAILURE; } return NS_OK; }
static PyObject * py_ogg_ogg_stream_check(PyObject *self, PyObject *args) { int size; int c_out; ogg_stream_state * os; PyArg_ParseTuple(args, "s#", &os, &size); c_out = ogg_stream_check(os); return Py_BuildValue("i", c_out); };
nsresult nsOggCodecState::PageIn(ogg_page* aPage) { if (!mActive) return NS_OK; NS_ASSERTION(ogg_page_serialno(aPage) == mSerial, "Page must be for this stream!"); if (ogg_stream_pagein(&mState, aPage) == -1) return NS_ERROR_FAILURE; int r; do { ogg_packet packet; r = ogg_stream_packetout(&mState, &packet); if (r == 1) { mPackets.Append(Clone(&packet)); } } while (r != 0); if (ogg_stream_check(&mState)) { NS_WARNING("Unrecoverable error in ogg_stream_packetout"); return NS_ERROR_FAILURE; } return NS_OK; }