static guint find_psc (GstBuffer * buffer, guint skip) { GstByteReader br; guint psc_pos = -1, psc; gst_byte_reader_init_from_buffer (&br, buffer); if (!gst_byte_reader_set_pos (&br, skip)) goto out; gst_byte_reader_peek_uint24_be (&br, &psc); /* Scan for the picture start code (22 bits - 0x0020) */ while ((gst_byte_reader_get_remaining (&br) >= 3)) { if (gst_byte_reader_peek_uint24_be (&br, &psc) && ((psc & 0xffffc0) == 0x000080)) { psc_pos = gst_byte_reader_get_pos (&br); break; } else gst_byte_reader_skip (&br, 1); } out: return psc_pos; }
static guint find_psc (GstBuffer * buffer, guint skip) { GstMapInfo map; GstByteReader br; guint psc_pos = -1, psc; gst_buffer_map (buffer, &map, GST_MAP_READ); gst_byte_reader_init (&br, map.data, map.size); if (!gst_byte_reader_set_pos (&br, skip)) goto out; if (gst_byte_reader_peek_uint24_be (&br, &psc) == FALSE) goto out; /* Scan for the picture start code (22 bits - 0x0020) */ while ((gst_byte_reader_get_remaining (&br) >= 3)) { if (gst_byte_reader_peek_uint24_be (&br, &psc) && ((psc & 0xffffc0) == 0x000080)) { psc_pos = gst_byte_reader_get_pos (&br); break; } else if (gst_byte_reader_skip (&br, 1) == FALSE) break; } out: gst_buffer_unmap (buffer, &map); return psc_pos; }
static guint find_psc (GstByteReader * br) { guint psc_pos = -1, psc; if (!gst_byte_reader_peek_uint24_be (br, &psc)) goto failed; /* Scan for the picture start code (22 bits - 0x0020) */ while ((gst_byte_reader_get_remaining (br) >= 3)) { if (gst_byte_reader_peek_uint24_be (br, &psc) && ((psc & 0xfffffc) == 0x000080)) { psc_pos = gst_byte_reader_get_pos (br); break; } else gst_byte_reader_skip_unchecked (br, 1); } failed: return psc_pos; }