Lines Matching refs:stream

41 #define SOS	0xffda	/* start of stream */
56 * struct jpeg_stream - JPEG byte stream
57 * @curr: current position in stream
66 static int jpeg_get_byte(struct jpeg_stream *stream)
68 if (stream->curr >= stream->end)
71 return *stream->curr++;
75 static int jpeg_get_word_be(struct jpeg_stream *stream)
79 if (stream->curr + sizeof(__be16) > stream->end)
82 word = get_unaligned_be16(stream->curr);
83 stream->curr += sizeof(__be16);
88 static int jpeg_skip(struct jpeg_stream *stream, size_t len)
90 if (stream->curr + len > stream->end)
93 stream->curr += len;
98 static int jpeg_next_marker(struct jpeg_stream *stream)
103 while ((byte = jpeg_get_byte(stream)) >= 0) {
113 /* this does not advance the current position in the stream */
114 static int jpeg_reference_segment(struct jpeg_stream *stream,
119 if (stream->curr + sizeof(__be16) > stream->end)
122 len = get_unaligned_be16(stream->curr);
123 if (stream->curr + len > stream->end)
126 segment->start = stream->curr;
155 static int jpeg_parse_frame_header(struct jpeg_stream *stream, u16 sof_marker,
158 int len = jpeg_get_word_be(stream);
171 p = jpeg_get_byte(stream);
181 y = jpeg_get_word_be(stream);
187 x = jpeg_get_word_be(stream);
193 nf = jpeg_get_byte(stream);
214 c = jpeg_get_byte(stream);
218 h_v = jpeg_get_byte(stream);
233 tq = jpeg_get_byte(stream);
245 return jpeg_skip(stream, len - 2);
251 static int jpeg_parse_scan_header(struct jpeg_stream *stream,
255 int len = jpeg_get_word_be(stream);
267 ns = jpeg_get_byte(stream);
279 cs = jpeg_get_byte(stream);
283 td_ta = jpeg_get_byte(stream);
300 return jpeg_skip(stream, skip);
304 static int jpeg_parse_quantization_tables(struct jpeg_stream *stream,
308 int len = jpeg_get_word_be(stream);
320 int pq_tq = jpeg_get_byte(stream);
341 qk = stream->curr;
342 ret = jpeg_skip(stream, pq ? 128 : 64);
358 static int jpeg_parse_huffman_tables(struct jpeg_stream *stream,
362 int len = jpeg_get_word_be(stream);
372 int tc_th = jpeg_get_byte(stream);
390 table = stream->curr;
395 li = jpeg_get_byte(stream);
402 ret = jpeg_skip(stream, mt);
408 tables[(tc << 1) | th].length = stream->curr - table;
412 return jpeg_skip(stream, len - 2);
416 static int jpeg_parse_restart_interval(struct jpeg_stream *stream,
419 int len = jpeg_get_word_be(stream);
427 ri = jpeg_get_word_be(stream);
436 static int jpeg_skip_segment(struct jpeg_stream *stream)
438 int len = jpeg_get_word_be(stream);
445 return jpeg_skip(stream, len - 2);
449 static int jpeg_parse_app14_data(struct jpeg_stream *stream,
456 lp = jpeg_get_word_be(stream);
461 if (stream->curr + 6 > stream->end ||
462 strncmp(stream->curr, "Adobe\0", 6))
463 return jpeg_skip(stream, lp - 2);
466 ret = jpeg_skip(stream, 11);
470 ret = jpeg_get_byte(stream);
478 return jpeg_skip(stream, skip);
496 struct jpeg_stream stream;
500 stream.curr = buf;
501 stream.end = stream.curr + len;
507 if (jpeg_get_word_be(&stream) != SOI)
514 while ((marker = jpeg_next_marker(&stream)) >= 0) {
518 ret = jpeg_reference_segment(&stream, &out->sof);
521 ret = jpeg_parse_frame_header(&stream, marker,
536 ret = jpeg_reference_segment(&stream,
541 ret = jpeg_skip_segment(&stream);
544 ret = jpeg_parse_huffman_tables(&stream,
548 ret = jpeg_reference_segment(&stream,
553 ret = jpeg_skip_segment(&stream);
556 ret = jpeg_parse_quantization_tables(&stream,
561 ret = jpeg_parse_restart_interval(&stream,
565 ret = jpeg_parse_app14_data(&stream,
569 ret = jpeg_reference_segment(&stream, &out->sos);
572 ret = jpeg_parse_scan_header(&stream, out->scan);
577 out->ecs_offset = stream.curr - (u8 *)buf;
588 ret = jpeg_skip_segment(&stream);
610 struct jpeg_stream stream;
612 stream.curr = buf;
613 stream.end = stream.curr + len;
614 return jpeg_parse_frame_header(&stream, SOF0, frame_header);
629 struct jpeg_stream stream;
631 stream.curr = buf;
632 stream.end = stream.curr + len;
633 return jpeg_parse_scan_header(&stream, scan_header);
650 struct jpeg_stream stream;
652 stream.curr = buf;
653 stream.end = stream.curr + len;
654 return jpeg_parse_quantization_tables(&stream, precision, q_tables);
671 struct jpeg_stream stream;
673 stream.curr = buf;
674 stream.end = stream.curr + len;
675 return jpeg_parse_huffman_tables(&stream, huffman_tables);