annotate rv20enc.c @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents be85455cab8f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10017
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
1 /*
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
2 * RV20 encoder
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
3 * Copyright (c) 2000,2001 Fabrice Bellard
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
4 * Copyright (c) 2002-2004 Michael Niedermayer
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
5 *
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
6 * This file is part of FFmpeg.
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
7 *
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
12 *
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
16 * Lesser General Public License for more details.
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
17 *
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
21 */
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
22
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
23 /**
11644
7dd2a45249a9 Remove explicit filename from Doxygen @file commands.
diego
parents: 11560
diff changeset
24 * @file
10017
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
25 * RV20 encoder
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
26 */
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
27
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
28 #include "mpegvideo.h"
11066
86bf7e0db6ea Add include to fix implicit declaration of ff_mpeg4_init_direct_mv and
reimar
parents: 10146
diff changeset
29 #include "h263.h"
10017
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
30 #include "put_bits.h"
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
31
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
32 void rv20_encode_picture_header(MpegEncContext *s, int picture_number){
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
33 put_bits(&s->pb, 2, s->pict_type); //I 0 vs. 1 ?
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
34 put_bits(&s->pb, 1, 0); /* unknown bit */
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
35 put_bits(&s->pb, 5, s->qscale);
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
36
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
37 put_sbits(&s->pb, 8, picture_number); //FIXME wrong, but correct is not known
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
38 s->mb_x= s->mb_y= 0;
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
39 ff_h263_encode_mba(s);
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
40
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
41 put_bits(&s->pb, 1, s->no_rounding);
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
42
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
43 assert(s->f_code == 1);
12517
be85455cab8f Fix rv20 encoding so the binary decoder can decode it.
michael
parents: 11644
diff changeset
44 assert(s->unrestricted_mv == 0);
10017
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
45 assert(s->alt_inter_vlc == 0);
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
46 assert(s->umvplus == 0);
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
47 assert(s->modified_quant==1);
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
48 assert(s->loop_filter==1);
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
49
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
50 s->h263_aic= s->pict_type == FF_I_TYPE;
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
51 if(s->h263_aic){
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
52 s->y_dc_scale_table=
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
53 s->c_dc_scale_table= ff_aic_dc_scale_table;
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
54 }else{
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
55 s->y_dc_scale_table=
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
56 s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
57 }
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
58 }
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
59
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
60 AVCodec rv20_encoder = {
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
61 "rv20",
11560
8a4984c5cacc Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 11066
diff changeset
62 AVMEDIA_TYPE_VIDEO,
10017
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
63 CODEC_ID_RV20,
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
64 sizeof(MpegEncContext),
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
65 MPV_encode_init,
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
66 MPV_encode_picture,
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
67 MPV_encode_end,
10146
38cfe222e1a4 Mark all pix_fmts and supported_framerates compound literals as const.
reimar
parents: 10017
diff changeset
68 .pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE},
10017
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
69 .long_name= NULL_IF_CONFIG_SMALL("RealVideo 2.0"),
988e20e4da2f Split RV20 encoder into its own file.
diego
parents:
diff changeset
70 };