44 #define RV_GET_MAJOR_VER(x) ((x) >> 28)
45 #define RV_GET_MINOR_VER(x) (((x) >> 20) & 0xFF)
46 #define RV_GET_MICRO_VER(x) (((x) >> 12) & 0xFF)
48 #define DC_VLC_BITS 14 // FIXME find a better solution
57 0x3e7f, 0x0f00, 0x0f01, 0x0f02, 0x0f03, 0x0f04, 0x0f05, 0x0f06,
58 0x0f07, 0x0f08, 0x0f09, 0x0f0a, 0x0f0b, 0x0f0c, 0x0f0d, 0x0f0e,
59 0x0f0f, 0x0f10, 0x0f11, 0x0f12, 0x0f13, 0x0f14, 0x0f15, 0x0f16,
60 0x0f17, 0x0f18, 0x0f19, 0x0f1a, 0x0f1b, 0x0f1c, 0x0f1d, 0x0f1e,
61 0x0f1f, 0x0f20, 0x0f21, 0x0f22, 0x0f23, 0x0f24, 0x0f25, 0x0f26,
62 0x0f27, 0x0f28, 0x0f29, 0x0f2a, 0x0f2b, 0x0f2c, 0x0f2d, 0x0f2e,
63 0x0f2f, 0x0f30, 0x0f31, 0x0f32, 0x0f33, 0x0f34, 0x0f35, 0x0f36,
64 0x0f37, 0x0f38, 0x0f39, 0x0f3a, 0x0f3b, 0x0f3c, 0x0f3d, 0x0f3e,
65 0x0f3f, 0x0380, 0x0381, 0x0382, 0x0383, 0x0384, 0x0385, 0x0386,
66 0x0387, 0x0388, 0x0389, 0x038a, 0x038b, 0x038c, 0x038d, 0x038e,
67 0x038f, 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396,
68 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e,
69 0x039f, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6,
70 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce,
71 0x00cf, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056,
72 0x0057, 0x0020, 0x0021, 0x0022, 0x0023, 0x000c, 0x000d, 0x0004,
73 0x0000, 0x0005, 0x000e, 0x000f, 0x0024, 0x0025, 0x0026, 0x0027,
74 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
75 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
76 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
77 0x03a0, 0x03a1, 0x03a2, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7,
78 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af,
79 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
80 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,
81 0x0f40, 0x0f41, 0x0f42, 0x0f43, 0x0f44, 0x0f45, 0x0f46, 0x0f47,
82 0x0f48, 0x0f49, 0x0f4a, 0x0f4b, 0x0f4c, 0x0f4d, 0x0f4e, 0x0f4f,
83 0x0f50, 0x0f51, 0x0f52, 0x0f53, 0x0f54, 0x0f55, 0x0f56, 0x0f57,
84 0x0f58, 0x0f59, 0x0f5a, 0x0f5b, 0x0f5c, 0x0f5d, 0x0f5e, 0x0f5f,
85 0x0f60, 0x0f61, 0x0f62, 0x0f63, 0x0f64, 0x0f65, 0x0f66, 0x0f67,
86 0x0f68, 0x0f69, 0x0f6a, 0x0f6b, 0x0f6c, 0x0f6d, 0x0f6e, 0x0f6f,
87 0x0f70, 0x0f71, 0x0f72, 0x0f73, 0x0f74, 0x0f75, 0x0f76, 0x0f77,
88 0x0f78, 0x0f79, 0x0f7a, 0x0f7b, 0x0f7c, 0x0f7d, 0x0f7e, 0x0f7f,
92 14, 12, 12, 12, 12, 12, 12, 12,
93 12, 12, 12, 12, 12, 12, 12, 12,
94 12, 12, 12, 12, 12, 12, 12, 12,
95 12, 12, 12, 12, 12, 12, 12, 12,
96 12, 12, 12, 12, 12, 12, 12, 12,
97 12, 12, 12, 12, 12, 12, 12, 12,
98 12, 12, 12, 12, 12, 12, 12, 12,
99 12, 12, 12, 12, 12, 12, 12, 12,
100 12, 10, 10, 10, 10, 10, 10, 10,
101 10, 10, 10, 10, 10, 10, 10, 10,
102 10, 10, 10, 10, 10, 10, 10, 10,
103 10, 10, 10, 10, 10, 10, 10, 10,
104 10, 8, 8, 8, 8, 8, 8, 8,
105 8, 8, 8, 8, 8, 8, 8, 8,
106 8, 7, 7, 7, 7, 7, 7, 7,
107 7, 6, 6, 6, 6, 5, 5, 4,
108 2, 4, 5, 5, 6, 6, 6, 6,
109 7, 7, 7, 7, 7, 7, 7, 7,
110 8, 8, 8, 8, 8, 8, 8, 8,
111 8, 8, 8, 8, 8, 8, 8, 8,
112 10, 10, 10, 10, 10, 10, 10, 10,
113 10, 10, 10, 10, 10, 10, 10, 10,
114 10, 10, 10, 10, 10, 10, 10, 10,
115 10, 10, 10, 10, 10, 10, 10, 10,
116 12, 12, 12, 12, 12, 12, 12, 12,
117 12, 12, 12, 12, 12, 12, 12, 12,
118 12, 12, 12, 12, 12, 12, 12, 12,
119 12, 12, 12, 12, 12, 12, 12, 12,
120 12, 12, 12, 12, 12, 12, 12, 12,
121 12, 12, 12, 12, 12, 12, 12, 12,
122 12, 12, 12, 12, 12, 12, 12, 12,
123 12, 12, 12, 12, 12, 12, 12, 12,
127 0xfe7f, 0x3f00, 0x3f01, 0x3f02, 0x3f03, 0x3f04, 0x3f05, 0x3f06,
128 0x3f07, 0x3f08, 0x3f09, 0x3f0a, 0x3f0b, 0x3f0c, 0x3f0d, 0x3f0e,
129 0x3f0f, 0x3f10, 0x3f11, 0x3f12, 0x3f13, 0x3f14, 0x3f15, 0x3f16,
130 0x3f17, 0x3f18, 0x3f19, 0x3f1a, 0x3f1b, 0x3f1c, 0x3f1d, 0x3f1e,
131 0x3f1f, 0x3f20, 0x3f21, 0x3f22, 0x3f23, 0x3f24, 0x3f25, 0x3f26,
132 0x3f27, 0x3f28, 0x3f29, 0x3f2a, 0x3f2b, 0x3f2c, 0x3f2d, 0x3f2e,
133 0x3f2f, 0x3f30, 0x3f31, 0x3f32, 0x3f33, 0x3f34, 0x3f35, 0x3f36,
134 0x3f37, 0x3f38, 0x3f39, 0x3f3a, 0x3f3b, 0x3f3c, 0x3f3d, 0x3f3e,
135 0x3f3f, 0x0f80, 0x0f81, 0x0f82, 0x0f83, 0x0f84, 0x0f85, 0x0f86,
136 0x0f87, 0x0f88, 0x0f89, 0x0f8a, 0x0f8b, 0x0f8c, 0x0f8d, 0x0f8e,
137 0x0f8f, 0x0f90, 0x0f91, 0x0f92, 0x0f93, 0x0f94, 0x0f95, 0x0f96,
138 0x0f97, 0x0f98, 0x0f99, 0x0f9a, 0x0f9b, 0x0f9c, 0x0f9d, 0x0f9e,
139 0x0f9f, 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6,
140 0x03c7, 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce,
141 0x03cf, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6,
142 0x00e7, 0x0030, 0x0031, 0x0032, 0x0033, 0x0008, 0x0009, 0x0002,
143 0x0000, 0x0003, 0x000a, 0x000b, 0x0034, 0x0035, 0x0036, 0x0037,
144 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
145 0x03d0, 0x03d1, 0x03d2, 0x03d3, 0x03d4, 0x03d5, 0x03d6, 0x03d7,
146 0x03d8, 0x03d9, 0x03da, 0x03db, 0x03dc, 0x03dd, 0x03de, 0x03df,
147 0x0fa0, 0x0fa1, 0x0fa2, 0x0fa3, 0x0fa4, 0x0fa5, 0x0fa6, 0x0fa7,
148 0x0fa8, 0x0fa9, 0x0faa, 0x0fab, 0x0fac, 0x0fad, 0x0fae, 0x0faf,
149 0x0fb0, 0x0fb1, 0x0fb2, 0x0fb3, 0x0fb4, 0x0fb5, 0x0fb6, 0x0fb7,
150 0x0fb8, 0x0fb9, 0x0fba, 0x0fbb, 0x0fbc, 0x0fbd, 0x0fbe, 0x0fbf,
151 0x3f40, 0x3f41, 0x3f42, 0x3f43, 0x3f44, 0x3f45, 0x3f46, 0x3f47,
152 0x3f48, 0x3f49, 0x3f4a, 0x3f4b, 0x3f4c, 0x3f4d, 0x3f4e, 0x3f4f,
153 0x3f50, 0x3f51, 0x3f52, 0x3f53, 0x3f54, 0x3f55, 0x3f56, 0x3f57,
154 0x3f58, 0x3f59, 0x3f5a, 0x3f5b, 0x3f5c, 0x3f5d, 0x3f5e, 0x3f5f,
155 0x3f60, 0x3f61, 0x3f62, 0x3f63, 0x3f64, 0x3f65, 0x3f66, 0x3f67,
156 0x3f68, 0x3f69, 0x3f6a, 0x3f6b, 0x3f6c, 0x3f6d, 0x3f6e, 0x3f6f,
157 0x3f70, 0x3f71, 0x3f72, 0x3f73, 0x3f74, 0x3f75, 0x3f76, 0x3f77,
158 0x3f78, 0x3f79, 0x3f7a, 0x3f7b, 0x3f7c, 0x3f7d, 0x3f7e, 0x3f7f,
162 16, 14, 14, 14, 14, 14, 14, 14,
163 14, 14, 14, 14, 14, 14, 14, 14,
164 14, 14, 14, 14, 14, 14, 14, 14,
165 14, 14, 14, 14, 14, 14, 14, 14,
166 14, 14, 14, 14, 14, 14, 14, 14,
167 14, 14, 14, 14, 14, 14, 14, 14,
168 14, 14, 14, 14, 14, 14, 14, 14,
169 14, 14, 14, 14, 14, 14, 14, 14,
170 14, 12, 12, 12, 12, 12, 12, 12,
171 12, 12, 12, 12, 12, 12, 12, 12,
172 12, 12, 12, 12, 12, 12, 12, 12,
173 12, 12, 12, 12, 12, 12, 12, 12,
174 12, 10, 10, 10, 10, 10, 10, 10,
175 10, 10, 10, 10, 10, 10, 10, 10,
176 10, 8, 8, 8, 8, 8, 8, 8,
177 8, 6, 6, 6, 6, 4, 4, 3,
178 2, 3, 4, 4, 6, 6, 6, 6,
179 8, 8, 8, 8, 8, 8, 8, 8,
180 10, 10, 10, 10, 10, 10, 10, 10,
181 10, 10, 10, 10, 10, 10, 10, 10,
182 12, 12, 12, 12, 12, 12, 12, 12,
183 12, 12, 12, 12, 12, 12, 12, 12,
184 12, 12, 12, 12, 12, 12, 12, 12,
185 12, 12, 12, 12, 12, 12, 12, 12,
186 14, 14, 14, 14, 14, 14, 14, 14,
187 14, 14, 14, 14, 14, 14, 14, 14,
188 14, 14, 14, 14, 14, 14, 14, 14,
189 14, 14, 14, 14, 14, 14, 14, 14,
190 14, 14, 14, 14, 14, 14, 14, 14,
191 14, 14, 14, 14, 14, 14, 14, 14,
192 14, 14, 14, 14, 14, 14, 14, 14,
193 14, 14, 14, 14, 14, 14, 14, 14,
211 }
else if (
code == 0x7d) {
213 }
else if (
code == 0x7e) {
218 }
else if (
code == 0x7f) {
232 }
else if (
code == 0x1fd) {
234 }
else if (
code == 0x1fe) {
251 int mb_count, pb_frame, marker, mb_xy;
265 ff_dlog(
s->avctx,
"pict_type=%d pb_frame=%d\n",
s->pict_type, pb_frame);
273 if (
s->qscale == 0) {
279 if (
s->rv10_version == 3) {
284 ff_dlog(
s->avctx,
"DC:%d %d %d\n",
s->last_dc[0],
285 s->last_dc[1],
s->last_dc[2]);
291 mb_xy =
s->mb_x +
s->mb_y *
s->mb_width;
292 if (
show_bits(&
s->gb, 12) == 0 || (mb_xy && mb_xy < s->mb_num)) {
299 mb_count =
s->mb_width *
s->mb_height;
303 s->unrestricted_mv = 1;
311 int seq, mb_pos,
i,
ret;
348 if (
s->qscale == 0) {
354 s->loop_filter =
get_bits1(&
s->gb) && !
s->avctx->lowres;
361 rpr_max =
s->avctx->extradata[1] & 7;
364 int rpr_bits =
av_log2(rpr_max) + 1;
369 if (
s->avctx->extradata_size < 8 + 2 *
f) {
374 new_w = 4 * ((
uint8_t *)
s->avctx->extradata)[6 + 2 *
f];
375 new_h = 4 * ((
uint8_t *)
s->avctx->extradata)[7 + 2 *
f];
380 if (new_w !=
s->width || new_h !=
s->height) {
381 AVRational old_aspect =
s->avctx->sample_aspect_ratio;
383 "attempting to change resolution to %dx%d\n", new_w, new_h);
391 if (2 * (int64_t)new_w *
s->height == (int64_t)new_h *
s->width)
393 if ((int64_t)new_w *
s->height == 2 * (int64_t)new_h *
s->width)
415 seq |=
s->time & ~0x7FFF;
416 if (seq -
s->time > 0x4000)
418 if (seq -
s->time < -0x4000)
421 if (seq !=
s->time) {
424 s->pp_time =
s->time -
s->last_non_b_time;
425 s->last_non_b_time =
s->time;
428 s->pb_time =
s->pp_time - (
s->last_non_b_time -
s->time);
432 if (
s->pp_time <=
s->pb_time ||
s->pp_time <=
s->pp_time -
s->pb_time ||
s->pp_time<=0) {
434 "messed up order, possible from seeking? skipping current B-frame\n");
435 #define ERROR_SKIP_FRAME -123
448 s->unrestricted_mv = 1;
450 s->modified_quant = 1;
451 if (!
s->avctx->lowres)
456 "num:%5d x:%2d y:%2d type:%d qscale:%2d rnd:%d\n",
457 seq,
s->mb_x,
s->mb_y,
s->pict_type,
s->qscale,
463 return s->mb_width *
s->mb_height - mb_pos;
471 int major_ver, minor_ver, micro_ver,
ret;
501 s->rv10_version = micro_ver ? 3 : 1;
502 s->obmc = micro_ver == 2;
505 if (minor_ver >= 2) {
507 s->avctx->has_b_frames = 1;
553 int buf_size,
int buf_size2)
557 int mb_count, mb_pos,
left, start_mb_x, active_bits_size,
ret;
559 active_bits_size = buf_size * 8;
571 if (
s->mb_x >=
s->mb_width ||
572 s->mb_y >=
s->mb_height) {
576 mb_pos =
s->mb_y *
s->mb_width +
s->mb_x;
577 left =
s->mb_width *
s->mb_height - mb_pos;
578 if (mb_count >
left) {
583 if ((
s->mb_x == 0 &&
s->mb_y == 0) || !
s->current_picture_ptr) {
585 if (
s->current_picture_ptr) {
588 s->mb_x =
s->mb_y =
s->resync_mb_x =
s->resync_mb_y = 0;
594 if (
s->current_picture_ptr->f->pict_type !=
s->pict_type) {
601 ff_dlog(avctx,
"qscale=%d\n",
s->qscale);
606 s->first_slice_line = 1;
608 s->first_slice_line = 1;
609 s->resync_mb_x =
s->mb_x;
611 start_mb_x =
s->mb_x;
612 s->resync_mb_y =
s->mb_y;
614 s->y_dc_scale_table =
617 s->y_dc_scale_table =
621 if (
s->modified_quant)
626 s->rv10_first_dc_coded[0] = 0;
627 s->rv10_first_dc_coded[1] = 0;
628 s->rv10_first_dc_coded[2] = 0;
632 s->block_wrap[3] =
s->b8_stride;
634 s->block_wrap[5] =
s->mb_stride;
638 for (
s->mb_num_left = mb_count;
s->mb_num_left > 0;
s->mb_num_left--) {
641 ff_tlog(avctx,
"**mb x=%d y=%d\n",
s->mb_x,
s->mb_y);
660 active_bits_size = buf_size2 * 8;
662 8 * buf_size, active_bits_size);
677 if (++
s->mb_x ==
s->mb_width) {
682 if (
s->mb_x ==
s->resync_mb_x)
683 s->first_slice_line = 0;
691 return active_bits_size;
706 int buf_size = avpkt->
size;
721 slice_count = (*
buf++) + 1;
724 if (!slice_count || buf_size <= 8 * slice_count) {
730 slices_hdr =
buf + 4;
731 buf += 8 * slice_count;
732 buf_size -= 8 * slice_count;
736 for (
i = 0;
i < slice_count;
i++) {
743 if (
i + 1 == slice_count)
748 if (
i + 2 >= slice_count)
749 size2 = buf_size -
offset;
753 if (
size <= 0 || size2 <= 0 ||
764 if (
s->current_picture_ptr &&
s->mb_y >=
s->mb_height) {
773 }
else if (
s->last_picture_ptr) {
780 if (
s->last_picture_ptr ||
s->low_delay) {
785 s->current_picture_ptr =
NULL;