diff --git a/libavcodec/cavs.h b/libavcodec/cavs.h index 2f033212dd..649a567b41 100644 --- a/libavcodec/cavs.h +++ b/libavcodec/cavs.h @@ -172,7 +172,6 @@ typedef struct AVSContext { int aspect_ratio; int mb_width, mb_height; int width, height; - int pic_type; int stream_revision; ///<0 for samples from 2006, 1 for rm52j encoder int progressive; int pic_structure; diff --git a/libavcodec/cavsdec.c b/libavcodec/cavsdec.c index ed2ed28ec9..0074c4cf6d 100644 --- a/libavcodec/cavsdec.c +++ b/libavcodec/cavsdec.c @@ -634,7 +634,7 @@ static inline void set_mv_intra(AVSContext *h) set_mvs(&h->mv[MV_FWD_X0], BLK_16X16); h->mv[MV_BWD_X0] = ff_cavs_intra_mv; set_mvs(&h->mv[MV_BWD_X0], BLK_16X16); - if (h->pic_type != AV_PICTURE_TYPE_B) + if (h->cur.f->pict_type != AV_PICTURE_TYPE_B) h->col_type_base[h->mbidx] = I_8X8; } @@ -673,7 +673,7 @@ static int decode_mb_i(AVSContext *h, int cbp_code) ff_cavs_modify_mb_i(h, &pred_mode_uv); /* get coded block pattern */ - if (h->pic_type == AV_PICTURE_TYPE_I) + if (h->cur.f->pict_type == AV_PICTURE_TYPE_I) cbp_code = get_ue_golomb(gb); if (cbp_code > 63U) { av_log(h->avctx, AV_LOG_ERROR, "illegal intra cbp\n"); @@ -901,7 +901,7 @@ static inline int decode_slice_header(AVSContext *h, GetBitContext *gb) h->qp = get_bits(gb, 6); } /* inter frame or second slice can have weighting params */ - if ((h->pic_type != AV_PICTURE_TYPE_I) || + if ((h->cur.f->pict_type != AV_PICTURE_TYPE_I) || (!h->pic_structure && h->mby >= h->mb_width / 2)) if (get_bits1(gb)) { //slice_weighting_flag av_log(h->avctx, AV_LOG_ERROR, @@ -946,17 +946,17 @@ static int decode_pic(AVSContext *h) skip_bits(&h->gb, 16);//bbv_dwlay if (h->stc == PIC_PB_START_CODE) { - h->pic_type = get_bits(&h->gb, 2) + AV_PICTURE_TYPE_I; - if (h->pic_type > AV_PICTURE_TYPE_B) { + h->cur.f->pict_type = get_bits(&h->gb, 2) + AV_PICTURE_TYPE_I; + if (h->cur.f->pict_type > AV_PICTURE_TYPE_B) { av_log(h->avctx, AV_LOG_ERROR, "illegal picture type\n"); return -1; } /* make sure we have the reference frames we need */ if (!h->DPB[0].f->data[0] || - (!h->DPB[1].f->data[0] && h->pic_type == AV_PICTURE_TYPE_B)) + (!h->DPB[1].f->data[0] && h->cur.f->pict_type == AV_PICTURE_TYPE_B)) return -1; } else { - h->pic_type = AV_PICTURE_TYPE_I; + h->cur.f->pict_type = AV_PICTURE_TYPE_I; if (get_bits1(&h->gb)) skip_bits(&h->gb, 24);//time_code /* old sample clips were all progressive and no low_delay, @@ -988,7 +988,7 @@ static int decode_pic(AVSContext *h) h->cur.poc = get_bits(&h->gb, 8) * 2; /* get temporal distances and MV scaling factors */ - if (h->pic_type != AV_PICTURE_TYPE_B) { + if (h->cur.f->pict_type != AV_PICTURE_TYPE_B) { h->dist[0] = (h->cur.poc - h->DPB[0].poc + 512) % 512; } else { h->dist[0] = (h->DPB[0].poc - h->cur.poc + 512) % 512; @@ -996,7 +996,7 @@ static int decode_pic(AVSContext *h) h->dist[1] = (h->cur.poc - h->DPB[1].poc + 512) % 512; h->scale_den[0] = h->dist[0] ? 512/h->dist[0] : 0; h->scale_den[1] = h->dist[1] ? 512/h->dist[1] : 0; - if (h->pic_type == AV_PICTURE_TYPE_B) { + if (h->cur.f->pict_type == AV_PICTURE_TYPE_B) { h->sym_factor = h->dist[0] * h->scale_den[1]; } else { h->direct_den[0] = h->dist[0] ? 16384 / h->dist[0] : 0; @@ -1015,12 +1015,12 @@ static int decode_pic(AVSContext *h) skip_bits1(&h->gb); //repeat_first_field h->qp_fixed = get_bits1(&h->gb); h->qp = get_bits(&h->gb, 6); - if (h->pic_type == AV_PICTURE_TYPE_I) { + if (h->cur.f->pict_type == AV_PICTURE_TYPE_I) { if (!h->progressive && !h->pic_structure) skip_bits1(&h->gb);//what is this? skip_bits(&h->gb, 4); //reserved bits } else { - if (!(h->pic_type == AV_PICTURE_TYPE_B && h->pic_structure == 1)) + if (!(h->cur.f->pict_type == AV_PICTURE_TYPE_B && h->pic_structure == 1)) h->ref_flag = get_bits1(&h->gb); skip_bits(&h->gb, 4); //reserved bits h->skip_mode_flag = get_bits1(&h->gb); @@ -1032,12 +1032,12 @@ static int decode_pic(AVSContext *h) } else { h->alpha_offset = h->beta_offset = 0; } - if (h->pic_type == AV_PICTURE_TYPE_I) { + if (h->cur.f->pict_type == AV_PICTURE_TYPE_I) { do { check_for_slice(h); decode_mb_i(h, 0); } while (ff_cavs_next_mb(h)); - } else if (h->pic_type == AV_PICTURE_TYPE_P) { + } else if (h->cur.f->pict_type == AV_PICTURE_TYPE_P) { do { if (check_for_slice(h)) skip_count = -1; @@ -1070,7 +1070,7 @@ static int decode_pic(AVSContext *h) } } while (ff_cavs_next_mb(h)); } - if (h->pic_type != AV_PICTURE_TYPE_B) { + if (h->cur.f->pict_type != AV_PICTURE_TYPE_B) { if (h->DPB[1].f->data[0]) h->avctx->release_buffer(h->avctx, h->DPB[1].f); FFSWAP(AVSFrame, h->cur, h->DPB[1]); @@ -1186,7 +1186,7 @@ static int cavs_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, if (decode_pic(h)) break; *got_frame = 1; - if (h->pic_type != AV_PICTURE_TYPE_B) { + if (h->cur.f->pict_type != AV_PICTURE_TYPE_B) { if (h->DPB[1].f->data[0]) { *picture = *h->DPB[1].f; } else { diff --git a/tests/fate/video.mak b/tests/fate/video.mak index 5689f51de9..f8725b6e3d 100644 --- a/tests/fate/video.mak +++ b/tests/fate/video.mak @@ -51,6 +51,9 @@ FATE_VIDEO-$(call DEMDEC, BINK, BINK) += $(FATE_BINK_VIDEO) FATE_VIDEO-$(call DEMDEC, BMV, BMV_VIDEO) += fate-bmv-video fate-bmv-video: CMD = framecrc -i $(SAMPLES)/bmv/SURFING-partial.BMV -pix_fmt rgb24 -an +FATE_VIDEO-$(call DEMDEC, MPEGPS, CAVS) += fate-cavs +fate-cavs: CMD = framecrc -i $(SAMPLES)/cavs/cavs.mpg -an + FATE_VIDEO-$(call DEMDEC, CDG, CDGRAPHICS) += fate-cdgraphics fate-cdgraphics: CMD = framecrc -i $(SAMPLES)/cdgraphics/BrotherJohn.cdg -pix_fmt rgb24 -t 1 diff --git a/tests/ref/fate/cavs b/tests/ref/fate/cavs new file mode 100644 index 0000000000..f9af8fa88a --- /dev/null +++ b/tests/ref/fate/cavs @@ -0,0 +1,172 @@ +#tb 0: 1/25 +0, 0, 0, 1, 622080, 0x76183b91 +0, 1, 1, 1, 622080, 0x2ca5e808 +0, 2, 2, 1, 622080, 0xc503eda4 +0, 3, 3, 1, 622080, 0xa0dbf06c +0, 4, 4, 1, 622080, 0xf4363cfa +0, 5, 5, 1, 622080, 0xaa7dd9b8 +0, 6, 6, 1, 622080, 0x3ab6223b +0, 7, 7, 1, 622080, 0xe402644b +0, 8, 8, 1, 622080, 0xd0da3ade +0, 9, 9, 1, 622080, 0x0aff6151 +0, 10, 10, 1, 622080, 0x02aea3d5 +0, 11, 11, 1, 622080, 0x5d8eeccd +0, 12, 12, 1, 622080, 0x54384735 +0, 13, 13, 1, 622080, 0x890d71c2 +0, 14, 14, 1, 622080, 0xc60ae25b +0, 15, 15, 1, 622080, 0xe589e774 +0, 16, 16, 1, 622080, 0x03471e74 +0, 17, 17, 1, 622080, 0x4e22302c +0, 18, 18, 1, 622080, 0x00333583 +0, 19, 19, 1, 622080, 0xd6eae7d9 +0, 20, 20, 1, 622080, 0x72fe94f7 +0, 21, 21, 1, 622080, 0x3ebbad1e +0, 22, 22, 1, 622080, 0x2fb1de4b +0, 23, 23, 1, 622080, 0x3bfea6d2 +0, 24, 24, 1, 622080, 0x0fb551b2 +0, 25, 25, 1, 622080, 0xb203284f +0, 26, 26, 1, 622080, 0xb3baac30 +0, 27, 27, 1, 622080, 0x15f2c1c7 +0, 28, 28, 1, 622080, 0xb2b530ce +0, 29, 29, 1, 622080, 0xbbaaf241 +0, 30, 30, 1, 622080, 0x01bc9dfc +0, 31, 31, 1, 622080, 0x8a449a42 +0, 32, 32, 1, 622080, 0xdc63d73f +0, 33, 33, 1, 622080, 0xf06bc231 +0, 34, 34, 1, 622080, 0x19e04295 +0, 35, 35, 1, 622080, 0x1e7d1acd +0, 36, 36, 1, 622080, 0x43878b48 +0, 37, 37, 1, 622080, 0xcd94b702 +0, 38, 38, 1, 622080, 0xd2706cf1 +0, 39, 39, 1, 622080, 0x47d636f3 +0, 40, 40, 1, 622080, 0x4a516acc +0, 41, 41, 1, 622080, 0x52b7d89a +0, 42, 42, 1, 622080, 0xc9ba03be +0, 43, 43, 1, 622080, 0x6d17785e +0, 44, 44, 1, 622080, 0x8264871b +0, 45, 45, 1, 622080, 0xd59c84c0 +0, 46, 46, 1, 622080, 0x2b86d6cd +0, 47, 47, 1, 622080, 0x9c5a5f51 +0, 48, 48, 1, 622080, 0x221f79ca +0, 49, 49, 1, 622080, 0x98edb3ec +0, 50, 50, 1, 622080, 0x9a31262c +0, 51, 51, 1, 622080, 0x18f48378 +0, 52, 52, 1, 622080, 0x957c3d9c +0, 53, 53, 1, 622080, 0x9cc6866e +0, 54, 54, 1, 622080, 0x45613726 +0, 55, 55, 1, 622080, 0x7a6c5e65 +0, 56, 56, 1, 622080, 0x976d7a11 +0, 57, 57, 1, 622080, 0x192aea08 +0, 58, 58, 1, 622080, 0x8d4fc823 +0, 59, 59, 1, 622080, 0x1f9c55d7 +0, 60, 60, 1, 622080, 0xd4336d41 +0, 61, 61, 1, 622080, 0x7aa650cd +0, 62, 62, 1, 622080, 0x8efaaeb1 +0, 63, 63, 1, 622080, 0x3d8c3053 +0, 64, 64, 1, 622080, 0x1e2b64b0 +0, 65, 65, 1, 622080, 0x0436b1a7 +0, 66, 66, 1, 622080, 0xc5120072 +0, 67, 67, 1, 622080, 0x0203b245 +0, 68, 68, 1, 622080, 0x9815582b +0, 69, 69, 1, 622080, 0x3c60c359 +0, 70, 70, 1, 622080, 0x1a26b948 +0, 71, 71, 1, 622080, 0x56079812 +0, 72, 72, 1, 622080, 0x7b192a55 +0, 73, 73, 1, 622080, 0x335632ab +0, 74, 74, 1, 622080, 0xd0c12eb8 +0, 75, 75, 1, 622080, 0x93bf46cb +0, 76, 76, 1, 622080, 0xce67ce24 +0, 77, 77, 1, 622080, 0xff95bb26 +0, 78, 78, 1, 622080, 0x5e750705 +0, 79, 79, 1, 622080, 0x45a35725 +0, 80, 80, 1, 622080, 0xd8e93c39 +0, 81, 81, 1, 622080, 0xa9f8db50 +0, 82, 82, 1, 622080, 0xf90a862e +0, 83, 83, 1, 622080, 0x5e5a4216 +0, 84, 84, 1, 622080, 0xaaf45ed6 +0, 85, 85, 1, 622080, 0x1933cda5 +0, 86, 86, 1, 622080, 0x7ff68d91 +0, 87, 87, 1, 622080, 0x10038fe9 +0, 88, 88, 1, 622080, 0x9b3425a6 +0, 89, 89, 1, 622080, 0x8d2a141d +0, 90, 90, 1, 622080, 0x698a333e +0, 91, 91, 1, 622080, 0x334685d1 +0, 92, 92, 1, 622080, 0x40317d40 +0, 93, 93, 1, 622080, 0xd3c6f519 +0, 94, 94, 1, 622080, 0xfc2210c2 +0, 95, 95, 1, 622080, 0x3761df34 +0, 96, 96, 1, 622080, 0xef25462a +0, 97, 97, 1, 622080, 0x0fd38121 +0, 98, 98, 1, 622080, 0x184856a6 +0, 99, 99, 1, 622080, 0xc57c9f12 +0, 100, 100, 1, 622080, 0x39874291 +0, 101, 101, 1, 622080, 0x7c13cec4 +0, 102, 102, 1, 622080, 0xc4192a76 +0, 103, 103, 1, 622080, 0x2af404e3 +0, 104, 104, 1, 622080, 0x1ee18f41 +0, 105, 105, 1, 622080, 0xfb4d9ee5 +0, 106, 106, 1, 622080, 0x50aae4ff +0, 107, 107, 1, 622080, 0x030f91fe +0, 108, 108, 1, 622080, 0x3a3ee08c +0, 109, 109, 1, 622080, 0x50121423 +0, 110, 110, 1, 622080, 0xda39e2d6 +0, 111, 111, 1, 622080, 0x9e13ccd6 +0, 112, 112, 1, 622080, 0xb72a22a7 +0, 113, 113, 1, 622080, 0xb76904d5 +0, 114, 114, 1, 622080, 0xcffa04a8 +0, 115, 115, 1, 622080, 0x2984bf3f +0, 116, 116, 1, 622080, 0x274b5778 +0, 117, 117, 1, 622080, 0xf059413a +0, 118, 118, 1, 622080, 0x969fae57 +0, 119, 119, 1, 622080, 0x75c29097 +0, 120, 120, 1, 622080, 0x2bf3b07d +0, 121, 121, 1, 622080, 0x9f43271d +0, 122, 122, 1, 622080, 0x67bf23f3 +0, 123, 123, 1, 622080, 0xa8edcf33 +0, 124, 124, 1, 622080, 0x17a0789e +0, 125, 125, 1, 622080, 0x14b67cc7 +0, 126, 126, 1, 622080, 0x779215cd +0, 127, 127, 1, 622080, 0x8b460a21 +0, 128, 128, 1, 622080, 0x0502ad7d +0, 129, 129, 1, 622080, 0x6860678f +0, 130, 130, 1, 622080, 0xe180469e +0, 131, 131, 1, 622080, 0x9a992835 +0, 132, 132, 1, 622080, 0x2efafa33 +0, 133, 133, 1, 622080, 0xe24e59b2 +0, 134, 134, 1, 622080, 0xfb774d53 +0, 135, 135, 1, 622080, 0x3de4ea81 +0, 136, 136, 1, 622080, 0xaf9aa1d6 +0, 137, 137, 1, 622080, 0xa0e3722f +0, 138, 138, 1, 622080, 0x81684492 +0, 139, 139, 1, 622080, 0xa4e971fb +0, 140, 140, 1, 622080, 0x4a1903c8 +0, 141, 141, 1, 622080, 0x26304e4a +0, 142, 142, 1, 622080, 0x867983a4 +0, 143, 143, 1, 622080, 0x2e7e4d13 +0, 144, 144, 1, 622080, 0x736f4682 +0, 145, 145, 1, 622080, 0x426a95fa +0, 146, 146, 1, 622080, 0x2bc8850c +0, 147, 147, 1, 622080, 0x047e77ab +0, 148, 148, 1, 622080, 0x414ab77f +0, 149, 149, 1, 622080, 0x42681090 +0, 150, 150, 1, 622080, 0x80744ccb +0, 151, 151, 1, 622080, 0x50e2ecc0 +0, 152, 152, 1, 622080, 0x5c9fe70e +0, 153, 153, 1, 622080, 0x016461ee +0, 154, 154, 1, 622080, 0xd42f019a +0, 155, 155, 1, 622080, 0x8171bf41 +0, 156, 156, 1, 622080, 0xf4d8ef7e +0, 157, 157, 1, 622080, 0xf2d513c8 +0, 158, 158, 1, 622080, 0xb5b07704 +0, 159, 159, 1, 622080, 0x2168a07a +0, 160, 160, 1, 622080, 0x840418f9 +0, 161, 161, 1, 622080, 0xd36f1b7c +0, 162, 162, 1, 622080, 0x52532604 +0, 163, 163, 1, 622080, 0x0856d6eb +0, 164, 164, 1, 622080, 0x21748734 +0, 165, 165, 1, 622080, 0xbd315c05 +0, 166, 166, 1, 622080, 0x1cea8103 +0, 167, 167, 1, 622080, 0x71f6e3cb +0, 168, 168, 1, 622080, 0xb12d7aa7 +0, 169, 169, 1, 622080, 0x54dd2acb +0, 170, 170, 1, 622080, 0xe8f93765