3 * Copyright (c) 2000, 2001 Fabrice Bellard.
4 * Copyright (c) 2003 Alex Beregszaszi
5 * Copyright (c) 2003-2004 Michael Niedermayer
7 * This file is part of FFmpeg.
9 * FFmpeg is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
14 * FFmpeg is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with FFmpeg; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 * @file mjpeg_parser.c
33 * finds the end of the current frame in the bitstream.
34 * @return the position of the first byte of the next frame, or -1
36 static int find_frame_end(ParseContext
*pc
, const uint8_t *buf
, int buf_size
){
40 vop_found
= pc
->frame_start_found
;
45 for(i
=0; i
<buf_size
; i
++){
46 state
= (state
<<8) | buf
[i
];
56 /* EOF considered as end of frame */
59 for(; i
<buf_size
; i
++){
60 state
= (state
<<8) | buf
[i
];
62 pc
->frame_start_found
=0;
68 pc
->frame_start_found
= vop_found
;
73 static int jpeg_parse(AVCodecParserContext
*s
,
74 AVCodecContext
*avctx
,
75 const uint8_t **poutbuf
, int *poutbuf_size
,
76 const uint8_t *buf
, int buf_size
)
78 ParseContext
*pc
= s
->priv_data
;
81 next
= find_frame_end(pc
, buf
, buf_size
);
83 if (ff_combine_frame(pc
, next
, &buf
, &buf_size
) < 0) {
90 *poutbuf_size
= buf_size
;
95 AVCodecParser mjpeg_parser
= {