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);
387 if (whole_size < (new_w + 15)/16 * ((new_h + 15)/16) / 8)
395 if (2 * (int64_t)new_w *
s->height == (int64_t)new_h *
s->width)
397 if ((int64_t)new_w *
s->height == 2 * (int64_t)new_h *
s->width)
419 seq |=
s->time & ~0x7FFF;
420 if (seq -
s->time > 0x4000)
422 if (seq -
s->time < -0x4000)
425 if (seq !=
s->time) {
428 s->pp_time =
s->time -
s->last_non_b_time;
429 s->last_non_b_time =
s->time;
432 s->pb_time =
s->pp_time - (
s->last_non_b_time -
s->time);
436 if (
s->pp_time <=
s->pb_time ||
s->pp_time <=
s->pp_time -
s->pb_time ||
s->pp_time<=0) {
438 "messed up order, possible from seeking? skipping current B-frame\n");
439 #define ERROR_SKIP_FRAME -123
452 s->unrestricted_mv = 1;
454 s->modified_quant = 1;
455 if (!
s->avctx->lowres)
460 "num:%5d x:%2d y:%2d type:%d qscale:%2d rnd:%d\n",
461 seq,
s->mb_x,
s->mb_y,
s->pict_type,
s->qscale,
467 return s->mb_width *
s->mb_height - mb_pos;
475 int major_ver, minor_ver, micro_ver,
ret;
505 s->rv10_version = micro_ver ? 3 : 1;
506 s->obmc = micro_ver == 2;
509 if (minor_ver >= 2) {
511 s->avctx->has_b_frames = 1;
557 int buf_size,
int buf_size2,
int whole_size)
561 int mb_count, mb_pos,
left, start_mb_x, active_bits_size,
ret;
563 active_bits_size = buf_size * 8;
575 if (
s->mb_x >=
s->mb_width ||
576 s->mb_y >=
s->mb_height) {
580 mb_pos =
s->mb_y *
s->mb_width +
s->mb_x;
581 left =
s->mb_width *
s->mb_height - mb_pos;
582 if (mb_count >
left) {
587 if (whole_size < s->mb_width *
s->mb_height / 8)
590 if ((
s->mb_x == 0 &&
s->mb_y == 0) || !
s->current_picture_ptr) {
592 if (
s->current_picture_ptr) {
595 s->mb_x =
s->mb_y =
s->resync_mb_x =
s->resync_mb_y = 0;
601 if (
s->current_picture_ptr->f->pict_type !=
s->pict_type) {
608 ff_dlog(avctx,
"qscale=%d\n",
s->qscale);
613 s->first_slice_line = 1;
615 s->first_slice_line = 1;
616 s->resync_mb_x =
s->mb_x;
618 start_mb_x =
s->mb_x;
619 s->resync_mb_y =
s->mb_y;
621 s->y_dc_scale_table =
624 s->y_dc_scale_table =
628 if (
s->modified_quant)
633 s->rv10_first_dc_coded[0] = 0;
634 s->rv10_first_dc_coded[1] = 0;
635 s->rv10_first_dc_coded[2] = 0;
639 s->block_wrap[3] =
s->b8_stride;
641 s->block_wrap[5] =
s->mb_stride;
645 for (
s->mb_num_left = mb_count;
s->mb_num_left > 0;
s->mb_num_left--) {
648 ff_tlog(avctx,
"**mb x=%d y=%d\n",
s->mb_x,
s->mb_y);
667 active_bits_size = buf_size2 * 8;
669 8 * buf_size, active_bits_size);
684 if (++
s->mb_x ==
s->mb_width) {
689 if (
s->mb_x ==
s->resync_mb_x)
690 s->first_slice_line = 0;
698 return active_bits_size;
713 int buf_size = avpkt->
size;
728 slice_count = (*buf++) + 1;
731 if (!slice_count || buf_size <= 8 * slice_count) {
737 slices_hdr = buf + 4;
738 buf += 8 * slice_count;
739 buf_size -= 8 * slice_count;
743 for (
i = 0;
i < slice_count;
i++) {
750 if (
i + 1 == slice_count)
755 if (
i + 2 >= slice_count)
756 size2 = buf_size -
offset;
760 if (
size <= 0 || size2 <= 0 ||
771 if (
s->current_picture_ptr &&
s->mb_y >=
s->mb_height) {
780 }
else if (
s->last_picture_ptr) {
787 if (
s->last_picture_ptr ||
s->low_delay) {
792 s->current_picture_ptr =
NULL;