comparison mjpeg.c @ 1359:4c2febfefd78 libavcodec

cleanup
author michaelni
date Sat, 12 Jul 2003 20:21:34 +0000
parents a6b92de6a9fc
children e68194195c92
comparison
equal deleted inserted replaced
1358:a6b92de6a9fc 1359:4c2febfefd78
819 int rct; /* standard rct */ 819 int rct; /* standard rct */
820 int pegasus_rct; /* pegasus reversible colorspace transform */ 820 int pegasus_rct; /* pegasus reversible colorspace transform */
821 int bits; /* bits per component */ 821 int bits; /* bits per component */
822 822
823 int width, height; 823 int width, height;
824 int mb_width, mb_height;
824 int nb_components; 825 int nb_components;
825 int component_id[MAX_COMPONENTS]; 826 int component_id[MAX_COMPONENTS];
826 int h_count[MAX_COMPONENTS]; /* horizontal and vertical count for each component */ 827 int h_count[MAX_COMPONENTS]; /* horizontal and vertical count for each component */
827 int v_count[MAX_COMPONENTS]; 828 int v_count[MAX_COMPONENTS];
829 int comp_index[MAX_COMPONENTS];
830 int dc_index[MAX_COMPONENTS];
831 int ac_index[MAX_COMPONENTS];
832 int nb_blocks[MAX_COMPONENTS];
833 int h_scount[MAX_COMPONENTS];
834 int v_scount[MAX_COMPONENTS];
828 int h_max, v_max; /* maximum h and v counts */ 835 int h_max, v_max; /* maximum h and v counts */
829 int quant_index[4]; /* quant table index for each component */ 836 int quant_index[4]; /* quant table index for each component */
830 int last_dc[MAX_COMPONENTS]; /* last DEQUANTIZED dc (XXX: am I right to do that ?) */ 837 int last_dc[MAX_COMPONENTS]; /* last DEQUANTIZED dc (XXX: am I right to do that ?) */
831 uint8_t *current_picture[MAX_COMPONENTS]; /* picture structure */ 838 uint8_t *current_picture[MAX_COMPONENTS]; /* picture structure */
832 int linesize[MAX_COMPONENTS]; 839 int linesize[MAX_COMPONENTS];
1153 } 1160 }
1154 } 1161 }
1155 return 0; 1162 return 0;
1156 } 1163 }
1157 1164
1165 static int ljpeg_decode_rgb_scan(MJpegDecodeContext *s, int predictor, int point_transform){
1166 int i, mb_x, mb_y;
1167 uint16_t buffer[2048][4];
1168 int left[3], top[3], topleft[3];
1169 const int linesize= s->linesize[0];
1170 const int mask= (1<<s->bits)-1;
1171
1172 for(i=0; i<3; i++){
1173 buffer[0][i]= 1 << (s->bits + point_transform - 1);
1174 }
1175 for(mb_y = 0; mb_y < s->mb_height; mb_y++) {
1176 const int modified_predictor= mb_y ? 1 : predictor;
1177 uint8_t *ptr = s->current_picture[0] + (linesize * mb_y);
1178
1179 if (s->interlaced && s->bottom_field)
1180 ptr += linesize >> 1;
1181
1182 for(i=0; i<3; i++){
1183 top[i]= left[i]= topleft[i]= buffer[0][i];
1184 }
1185 for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
1186 if (s->restart_interval && !s->restart_count)
1187 s->restart_count = s->restart_interval;
1188
1189 for(i=0;i<3;i++) {
1190 int pred;
1191
1192 topleft[i]= top[i];
1193 top[i]= buffer[mb_x][i];
1194
1195 PREDICT(pred, topleft[i], top[i], left[i], modified_predictor);
1196
1197 left[i]=
1198 buffer[mb_x][i]= mask & (pred + (mjpeg_decode_dc(s, s->dc_index[i]) << point_transform));
1199 }
1200
1201 if (s->restart_interval && !--s->restart_count) {
1202 align_get_bits(&s->gb);
1203 skip_bits(&s->gb, 16); /* skip RSTn */
1204 }
1205 }
1206
1207 if(s->rct){
1208 for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
1209 ptr[4*mb_x+1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200)>>2);
1210 ptr[4*mb_x+0] = buffer[mb_x][1] + ptr[4*mb_x+1];
1211 ptr[4*mb_x+2] = buffer[mb_x][2] + ptr[4*mb_x+1];
1212 }
1213 }else if(s->pegasus_rct){
1214 for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
1215 ptr[4*mb_x+1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2])>>2);
1216 ptr[4*mb_x+0] = buffer[mb_x][1] + ptr[4*mb_x+1];
1217 ptr[4*mb_x+2] = buffer[mb_x][2] + ptr[4*mb_x+1];
1218 }
1219 }else{
1220 for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
1221 ptr[4*mb_x+0] = buffer[mb_x][0];
1222 ptr[4*mb_x+1] = buffer[mb_x][1];
1223 ptr[4*mb_x+2] = buffer[mb_x][2];
1224 }
1225 }
1226 }
1227 return 0;
1228 }
1229
1230 static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor, int point_transform){
1231 int i, mb_x, mb_y;
1232 const int nb_components=3;
1233
1234 for(mb_y = 0; mb_y < s->mb_height; mb_y++) {
1235 for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
1236 if (s->restart_interval && !s->restart_count)
1237 s->restart_count = s->restart_interval;
1238
1239 if(mb_x==0 || mb_y==0 || s->interlaced){
1240 for(i=0;i<nb_components;i++) {
1241 uint8_t *ptr;
1242 int n, h, v, x, y, c, j, linesize;
1243 n = s->nb_blocks[i];
1244 c = s->comp_index[i];
1245 h = s->h_scount[i];
1246 v = s->v_scount[i];
1247 x = 0;
1248 y = 0;
1249 linesize= s->linesize[c];
1250
1251 for(j=0; j<n; j++) {
1252 int pred;
1253
1254 ptr = s->current_picture[c] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
1255 if(y==0 && mb_y==0){
1256 if(x==0 && mb_x==0){
1257 pred= 128 << point_transform;
1258 }else{
1259 pred= ptr[-1];
1260 }
1261 }else{
1262 if(x==0 && mb_x==0){
1263 pred= ptr[-linesize];
1264 }else{
1265 PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
1266 }
1267 }
1268
1269 if (s->interlaced && s->bottom_field)
1270 ptr += linesize >> 1;
1271 *ptr= pred + (mjpeg_decode_dc(s, s->dc_index[i]) << point_transform);
1272
1273 if (++x == h) {
1274 x = 0;
1275 y++;
1276 }
1277 }
1278 }
1279 }else{
1280 for(i=0;i<nb_components;i++) {
1281 uint8_t *ptr;
1282 int n, h, v, x, y, c, j, linesize;
1283 n = s->nb_blocks[i];
1284 c = s->comp_index[i];
1285 h = s->h_scount[i];
1286 v = s->v_scount[i];
1287 x = 0;
1288 y = 0;
1289 linesize= s->linesize[c];
1290
1291 for(j=0; j<n; j++) {
1292 int pred;
1293
1294 ptr = s->current_picture[c] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
1295 PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
1296 *ptr= pred + (mjpeg_decode_dc(s, s->dc_index[i]) << point_transform);
1297 if (++x == h) {
1298 x = 0;
1299 y++;
1300 }
1301 }
1302 }
1303 }
1304 if (s->restart_interval && !--s->restart_count) {
1305 align_get_bits(&s->gb);
1306 skip_bits(&s->gb, 16); /* skip RSTn */
1307 }
1308 }
1309 }
1310 return 0;
1311 }
1312
1313 static int mjpeg_decode_scan(MJpegDecodeContext *s){
1314 int i, mb_x, mb_y;
1315 const int nb_components=3;
1316
1317 for(mb_y = 0; mb_y < s->mb_height; mb_y++) {
1318 for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
1319 if (s->restart_interval && !s->restart_count)
1320 s->restart_count = s->restart_interval;
1321
1322 for(i=0;i<nb_components;i++) {
1323 uint8_t *ptr;
1324 int n, h, v, x, y, c, j;
1325 n = s->nb_blocks[i];
1326 c = s->comp_index[i];
1327 h = s->h_scount[i];
1328 v = s->v_scount[i];
1329 x = 0;
1330 y = 0;
1331 for(j=0;j<n;j++) {
1332 memset(s->block, 0, sizeof(s->block));
1333 if (decode_block(s, s->block, i,
1334 s->dc_index[i], s->ac_index[i],
1335 s->quant_index[c]) < 0) {
1336 dprintf("error y=%d x=%d\n", mb_y, mb_x);
1337 return -1;
1338 }
1339 // dprintf("mb: %d %d processed\n", mb_y, mb_x);
1340 ptr = s->current_picture[c] +
1341 (s->linesize[c] * (v * mb_y + y) * 8) +
1342 (h * mb_x + x) * 8;
1343 if (s->interlaced && s->bottom_field)
1344 ptr += s->linesize[c] >> 1;
1345 s->idct_put(ptr, s->linesize[c], s->block);
1346 if (++x == h) {
1347 x = 0;
1348 y++;
1349 }
1350 }
1351 }
1352 /* (< 1350) buggy workaround for Spectralfan.mov, should be fixed */
1353 if (s->restart_interval && (s->restart_interval < 1350) &&
1354 !--s->restart_count) {
1355 align_get_bits(&s->gb);
1356 skip_bits(&s->gb, 16); /* skip RSTn */
1357 for (i=0; i<nb_components; i++) /* reset dc */
1358 s->last_dc[i] = 1024;
1359 }
1360 }
1361 }
1362 return 0;
1363 }
1364
1158 static int mjpeg_decode_sos(MJpegDecodeContext *s) 1365 static int mjpeg_decode_sos(MJpegDecodeContext *s)
1159 { 1366 {
1160 int len, nb_components, i, j, n, h, v, ret, point_transform, predictor; 1367 int len, nb_components, i, h, v, predictor, point_transform, ilv;
1161 int mb_width, mb_height, mb_x, mb_y, vmax, hmax, index, id; 1368 int vmax, hmax, index, id;
1162 int comp_index[4];
1163 int dc_index[4];
1164 int ac_index[4];
1165 int nb_blocks[4];
1166 int h_count[4];
1167 int v_count[4];
1168 const int block_size= s->lossless ? 1 : 8; 1369 const int block_size= s->lossless ? 1 : 8;
1169 1370
1170 /* XXX: verify len field validity */ 1371 /* XXX: verify len field validity */
1171 len = get_bits(&s->gb, 16); 1372 len = get_bits(&s->gb, 16);
1172 nb_components = get_bits(&s->gb, 8); 1373 nb_components = get_bits(&s->gb, 8);
1194 { 1395 {
1195 dprintf("decode_sos: index(%d) out of components\n", index); 1396 dprintf("decode_sos: index(%d) out of components\n", index);
1196 return -1; 1397 return -1;
1197 } 1398 }
1198 1399
1199 comp_index[i] = index; 1400 s->comp_index[i] = index;
1200 1401
1201 nb_blocks[i] = s->h_count[index] * s->v_count[index]; 1402 s->nb_blocks[i] = s->h_count[index] * s->v_count[index];
1202 h_count[i] = s->h_count[index]; 1403 s->h_scount[i] = s->h_count[index];
1203 v_count[i] = s->v_count[index]; 1404 s->v_scount[i] = s->v_count[index];
1204 1405
1205 dc_index[i] = get_bits(&s->gb, 4); 1406 s->dc_index[i] = get_bits(&s->gb, 4);
1206 ac_index[i] = get_bits(&s->gb, 4); 1407 s->ac_index[i] = get_bits(&s->gb, 4);
1207 1408
1208 if (dc_index[i] < 0 || ac_index[i] < 0 || 1409 if (s->dc_index[i] < 0 || s->ac_index[i] < 0 ||
1209 dc_index[i] >= 4 || ac_index[i] >= 4) 1410 s->dc_index[i] >= 4 || s->ac_index[i] >= 4)
1210 goto out_of_range; 1411 goto out_of_range;
1412 #if 0 //buggy
1211 switch(s->start_code) 1413 switch(s->start_code)
1212 { 1414 {
1213 case SOF0: 1415 case SOF0:
1214 if (dc_index[i] > 1 || ac_index[i] > 1) 1416 if (dc_index[i] > 1 || ac_index[i] > 1)
1215 goto out_of_range; 1417 goto out_of_range;
1222 case SOF3: 1424 case SOF3:
1223 if (dc_index[i] > 3 || ac_index[i] != 0) 1425 if (dc_index[i] > 3 || ac_index[i] != 0)
1224 goto out_of_range; 1426 goto out_of_range;
1225 break; 1427 break;
1226 } 1428 }
1429 #endif
1227 } 1430 }
1228 1431
1229 predictor= get_bits(&s->gb, 8); /* lossless predictor or start of spectral (Ss) */ 1432 predictor= get_bits(&s->gb, 8); /* lossless predictor or start of spectral (Ss) */
1230 skip_bits(&s->gb, 8); /* Se */ 1433 skip_bits(&s->gb, 8); /* Se */
1231 skip_bits(&s->gb, 4); /* Ah */ 1434 skip_bits(&s->gb, 4); /* Ah */
1234 for(i=0;i<nb_components;i++) 1437 for(i=0;i<nb_components;i++)
1235 s->last_dc[i] = 1024; 1438 s->last_dc[i] = 1024;
1236 1439
1237 if (nb_components > 1) { 1440 if (nb_components > 1) {
1238 /* interleaved stream */ 1441 /* interleaved stream */
1239 mb_width = (s->width + s->h_max * block_size - 1) / (s->h_max * block_size); 1442 s->mb_width = (s->width + s->h_max * block_size - 1) / (s->h_max * block_size);
1240 mb_height = (s->height + s->v_max * block_size - 1) / (s->v_max * block_size); 1443 s->mb_height = (s->height + s->v_max * block_size - 1) / (s->v_max * block_size);
1241 } else { 1444 } else {
1242 h = s->h_max / s->h_count[comp_index[0]]; 1445 h = s->h_max / s->h_scount[s->comp_index[0]];
1243 v = s->v_max / s->v_count[comp_index[0]]; 1446 v = s->v_max / s->v_scount[s->comp_index[0]];
1244 mb_width = (s->width + h * block_size - 1) / (h * block_size); 1447 s->mb_width = (s->width + h * block_size - 1) / (h * block_size);
1245 mb_height = (s->height + v * block_size - 1) / (v * block_size); 1448 s->mb_height = (s->height + v * block_size - 1) / (v * block_size);
1246 nb_blocks[0] = 1; 1449 s->nb_blocks[0] = 1;
1247 h_count[0] = 1; 1450 s->h_scount[0] = 1;
1248 v_count[0] = 1; 1451 s->v_scount[0] = 1;
1249 } 1452 }
1250 1453
1251 if(s->avctx->debug & FF_DEBUG_PICT_INFO) 1454 if(s->avctx->debug & FF_DEBUG_PICT_INFO)
1252 printf("%s %s p:%d >>:%d\n", s->lossless ? "lossless" : "sequencial DCT", s->rgb ? "RGB" : "", predictor, point_transform); 1455 printf("%s %s p:%d >>:%d\n", s->lossless ? "lossless" : "sequencial DCT", s->rgb ? "RGB" : "", predictor, point_transform);
1253 1456
1254 if(s->lossless){ 1457 if(s->lossless){
1255 if(s->rgb){ 1458 if(s->rgb){
1256 uint16_t buffer[2048][4]; 1459 if(ljpeg_decode_rgb_scan(s, predictor, point_transform) < 0)
1257 int left[3], top[3], topleft[3]; 1460 return -1;
1258 const int linesize= s->linesize[0]; 1461 }else{
1259 const int mask= (1<<s->bits)-1; 1462 if(ljpeg_decode_yuv_scan(s, predictor, point_transform) < 0)
1260 1463 return -1;
1261 for(i=0; i<3; i++){
1262 buffer[0][i]= 1 << (s->bits + point_transform - 1);
1263 } 1464 }
1264 for(mb_y = 0; mb_y < mb_height; mb_y++) {
1265 const int modified_predictor= mb_y ? 1 : predictor;
1266 uint8_t *ptr = s->current_picture[0] + (linesize * mb_y);
1267
1268 if (s->interlaced && s->bottom_field)
1269 ptr += linesize >> 1;
1270
1271 for(i=0; i<3; i++){
1272 top[i]= left[i]= topleft[i]= buffer[0][i];
1273 }
1274 for(mb_x = 0; mb_x < mb_width; mb_x++) {
1275 if (s->restart_interval && !s->restart_count)
1276 s->restart_count = s->restart_interval;
1277
1278 for(i=0;i<3;i++) {
1279 int pred;
1280
1281 topleft[i]= top[i];
1282 top[i]= buffer[mb_x][i];
1283
1284 PREDICT(pred, topleft[i], top[i], left[i], modified_predictor);
1285
1286 left[i]=
1287 buffer[mb_x][i]= mask & (pred + (mjpeg_decode_dc(s, dc_index[i]) << point_transform));
1288 }
1289
1290 if (s->restart_interval && !--s->restart_count) {
1291 align_get_bits(&s->gb);
1292 skip_bits(&s->gb, 16); /* skip RSTn */
1293 }
1294 }
1295
1296 if(s->rct){
1297 for(mb_x = 0; mb_x < mb_width; mb_x++) {
1298 ptr[4*mb_x+1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200)>>2);
1299 ptr[4*mb_x+0] = buffer[mb_x][1] + ptr[4*mb_x+1];
1300 ptr[4*mb_x+2] = buffer[mb_x][2] + ptr[4*mb_x+1];
1301 }
1302 }else if(s->pegasus_rct){
1303 for(mb_x = 0; mb_x < mb_width; mb_x++) {
1304 ptr[4*mb_x+1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2])>>2);
1305 ptr[4*mb_x+0] = buffer[mb_x][1] + ptr[4*mb_x+1];
1306 ptr[4*mb_x+2] = buffer[mb_x][2] + ptr[4*mb_x+1];
1307 }
1308 }else{
1309 for(mb_x = 0; mb_x < mb_width; mb_x++) {
1310 ptr[4*mb_x+0] = buffer[mb_x][0];
1311 ptr[4*mb_x+1] = buffer[mb_x][1];
1312 ptr[4*mb_x+2] = buffer[mb_x][2];
1313 }
1314 }
1315 }
1316 }else{
1317 for(mb_y = 0; mb_y < mb_height; mb_y++) {
1318 for(mb_x = 0; mb_x < mb_width; mb_x++) {
1319 if (s->restart_interval && !s->restart_count)
1320 s->restart_count = s->restart_interval;
1321
1322 if(mb_x==0 || mb_y==0 || s->interlaced){
1323 for(i=0;i<nb_components;i++) {
1324 uint8_t *ptr;
1325 int x, y, c, linesize;
1326 n = nb_blocks[i];
1327 c = comp_index[i];
1328 h = h_count[i];
1329 v = v_count[i];
1330 x = 0;
1331 y = 0;
1332 linesize= s->linesize[c];
1333
1334 for(j=0; j<n; j++) {
1335 int pred;
1336
1337 ptr = s->current_picture[c] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
1338 if(y==0 && mb_y==0){
1339 if(x==0 && mb_x==0){
1340 pred= 128 << point_transform;
1341 }else{
1342 pred= ptr[-1];
1343 }
1344 }else{
1345 if(x==0 && mb_x==0){
1346 pred= ptr[-linesize];
1347 }else{
1348 PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
1349 }
1350 }
1351
1352 if (s->interlaced && s->bottom_field)
1353 ptr += linesize >> 1;
1354 *ptr= pred + (mjpeg_decode_dc(s, dc_index[i]) << point_transform);
1355
1356 if (++x == h) {
1357 x = 0;
1358 y++;
1359 }
1360 }
1361 }
1362 }else{
1363 for(i=0;i<nb_components;i++) {
1364 uint8_t *ptr;
1365 int x, y, c, linesize;
1366 n = nb_blocks[i];
1367 c = comp_index[i];
1368 h = h_count[i];
1369 v = v_count[i];
1370 x = 0;
1371 y = 0;
1372 linesize= s->linesize[c];
1373
1374 for(j=0; j<n; j++) {
1375 int pred;
1376
1377 ptr = s->current_picture[c] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
1378 PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
1379 *ptr= pred + (mjpeg_decode_dc(s, dc_index[i]) << point_transform);
1380 if (++x == h) {
1381 x = 0;
1382 y++;
1383 }
1384 }
1385 }
1386 }
1387 if (s->restart_interval && !--s->restart_count) {
1388 align_get_bits(&s->gb);
1389 skip_bits(&s->gb, 16); /* skip RSTn */
1390 }
1391 }
1392 }
1393 }
1394 }else{ 1465 }else{
1395 for(mb_y = 0; mb_y < mb_height; mb_y++) { 1466 if(mjpeg_decode_scan(s) < 0)
1396 for(mb_x = 0; mb_x < mb_width; mb_x++) { 1467 return -1;
1397 if (s->restart_interval && !s->restart_count) 1468 }
1398 s->restart_count = s->restart_interval;
1399
1400 for(i=0;i<nb_components;i++) {
1401 uint8_t *ptr;
1402 int x, y, c;
1403 n = nb_blocks[i];
1404 c = comp_index[i];
1405 h = h_count[i];
1406 v = v_count[i];
1407 x = 0;
1408 y = 0;
1409 for(j=0;j<n;j++) {
1410 memset(s->block, 0, sizeof(s->block));
1411 if (decode_block(s, s->block, i,
1412 dc_index[i], ac_index[i],
1413 s->quant_index[c]) < 0) {
1414 dprintf("error y=%d x=%d\n", mb_y, mb_x);
1415 ret = -1;
1416 goto the_end;
1417 }
1418 // dprintf("mb: %d %d processed\n", mb_y, mb_x);
1419 ptr = s->current_picture[c] +
1420 (s->linesize[c] * (v * mb_y + y) * 8) +
1421 (h * mb_x + x) * 8;
1422 if (s->interlaced && s->bottom_field)
1423 ptr += s->linesize[c] >> 1;
1424 s->idct_put(ptr, s->linesize[c], s->block);
1425 if (++x == h) {
1426 x = 0;
1427 y++;
1428 }
1429 }
1430 }
1431 /* (< 1350) buggy workaround for Spectralfan.mov, should be fixed */
1432 if (s->restart_interval && (s->restart_interval < 1350) &&
1433 !--s->restart_count) {
1434 align_get_bits(&s->gb);
1435 skip_bits(&s->gb, 16); /* skip RSTn */
1436 for (j=0; j<nb_components; j++) /* reset dc */
1437 s->last_dc[j] = 1024;
1438 }
1439 }
1440 }
1441 }
1442 ret = 0;
1443 the_end:
1444 emms_c(); 1469 emms_c();
1445 return ret; 1470 return 0;
1446 out_of_range: 1471 out_of_range:
1447 dprintf("decode_sos: ac/dc index out of range\n"); 1472 dprintf("decode_sos: ac/dc index out of range\n");
1448 return -1; 1473 return -1;
1449 } 1474 }
1450 1475
2024 picture->quality= FFMAX(FFMAX(s->qscale[0], s->qscale[1]), s->qscale[2]); 2049 picture->quality= FFMAX(FFMAX(s->qscale[0], s->qscale[1]), s->qscale[2]);
2025 picture->qstride= 0; 2050 picture->qstride= 0;
2026 picture->qscale_table= s->qscale_table; 2051 picture->qscale_table= s->qscale_table;
2027 memset(picture->qscale_table, picture->quality, (s->width+15)/16); 2052 memset(picture->qscale_table, picture->quality, (s->width+15)/16);
2028 if(avctx->debug & FF_DEBUG_QP) 2053 if(avctx->debug & FF_DEBUG_QP)
2029 printf("QP: %d\n", picture->quality); 2054 printf("QP: %f\n", picture->quality);
2030 } 2055 }
2031 2056
2032 return buf_ptr - buf; 2057 return buf_ptr - buf;
2033 } 2058 }
2034 2059