From patchwork Thu May 21 12:30:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 19794 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 9FE8C44B0FB for ; Thu, 21 May 2020 15:31:41 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 778FE68A285; Thu, 21 May 2020 15:31:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail.red.khirnov.net (unknown [176.97.15.10]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DCFC2688055 for ; Thu, 21 May 2020 15:31:34 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail.red.khirnov.net (Postfix) with ESMTP id 2D77D28A617 for ; Thu, 21 May 2020 14:31:34 +0200 (CEST) Received: from mail.red.khirnov.net ([IPv6:::1]) by localhost (mail.red.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id 4mWdoR29CGJI for ; Thu, 21 May 2020 14:31:19 +0200 (CEST) Received: from quelana.khirnov.net (unknown [IPv6:2a00:c500:61:23b::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "quelana.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail.red.khirnov.net (Postfix) with ESMTPS id CF99F28A181 for ; Thu, 21 May 2020 14:31:18 +0200 (CEST) Received: from localhost (quelana.khirnov.net [IPv6:::1]) by quelana.khirnov.net (Postfix) with ESMTP id E24B822570 for ; Thu, 21 May 2020 14:31:16 +0200 (CEST) Received: from quelana.khirnov.net ([IPv6:::1]) by localhost (quelana.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id akJSHhFePIVp for ; Thu, 21 May 2020 14:30:42 +0200 (CEST) Received: from libav.daenerys.khirnov.net (libav.daenerys.khirnov.net [IPv6:2a00:c500:561:201::7]) by quelana.khirnov.net (Postfix) with ESMTP id 524D520538 for ; Thu, 21 May 2020 14:30:42 +0200 (CEST) Received: by libav.daenerys.khirnov.net (Postfix, from userid 1000) id 0625920E008E; Thu, 21 May 2020 14:30:41 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Thu, 21 May 2020 14:30:39 +0200 Message-Id: <20200521123039.10187-1-anton@khirnov.net> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200519215538.GR10055@michaelspb> References: <20200519215538.GR10055@michaelspb> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] fate: add tests for h264 and vp9 video enc parameters export X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavformat/Makefile | 1 + tests/Makefile | 1 + tests/fate-run.sh | 7 + tests/fate/h264.mak | 6 +- tests/fate/vpx.mak | 5 + tests/ref/fate/h264-encparams | 404 +++++++++++++++ tests/ref/fate/vp9-encparams | 937 ++++++++++++++++++++++++++++++++++ tools/venc_data_dump.c | 195 +++++++ 8 files changed, 1555 insertions(+), 1 deletion(-) create mode 100644 tests/ref/fate/h264-encparams create mode 100644 tests/ref/fate/vp9-encparams create mode 100644 tools/venc_data_dump.c diff --git a/libavformat/Makefile b/libavformat/Makefile index 5fa24cef16..67778ff798 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -670,3 +670,4 @@ TOOLS = aviocat \ probetest \ seek_print \ sidxindex \ + venc_data_dump diff --git a/tests/Makefile b/tests/Makefile index ab3c235f25..7844901e53 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -221,6 +221,7 @@ $(FATE_FFMPEG) $(FATE_FFMPEG_FFPROBE) $(FATE_SAMPLES_AVCONV) $(FATE_SAMPLES_FFMP $(FATE_FFPROBE) $(FATE_FFMPEG_FFPROBE) $(FATE_SAMPLES_FFPROBE) $(FATE_SAMPLES_FFMPEG_FFPROBE): ffprobe$(PROGSSUF)$(EXESUF) $(FATE_SAMPLES_FASTSTART): tools/qt-faststart$(EXESUF) +$(FATE_SAMPLES_DUMP_DATA): tools/venc_data_dump$(EXESUF) ifdef SAMPLES FATE += $(FATE_EXTERN) diff --git a/tests/fate-run.sh b/tests/fate-run.sh index 7c6d753261..002944b010 100755 --- a/tests/fate-run.sh +++ b/tests/fate-run.sh @@ -487,6 +487,13 @@ concat(){ fi } +venc_data(){ + file=$1 + stream=$2 + frames=$3 + run tools/venc_data_dump${EXECSUF} ${file} ${stream} ${frames} ${threads} ${thread_type} +} + null(){ : } diff --git a/tests/fate/h264.mak b/tests/fate/h264.mak index f14b46c6e0..13a596e52b 100644 --- a/tests/fate/h264.mak +++ b/tests/fate/h264.mak @@ -196,7 +196,8 @@ FATE_H264 := $(FATE_H264:%=fate-h264-conformance-%) \ fate-h264-3386 \ fate-h264-missing-frame \ fate-h264-ref-pic-mod-overflow \ - fate-h264-timecode + fate-h264-timecode \ + fate-h264-encparams FATE_H264-$(call DEMDEC, H264, H264) += $(FATE_H264) FATE_H264-$(call DEMDEC, MOV, H264) += fate-h264-crop-to-container @@ -446,3 +447,6 @@ fate-h264-timecode: CMD = framecrc -i $(TARGET_SAM fate-h264-reinit-%: CMD = framecrc -i $(TARGET_SAMPLES)/h264/$(@:fate-h264-%=%).h264 -vf format=yuv444p10le,scale=w=352:h=288 fate-h264-dts_5frames: CMD = probeframes $(TARGET_SAMPLES)/h264/dts_5frames.mkv + +fate-h264-encparams: CMD = venc_data $(TARGET_SAMPLES)/h264-conformance/FRext/FRExt_MMCO4_Sony_B.264 0 1 +FATE_SAMPLES_DUMP_DATA += fate-h264-encparams diff --git a/tests/fate/vpx.mak b/tests/fate/vpx.mak index c65959f133..88ccc70a5a 100644 --- a/tests/fate/vpx.mak +++ b/tests/fate/vpx.mak @@ -163,5 +163,10 @@ FATE_VP9-$(CONFIG_IVF_DEMUXER) += fate-vp9-05-resize fate-vp9-05-resize: CMD = framemd5 -i $(TARGET_SAMPLES)/vp9-test-vectors/vp90-2-05-resize.ivf -s 352x288 -sws_flags bitexact+bilinear fate-vp9-05-resize: REF = $(SRC_PATH)/tests/ref/fate/vp9-05-resize +fate-vp9-encparams: CMD = venc_data $(TARGET_SAMPLES)/vp9-test-vectors/vp90-2-segmentation-aq-akiyo.webm 0 5 +FATE_SAMPLES_DUMP_DATA += fate-vp9-encparams + +FATE_VP9-$(CONFIG_MATROSKA_DEMUXER) += fate-vp9-encparams + FATE_SAMPLES_AVCONV-$(CONFIG_VP9_DECODER) += $(FATE_VP9-yes) fate-vp9: $(FATE_VP9-yes) diff --git a/tests/ref/fate/h264-encparams b/tests/ref/fate/h264-encparams new file mode 100644 index 0000000000..8dd5e86b74 --- /dev/null +++ b/tests/ref/fate/h264-encparams @@ -0,0 +1,404 @@ +frame 0 +AVVideoEncParams 1 +qp 28 +delta_qp[1][0] 3 +delta_qp[1][1] 3 +delta_qp[2][0] -2 +delta_qp[2][1] -2 +nb_blocks 396 +block 0 0:0 16x16 0 +block 1 16:0 16x16 0 +block 2 32:0 16x16 0 +block 3 48:0 16x16 0 +block 4 64:0 16x16 0 +block 5 80:0 16x16 0 +block 6 96:0 16x16 0 +block 7 112:0 16x16 0 +block 8 128:0 16x16 0 +block 9 144:0 16x16 0 +block 10 160:0 16x16 0 +block 11 176:0 16x16 0 +block 12 192:0 16x16 0 +block 13 208:0 16x16 0 +block 14 224:0 16x16 0 +block 15 240:0 16x16 0 +block 16 256:0 16x16 0 +block 17 272:0 16x16 0 +block 18 288:0 16x16 0 +block 19 304:0 16x16 0 +block 20 320:0 16x16 0 +block 21 336:0 16x16 0 +block 22 0:16 16x16 0 +block 23 16:16 16x16 0 +block 24 32:16 16x16 0 +block 25 48:16 16x16 0 +block 26 64:16 16x16 0 +block 27 80:16 16x16 0 +block 28 96:16 16x16 0 +block 29 112:16 16x16 0 +block 30 128:16 16x16 0 +block 31 144:16 16x16 0 +block 32 160:16 16x16 0 +block 33 176:16 16x16 0 +block 34 192:16 16x16 0 +block 35 208:16 16x16 0 +block 36 224:16 16x16 0 +block 37 240:16 16x16 0 +block 38 256:16 16x16 0 +block 39 272:16 16x16 0 +block 40 288:16 16x16 0 +block 41 304:16 16x16 0 +block 42 320:16 16x16 0 +block 43 336:16 16x16 0 +block 44 0:32 16x16 0 +block 45 16:32 16x16 0 +block 46 32:32 16x16 0 +block 47 48:32 16x16 0 +block 48 64:32 16x16 0 +block 49 80:32 16x16 0 +block 50 96:32 16x16 0 +block 51 112:32 16x16 0 +block 52 128:32 16x16 0 +block 53 144:32 16x16 0 +block 54 160:32 16x16 0 +block 55 176:32 16x16 0 +block 56 192:32 16x16 0 +block 57 208:32 16x16 0 +block 58 224:32 16x16 0 +block 59 240:32 16x16 0 +block 60 256:32 16x16 0 +block 61 272:32 16x16 0 +block 62 288:32 16x16 0 +block 63 304:32 16x16 0 +block 64 320:32 16x16 0 +block 65 336:32 16x16 0 +block 66 0:48 16x16 0 +block 67 16:48 16x16 0 +block 68 32:48 16x16 0 +block 69 48:48 16x16 0 +block 70 64:48 16x16 0 +block 71 80:48 16x16 0 +block 72 96:48 16x16 0 +block 73 112:48 16x16 0 +block 74 128:48 16x16 0 +block 75 144:48 16x16 0 +block 76 160:48 16x16 0 +block 77 176:48 16x16 0 +block 78 192:48 16x16 0 +block 79 208:48 16x16 0 +block 80 224:48 16x16 0 +block 81 240:48 16x16 0 +block 82 256:48 16x16 0 +block 83 272:48 16x16 0 +block 84 288:48 16x16 0 +block 85 304:48 16x16 0 +block 86 320:48 16x16 0 +block 87 336:48 16x16 0 +block 88 0:64 16x16 0 +block 89 16:64 16x16 0 +block 90 32:64 16x16 0 +block 91 48:64 16x16 0 +block 92 64:64 16x16 0 +block 93 80:64 16x16 0 +block 94 96:64 16x16 0 +block 95 112:64 16x16 0 +block 96 128:64 16x16 0 +block 97 144:64 16x16 0 +block 98 160:64 16x16 0 +block 99 176:64 16x16 0 +block 100 192:64 16x16 0 +block 101 208:64 16x16 0 +block 102 224:64 16x16 0 +block 103 240:64 16x16 0 +block 104 256:64 16x16 0 +block 105 272:64 16x16 0 +block 106 288:64 16x16 0 +block 107 304:64 16x16 0 +block 108 320:64 16x16 0 +block 109 336:64 16x16 0 +block 110 0:80 16x16 0 +block 111 16:80 16x16 0 +block 112 32:80 16x16 0 +block 113 48:80 16x16 0 +block 114 64:80 16x16 0 +block 115 80:80 16x16 0 +block 116 96:80 16x16 0 +block 117 112:80 16x16 0 +block 118 128:80 16x16 0 +block 119 144:80 16x16 0 +block 120 160:80 16x16 0 +block 121 176:80 16x16 0 +block 122 192:80 16x16 0 +block 123 208:80 16x16 0 +block 124 224:80 16x16 0 +block 125 240:80 16x16 0 +block 126 256:80 16x16 0 +block 127 272:80 16x16 0 +block 128 288:80 16x16 0 +block 129 304:80 16x16 0 +block 130 320:80 16x16 0 +block 131 336:80 16x16 0 +block 132 0:96 16x16 0 +block 133 16:96 16x16 0 +block 134 32:96 16x16 0 +block 135 48:96 16x16 0 +block 136 64:96 16x16 0 +block 137 80:96 16x16 0 +block 138 96:96 16x16 0 +block 139 112:96 16x16 0 +block 140 128:96 16x16 0 +block 141 144:96 16x16 0 +block 142 160:96 16x16 0 +block 143 176:96 16x16 0 +block 144 192:96 16x16 0 +block 145 208:96 16x16 0 +block 146 224:96 16x16 0 +block 147 240:96 16x16 0 +block 148 256:96 16x16 0 +block 149 272:96 16x16 0 +block 150 288:96 16x16 0 +block 151 304:96 16x16 0 +block 152 320:96 16x16 0 +block 153 336:96 16x16 0 +block 154 0:112 16x16 0 +block 155 16:112 16x16 0 +block 156 32:112 16x16 0 +block 157 48:112 16x16 0 +block 158 64:112 16x16 0 +block 159 80:112 16x16 0 +block 160 96:112 16x16 0 +block 161 112:112 16x16 0 +block 162 128:112 16x16 0 +block 163 144:112 16x16 0 +block 164 160:112 16x16 0 +block 165 176:112 16x16 0 +block 166 192:112 16x16 0 +block 167 208:112 16x16 0 +block 168 224:112 16x16 0 +block 169 240:112 16x16 0 +block 170 256:112 16x16 0 +block 171 272:112 16x16 0 +block 172 288:112 16x16 0 +block 173 304:112 16x16 0 +block 174 320:112 16x16 0 +block 175 336:112 16x16 0 +block 176 0:128 16x16 0 +block 177 16:128 16x16 0 +block 178 32:128 16x16 0 +block 179 48:128 16x16 0 +block 180 64:128 16x16 0 +block 181 80:128 16x16 0 +block 182 96:128 16x16 0 +block 183 112:128 16x16 0 +block 184 128:128 16x16 0 +block 185 144:128 16x16 0 +block 186 160:128 16x16 0 +block 187 176:128 16x16 0 +block 188 192:128 16x16 0 +block 189 208:128 16x16 0 +block 190 224:128 16x16 0 +block 191 240:128 16x16 0 +block 192 256:128 16x16 0 +block 193 272:128 16x16 0 +block 194 288:128 16x16 0 +block 195 304:128 16x16 0 +block 196 320:128 16x16 0 +block 197 336:128 16x16 0 +block 198 0:144 16x16 0 +block 199 16:144 16x16 0 +block 200 32:144 16x16 0 +block 201 48:144 16x16 0 +block 202 64:144 16x16 0 +block 203 80:144 16x16 0 +block 204 96:144 16x16 0 +block 205 112:144 16x16 0 +block 206 128:144 16x16 0 +block 207 144:144 16x16 0 +block 208 160:144 16x16 0 +block 209 176:144 16x16 0 +block 210 192:144 16x16 0 +block 211 208:144 16x16 0 +block 212 224:144 16x16 0 +block 213 240:144 16x16 0 +block 214 256:144 16x16 0 +block 215 272:144 16x16 0 +block 216 288:144 16x16 0 +block 217 304:144 16x16 0 +block 218 320:144 16x16 0 +block 219 336:144 16x16 0 +block 220 0:160 16x16 0 +block 221 16:160 16x16 0 +block 222 32:160 16x16 0 +block 223 48:160 16x16 0 +block 224 64:160 16x16 0 +block 225 80:160 16x16 0 +block 226 96:160 16x16 0 +block 227 112:160 16x16 0 +block 228 128:160 16x16 0 +block 229 144:160 16x16 0 +block 230 160:160 16x16 0 +block 231 176:160 16x16 0 +block 232 192:160 16x16 0 +block 233 208:160 16x16 0 +block 234 224:160 16x16 0 +block 235 240:160 16x16 0 +block 236 256:160 16x16 0 +block 237 272:160 16x16 0 +block 238 288:160 16x16 0 +block 239 304:160 16x16 0 +block 240 320:160 16x16 0 +block 241 336:160 16x16 0 +block 242 0:176 16x16 0 +block 243 16:176 16x16 0 +block 244 32:176 16x16 0 +block 245 48:176 16x16 0 +block 246 64:176 16x16 0 +block 247 80:176 16x16 0 +block 248 96:176 16x16 0 +block 249 112:176 16x16 0 +block 250 128:176 16x16 0 +block 251 144:176 16x16 0 +block 252 160:176 16x16 0 +block 253 176:176 16x16 0 +block 254 192:176 16x16 0 +block 255 208:176 16x16 0 +block 256 224:176 16x16 0 +block 257 240:176 16x16 0 +block 258 256:176 16x16 0 +block 259 272:176 16x16 0 +block 260 288:176 16x16 0 +block 261 304:176 16x16 0 +block 262 320:176 16x16 0 +block 263 336:176 16x16 0 +block 264 0:192 16x16 0 +block 265 16:192 16x16 0 +block 266 32:192 16x16 0 +block 267 48:192 16x16 0 +block 268 64:192 16x16 0 +block 269 80:192 16x16 0 +block 270 96:192 16x16 0 +block 271 112:192 16x16 0 +block 272 128:192 16x16 0 +block 273 144:192 16x16 0 +block 274 160:192 16x16 0 +block 275 176:192 16x16 0 +block 276 192:192 16x16 0 +block 277 208:192 16x16 0 +block 278 224:192 16x16 0 +block 279 240:192 16x16 0 +block 280 256:192 16x16 0 +block 281 272:192 16x16 0 +block 282 288:192 16x16 0 +block 283 304:192 16x16 0 +block 284 320:192 16x16 0 +block 285 336:192 16x16 0 +block 286 0:208 16x16 0 +block 287 16:208 16x16 0 +block 288 32:208 16x16 0 +block 289 48:208 16x16 0 +block 290 64:208 16x16 0 +block 291 80:208 16x16 0 +block 292 96:208 16x16 0 +block 293 112:208 16x16 0 +block 294 128:208 16x16 0 +block 295 144:208 16x16 0 +block 296 160:208 16x16 0 +block 297 176:208 16x16 0 +block 298 192:208 16x16 0 +block 299 208:208 16x16 0 +block 300 224:208 16x16 0 +block 301 240:208 16x16 0 +block 302 256:208 16x16 0 +block 303 272:208 16x16 0 +block 304 288:208 16x16 0 +block 305 304:208 16x16 0 +block 306 320:208 16x16 0 +block 307 336:208 16x16 0 +block 308 0:224 16x16 0 +block 309 16:224 16x16 0 +block 310 32:224 16x16 0 +block 311 48:224 16x16 0 +block 312 64:224 16x16 0 +block 313 80:224 16x16 0 +block 314 96:224 16x16 0 +block 315 112:224 16x16 0 +block 316 128:224 16x16 0 +block 317 144:224 16x16 0 +block 318 160:224 16x16 0 +block 319 176:224 16x16 0 +block 320 192:224 16x16 0 +block 321 208:224 16x16 0 +block 322 224:224 16x16 0 +block 323 240:224 16x16 0 +block 324 256:224 16x16 0 +block 325 272:224 16x16 0 +block 326 288:224 16x16 0 +block 327 304:224 16x16 0 +block 328 320:224 16x16 0 +block 329 336:224 16x16 0 +block 330 0:240 16x16 0 +block 331 16:240 16x16 0 +block 332 32:240 16x16 0 +block 333 48:240 16x16 0 +block 334 64:240 16x16 0 +block 335 80:240 16x16 0 +block 336 96:240 16x16 0 +block 337 112:240 16x16 0 +block 338 128:240 16x16 0 +block 339 144:240 16x16 0 +block 340 160:240 16x16 0 +block 341 176:240 16x16 0 +block 342 192:240 16x16 0 +block 343 208:240 16x16 0 +block 344 224:240 16x16 0 +block 345 240:240 16x16 0 +block 346 256:240 16x16 0 +block 347 272:240 16x16 0 +block 348 288:240 16x16 0 +block 349 304:240 16x16 0 +block 350 320:240 16x16 0 +block 351 336:240 16x16 0 +block 352 0:256 16x16 0 +block 353 16:256 16x16 0 +block 354 32:256 16x16 0 +block 355 48:256 16x16 0 +block 356 64:256 16x16 0 +block 357 80:256 16x16 0 +block 358 96:256 16x16 0 +block 359 112:256 16x16 0 +block 360 128:256 16x16 0 +block 361 144:256 16x16 0 +block 362 160:256 16x16 0 +block 363 176:256 16x16 0 +block 364 192:256 16x16 0 +block 365 208:256 16x16 0 +block 366 224:256 16x16 0 +block 367 240:256 16x16 0 +block 368 256:256 16x16 0 +block 369 272:256 16x16 0 +block 370 288:256 16x16 0 +block 371 304:256 16x16 0 +block 372 320:256 16x16 0 +block 373 336:256 16x16 0 +block 374 0:272 16x16 0 +block 375 16:272 16x16 0 +block 376 32:272 16x16 0 +block 377 48:272 16x16 0 +block 378 64:272 16x16 0 +block 379 80:272 16x16 0 +block 380 96:272 16x16 0 +block 381 112:272 16x16 0 +block 382 128:272 16x16 0 +block 383 144:272 16x16 0 +block 384 160:272 16x16 0 +block 385 176:272 16x16 0 +block 386 192:272 16x16 0 +block 387 208:272 16x16 0 +block 388 224:272 16x16 0 +block 389 240:272 16x16 0 +block 390 256:272 16x16 0 +block 391 272:272 16x16 0 +block 392 288:272 16x16 0 +block 393 304:272 16x16 0 +block 394 320:272 16x16 0 +block 395 336:272 16x16 0 diff --git a/tests/ref/fate/vp9-encparams b/tests/ref/fate/vp9-encparams new file mode 100644 index 0000000000..917162b9ae --- /dev/null +++ b/tests/ref/fate/vp9-encparams @@ -0,0 +1,937 @@ +frame 0 +AVVideoEncParams 0 +qp 65 +nb_blocks 731 +block 0 0:0 64x64 33 +block 1 64:0 16x16 -12 +block 2 80:0 16x16 -12 +block 3 64:16 16x8 0 +block 4 64:24 16x8 0 +block 5 80:16 8x16 0 +block 6 88:16 8x16 0 +block 7 96:0 32x16 -23 +block 8 96:16 32x16 0 +block 9 64:32 16x32 0 +block 10 80:32 16x32 0 +block 11 96:32 16x32 16 +block 12 112:32 16x32 -32 +block 13 128:0 32x16 -32 +block 14 128:16 32x16 -32 +block 15 160:0 32x16 -23 +block 16 160:16 32x16 -32 +block 17 128:32 16x16 -32 +block 18 144:32 16x8 16 +block 19 144:40 16x8 16 +block 20 128:48 8x8 -12 +block 21 136:48 8x8 -12 +block 22 128:56 8x8 -12 +block 23 136:56 8x8 -12 +block 24 144:48 16x16 16 +block 25 160:32 8x8 33 +block 26 168:32 8x8 33 +block 27 160:40 8x8 33 +block 28 168:40 8x8 33 +block 29 176:32 8x8 33 +block 30 184:32 8x8 33 +block 31 176:40 8x8 33 +block 32 184:40 8x8 33 +block 33 160:48 8x16 0 +block 34 168:48 8x16 0 +block 35 176:48 16x8 0 +block 36 176:56 16x8 0 +block 37 192:0 8x16 -23 +block 38 200:0 8x16 -23 +block 39 208:0 16x8 -23 +block 40 208:8 16x8 -23 +block 41 192:16 16x16 0 +block 42 208:16 16x16 16 +block 43 224:0 16x32 16 +block 44 240:0 16x32 16 +block 45 192:32 8x8 33 +block 46 200:32 8x8 33 +block 47 192:40 8x8 33 +block 48 200:40 8x8 33 +block 49 208:32 16x16 -12 +block 50 192:48 8x8 33 +block 51 200:48 8x8 33 +block 52 192:56 8x8 33 +block 53 200:56 8x8 33 +block 54 208:48 8x8 16 +block 55 216:48 8x8 16 +block 56 208:56 8x8 16 +block 57 216:56 8x8 16 +block 58 224:32 16x16 -32 +block 59 240:32 16x16 -23 +block 60 224:48 16x16 16 +block 61 240:48 16x16 16 +block 62 256:0 16x16 -12 +block 63 272:0 16x16 -23 +block 64 256:16 16x16 16 +block 65 272:16 16x16 16 +block 66 288:0 32x16 -23 +block 67 288:16 32x16 0 +block 68 256:32 16x16 -23 +block 69 272:32 16x16 -32 +block 70 256:48 16x16 16 +block 71 272:48 16x16 33 +block 72 288:32 32x32 16 +block 73 320:0 8x8 -23 +block 74 328:0 8x8 -23 +block 75 320:8 8x8 -23 +block 76 328:8 8x8 -23 +block 77 336:0 8x8 -12 +block 78 344:0 8x8 -12 +block 79 336:8 8x8 -12 +block 80 344:8 8x8 -12 +block 81 320:16 8x8 -12 +block 82 328:16 8x8 -12 +block 83 320:24 8x8 -12 +block 84 328:24 8x8 -12 +block 85 336:16 16x16 -12 +block 86 320:32 8x8 0 +block 87 328:32 8x8 0 +block 88 320:40 8x8 0 +block 89 328:40 8x8 0 +block 90 336:32 16x16 -12 +block 91 320:48 16x16 16 +block 92 336:48 16x16 -12 +block 93 0:64 16x32 -23 +block 94 16:64 16x32 -23 +block 95 32:64 8x8 0 +block 96 40:64 8x8 0 +block 97 32:72 8x8 0 +block 98 40:72 8x8 0 +block 99 48:64 8x8 16 +block 100 56:64 8x8 16 +block 101 48:72 8x8 16 +block 102 56:72 8x8 16 +block 103 32:80 16x16 -32 +block 104 48:80 16x16 -32 +block 105 0:96 16x16 -32 +block 106 16:96 16x16 -32 +block 107 0:112 16x16 -32 +block 108 16:112 16x16 -32 +block 109 32:96 16x16 -12 +block 110 48:96 16x16 -12 +block 111 32:112 16x16 -12 +block 112 48:112 16x16 -32 +block 113 64:64 16x16 16 +block 114 80:64 8x8 0 +block 115 88:64 8x8 0 +block 116 80:72 8x8 0 +block 117 88:72 8x8 0 +block 118 64:80 16x16 -32 +block 119 80:80 16x16 -32 +block 120 96:64 16x16 16 +block 121 112:64 16x16 -32 +block 122 96:80 16x16 16 +block 123 112:80 16x16 -32 +block 124 64:96 16x16 -12 +block 125 80:96 8x16 -12 +block 126 88:96 8x16 -12 +block 127 64:112 16x16 -12 +block 128 80:112 16x16 0 +block 129 96:96 16x32 16 +block 130 112:96 16x32 -32 +block 131 128:64 8x8 0 +block 132 136:64 8x8 0 +block 133 128:72 8x8 0 +block 134 136:72 8x8 0 +block 135 144:64 16x16 0 +block 136 128:80 16x16 -12 +block 137 144:80 16x16 33 +block 138 160:64 16x16 33 +block 139 176:64 8x8 33 +block 140 184:64 8x8 33 +block 141 176:72 8x8 33 +block 142 184:72 8x8 33 +block 143 160:80 8x8 33 +block 144 168:80 8x8 33 +block 145 160:88 8x8 33 +block 146 168:88 8x8 33 +block 147 176:80 8x8 0 +block 148 184:80 8x8 0 +block 149 176:88 8x8 0 +block 150 184:88 8x8 0 +block 151 128:96 16x32 33 +block 152 144:96 16x32 33 +block 153 160:96 8x8 33 +block 154 168:96 8x8 33 +block 155 160:104 8x8 33 +block 156 168:104 8x8 33 +block 157 176:96 16x16 33 +block 158 160:112 8x8 16 +block 159 168:112 8x8 16 +block 160 160:120 8x8 16 +block 161 168:120 8x8 16 +block 162 176:112 8x8 33 +block 163 184:112 8x8 33 +block 164 176:120 8x8 33 +block 165 184:120 8x8 33 +block 166 192:64 8x8 33 +block 167 200:64 8x8 33 +block 168 192:72 8x8 33 +block 169 200:72 8x8 33 +block 170 208:64 8x8 33 +block 171 216:64 8x8 33 +block 172 208:72 8x8 33 +block 173 216:72 8x8 33 +block 174 192:80 8x8 33 +block 175 200:80 8x8 33 +block 176 192:88 8x8 33 +block 177 200:88 8x8 33 +block 178 208:80 8x16 33 +block 179 216:80 8x16 33 +block 180 224:64 16x16 0 +block 181 240:64 16x16 0 +block 182 224:80 8x8 -12 +block 183 232:80 8x8 -12 +block 184 224:88 8x8 -12 +block 185 232:88 8x8 -12 +block 186 240:80 8x16 -12 +block 187 248:80 8x16 -12 +block 188 192:96 8x8 33 +block 189 200:96 8x8 33 +block 190 192:104 8x8 33 +block 191 200:104 8x8 33 +block 192 208:96 16x16 33 +block 193 192:112 8x8 33 +block 194 200:112 8x8 33 +block 195 192:120 8x8 33 +block 196 200:120 8x8 33 +block 197 208:112 8x8 33 +block 198 216:112 8x8 33 +block 199 208:120 8x8 33 +block 200 216:120 8x8 33 +block 201 224:96 8x8 16 +block 202 232:96 8x8 16 +block 203 224:104 8x8 16 +block 204 232:104 8x8 16 +block 205 240:96 16x16 -32 +block 206 224:112 8x8 33 +block 207 232:112 8x8 33 +block 208 224:120 8x8 33 +block 209 232:120 8x8 33 +block 210 240:112 16x16 -32 +block 211 256:64 16x16 0 +block 212 272:64 16x16 16 +block 213 256:80 16x8 0 +block 214 256:88 16x8 0 +block 215 272:80 16x8 0 +block 216 272:88 16x8 0 +block 217 288:64 8x8 16 +block 218 296:64 8x8 16 +block 219 288:72 8x8 16 +block 220 296:72 8x8 16 +block 221 304:64 16x16 0 +block 222 288:80 16x8 -12 +block 223 288:88 16x8 -12 +block 224 304:80 8x8 -12 +block 225 312:80 8x8 -12 +block 226 304:88 8x8 -12 +block 227 312:88 8x8 -12 +block 228 256:96 16x16 -32 +block 229 272:96 16x16 -32 +block 230 256:112 16x16 -32 +block 231 272:112 16x16 -32 +block 232 288:96 16x16 -32 +block 233 304:96 16x16 -12 +block 234 288:112 16x16 -32 +block 235 304:112 16x16 0 +block 236 320:64 8x16 -12 +block 237 328:64 8x16 -12 +block 238 336:64 16x16 -12 +block 239 320:80 16x8 0 +block 240 320:88 16x8 0 +block 241 336:80 16x16 -12 +block 242 320:96 8x16 0 +block 243 328:96 8x16 0 +block 244 336:96 16x16 -12 +block 245 320:112 16x16 0 +block 246 336:112 16x16 -12 +block 247 0:128 16x16 16 +block 248 16:128 16x16 16 +block 249 0:144 16x16 -12 +block 250 16:144 16x16 -12 +block 251 32:128 8x8 16 +block 252 40:128 8x8 16 +block 253 32:136 8x8 16 +block 254 40:136 8x8 16 +block 255 48:128 16x16 16 +block 256 32:144 16x16 -23 +block 257 48:144 16x16 -23 +block 258 0:160 16x16 -12 +block 259 16:160 16x16 -12 +block 260 0:176 16x16 -32 +block 261 16:176 8x8 -32 +block 262 24:176 8x8 -32 +block 263 16:184 8x8 -32 +block 264 24:184 8x8 -32 +block 265 32:160 32x32 -12 +block 266 64:128 16x16 16 +block 267 80:128 16x16 16 +block 268 64:144 16x16 -23 +block 269 80:144 16x16 -12 +block 270 96:128 8x8 0 +block 271 104:128 8x8 0 +block 272 96:136 8x8 0 +block 273 104:136 8x8 0 +block 274 112:128 16x16 -32 +block 275 96:144 8x8 -12 +block 276 104:144 8x8 -12 +block 277 96:152 8x8 -12 +block 278 104:152 8x8 -12 +block 279 112:144 16x16 -32 +block 280 64:160 16x16 0 +block 281 80:160 16x16 0 +block 282 64:176 16x16 -32 +block 283 80:176 16x8 -12 +block 284 80:184 16x8 -12 +block 285 96:160 16x16 -12 +block 286 112:160 16x16 -32 +block 287 96:176 16x8 44 +block 288 96:184 16x8 44 +block 289 112:176 8x8 44 +block 290 120:176 8x8 44 +block 291 112:184 8x8 44 +block 292 120:184 8x8 44 +block 293 128:128 8x8 44 +block 294 136:128 8x8 44 +block 295 128:136 8x8 44 +block 296 136:136 8x8 44 +block 297 144:128 8x8 0 +block 298 152:128 8x8 0 +block 299 144:136 8x8 0 +block 300 152:136 8x8 0 +block 301 128:144 8x8 16 +block 302 136:144 8x8 16 +block 303 128:152 8x8 16 +block 304 136:152 8x8 16 +block 305 144:144 8x8 44 +block 306 152:144 8x8 44 +block 307 144:152 8x8 44 +block 308 152:152 8x8 44 +block 309 160:128 16x16 0 +block 310 176:128 8x8 16 +block 311 184:128 8x8 16 +block 312 176:136 8x8 16 +block 313 184:136 8x8 16 +block 314 160:144 8x8 33 +block 315 168:144 8x8 33 +block 316 160:152 8x8 33 +block 317 168:152 8x8 33 +block 318 176:144 8x8 33 +block 319 184:144 8x8 33 +block 320 176:152 8x8 33 +block 321 184:152 8x8 33 +block 322 128:160 8x8 16 +block 323 136:160 8x8 16 +block 324 128:168 8x8 16 +block 325 136:168 8x8 16 +block 326 144:160 8x8 44 +block 327 152:160 8x8 44 +block 328 144:168 8x8 44 +block 329 152:168 8x8 44 +block 330 128:176 16x8 33 +block 331 128:184 16x8 33 +block 332 144:176 8x8 16 +block 333 152:176 8x8 16 +block 334 144:184 8x8 16 +block 335 152:184 8x8 16 +block 336 160:160 8x8 16 +block 337 168:160 8x8 16 +block 338 160:168 8x8 16 +block 339 168:168 8x8 16 +block 340 176:160 8x8 16 +block 341 184:160 8x8 16 +block 342 176:168 8x8 16 +block 343 184:168 8x8 16 +block 344 160:176 8x8 33 +block 345 168:176 8x8 33 +block 346 160:184 8x8 33 +block 347 168:184 8x8 33 +block 348 176:176 8x16 33 +block 349 184:176 8x16 33 +block 350 192:128 16x16 0 +block 351 208:128 8x16 44 +block 352 216:128 8x16 44 +block 353 192:144 16x16 0 +block 354 208:144 8x8 33 +block 355 216:144 8x8 33 +block 356 208:152 8x8 33 +block 357 216:152 8x8 33 +block 358 224:128 8x8 33 +block 359 232:128 8x8 33 +block 360 224:136 8x8 33 +block 361 232:136 8x8 33 +block 362 240:128 16x16 16 +block 363 224:144 16x8 0 +block 364 224:152 16x8 0 +block 365 240:144 16x16 -12 +block 366 192:160 16x16 16 +block 367 208:160 8x8 44 +block 368 216:160 8x8 44 +block 369 208:168 8x8 44 +block 370 216:168 8x8 44 +block 371 192:176 8x8 33 +block 372 200:176 8x8 33 +block 373 192:184 8x8 33 +block 374 200:184 8x8 33 +block 375 208:176 8x8 33 +block 376 216:176 8x8 33 +block 377 208:184 8x8 33 +block 378 216:184 8x8 33 +block 379 224:160 8x8 0 +block 380 232:160 8x8 0 +block 381 224:168 8x8 0 +block 382 232:168 8x8 0 +block 383 240:160 16x16 0 +block 384 224:176 8x8 44 +block 385 232:176 8x8 44 +block 386 224:184 8x8 44 +block 387 232:184 8x8 44 +block 388 240:176 16x8 44 +block 389 240:184 16x8 44 +block 390 256:128 16x16 16 +block 391 272:128 16x16 16 +block 392 256:144 16x16 -12 +block 393 272:144 16x16 -12 +block 394 288:128 16x8 16 +block 395 288:136 16x8 16 +block 396 304:128 16x16 16 +block 397 288:144 16x16 -12 +block 398 304:144 16x16 -12 +block 399 256:160 16x16 -23 +block 400 272:160 16x16 -23 +block 401 256:176 8x8 44 +block 402 264:176 8x8 44 +block 403 256:184 8x8 44 +block 404 264:184 8x8 44 +block 405 272:176 16x8 33 +block 406 272:184 16x8 33 +block 407 288:160 32x16 -23 +block 408 288:176 32x16 -32 +block 409 320:128 8x8 -12 +block 410 328:128 8x8 -12 +block 411 320:136 8x8 -12 +block 412 328:136 8x8 -12 +block 413 336:128 8x16 -12 +block 414 344:128 8x16 -12 +block 415 320:144 16x16 -23 +block 416 336:144 16x16 -12 +block 417 320:160 16x16 -23 +block 418 336:160 16x16 0 +block 419 320:176 16x16 -32 +block 420 336:176 16x16 0 +block 421 0:192 16x16 -32 +block 422 16:192 8x8 -32 +block 423 24:192 8x8 -32 +block 424 16:200 8x8 -32 +block 425 24:200 8x8 -32 +block 426 0:208 16x16 0 +block 427 16:208 16x16 0 +block 428 32:192 32x32 -32 +block 429 0:224 16x16 0 +block 430 16:224 16x16 0 +block 431 0:240 16x16 0 +block 432 16:240 16x16 0 +block 433 32:224 32x16 0 +block 434 32:240 32x16 33 +block 435 64:192 8x8 44 +block 436 72:192 8x8 44 +block 437 64:200 8x8 44 +block 438 72:200 8x8 44 +block 439 80:192 8x8 44 +block 440 88:192 8x8 44 +block 441 80:200 8x8 44 +block 442 88:200 8x8 44 +block 443 64:208 8x8 44 +block 444 72:208 8x8 44 +block 445 64:216 8x8 44 +block 446 72:216 8x8 44 +block 447 80:208 8x8 -12 +block 448 88:208 8x8 -12 +block 449 80:216 8x8 -12 +block 450 88:216 8x8 -12 +block 451 96:192 8x8 -23 +block 452 104:192 8x8 -23 +block 453 96:200 8x8 -23 +block 454 104:200 8x8 -23 +block 455 112:192 16x16 -23 +block 456 96:208 16x16 -23 +block 457 112:208 16x16 0 +block 458 64:224 32x16 16 +block 459 64:240 32x16 0 +block 460 96:224 16x16 -12 +block 461 112:224 8x16 0 +block 462 120:224 8x16 0 +block 463 96:240 16x16 -12 +block 464 112:240 8x8 0 +block 465 120:240 8x8 0 +block 466 112:248 8x8 0 +block 467 120:248 8x8 0 +block 468 128:192 8x8 0 +block 469 136:192 8x8 0 +block 470 128:200 8x8 0 +block 471 136:200 8x8 0 +block 472 144:192 8x16 0 +block 473 152:192 8x16 0 +block 474 128:208 8x8 -23 +block 475 136:208 8x8 -23 +block 476 128:216 8x8 -23 +block 477 136:216 8x8 -23 +block 478 144:208 8x16 0 +block 479 152:208 8x16 0 +block 480 160:192 8x8 44 +block 481 168:192 8x8 44 +block 482 160:200 8x8 44 +block 483 168:200 8x8 44 +block 484 176:192 8x8 0 +block 485 184:192 8x8 0 +block 486 176:200 8x8 0 +block 487 184:200 8x8 0 +block 488 160:208 8x8 33 +block 489 168:208 8x8 33 +block 490 160:216 8x8 33 +block 491 168:216 8x8 33 +block 492 176:208 8x8 44 +block 493 184:208 8x8 44 +block 494 176:216 8x8 44 +block 495 184:216 8x8 44 +block 496 128:224 16x16 -32 +block 497 144:224 16x16 -12 +block 498 128:240 8x16 -12 +block 499 136:240 8x16 -12 +block 500 144:240 16x16 -23 +block 501 160:224 8x8 33 +block 502 168:224 8x8 33 +block 503 160:232 8x8 33 +block 504 168:232 8x8 33 +block 505 176:224 8x8 33 +block 506 184:224 8x8 33 +block 507 176:232 8x8 33 +block 508 184:232 8x8 33 +block 509 160:240 8x8 33 +block 510 168:240 8x8 33 +block 511 160:248 8x8 33 +block 512 168:248 8x8 33 +block 513 176:240 8x8 33 +block 514 184:240 8x8 33 +block 515 176:248 8x8 33 +block 516 184:248 8x8 33 +block 517 192:192 16x8 33 +block 518 192:200 16x8 33 +block 519 208:192 8x16 16 +block 520 216:192 8x16 16 +block 521 192:208 16x16 16 +block 522 208:208 8x8 0 +block 523 216:208 8x8 0 +block 524 208:216 8x8 0 +block 525 216:216 8x8 0 +block 526 224:192 8x8 -12 +block 527 232:192 8x8 -12 +block 528 224:200 8x8 -12 +block 529 232:200 8x8 -12 +block 530 240:192 8x16 0 +block 531 248:192 8x16 0 +block 532 224:208 16x16 -23 +block 533 240:208 16x8 16 +block 534 240:216 16x8 16 +block 535 192:224 16x16 33 +block 536 208:224 8x8 0 +block 537 216:224 8x8 0 +block 538 208:232 8x8 0 +block 539 216:232 8x8 0 +block 540 192:240 8x8 33 +block 541 200:240 8x8 33 +block 542 192:248 8x8 33 +block 543 200:248 8x8 33 +block 544 208:240 8x8 0 +block 545 216:240 8x8 0 +block 546 208:248 8x8 0 +block 547 216:248 8x8 0 +block 548 224:224 16x16 -23 +block 549 240:224 8x8 33 +block 550 248:224 8x8 33 +block 551 240:232 8x8 33 +block 552 248:232 8x8 33 +block 553 224:240 8x8 -23 +block 554 232:240 8x8 -23 +block 555 224:248 8x8 -23 +block 556 232:248 8x8 -23 +block 557 240:240 8x8 33 +block 558 248:240 8x8 33 +block 559 240:248 8x8 33 +block 560 248:248 8x8 33 +block 561 256:192 16x16 -23 +block 562 272:192 16x8 16 +block 563 272:200 16x8 16 +block 564 256:208 8x8 -23 +block 565 264:208 8x8 -23 +block 566 256:216 8x8 -23 +block 567 264:216 8x8 -23 +block 568 272:208 8x8 -32 +block 569 280:208 8x8 -32 +block 570 272:216 8x8 -32 +block 571 280:216 8x8 -32 +block 572 288:192 8x8 44 +block 573 296:192 8x8 44 +block 574 288:200 8x8 44 +block 575 296:200 8x8 44 +block 576 304:192 8x8 -32 +block 577 312:192 8x8 -32 +block 578 304:200 8x8 -32 +block 579 312:200 8x8 -32 +block 580 288:208 16x16 33 +block 581 304:208 8x16 -12 +block 582 312:208 8x16 -12 +block 583 256:224 16x16 -23 +block 584 272:224 16x16 -23 +block 585 256:240 8x8 -12 +block 586 264:240 8x8 -12 +block 587 256:248 8x8 -12 +block 588 264:248 8x8 -12 +block 589 272:240 8x8 0 +block 590 280:240 8x8 0 +block 591 272:248 8x8 0 +block 592 280:248 8x8 0 +block 593 288:224 16x16 33 +block 594 304:224 16x8 16 +block 595 304:232 16x8 16 +block 596 288:240 16x16 33 +block 597 304:240 8x8 44 +block 598 312:240 8x8 44 +block 599 304:248 8x8 44 +block 600 312:248 8x8 44 +block 601 320:192 8x8 -32 +block 602 328:192 8x8 -32 +block 603 320:200 8x8 -32 +block 604 328:200 8x8 -32 +block 605 336:192 8x16 0 +block 606 344:192 8x16 0 +block 607 320:208 8x8 -32 +block 608 328:208 8x8 -32 +block 609 320:216 8x8 -32 +block 610 328:216 8x8 -32 +block 611 336:208 8x16 0 +block 612 344:208 8x16 0 +block 613 320:224 16x16 -32 +block 614 336:224 16x16 0 +block 615 320:240 16x16 -32 +block 616 336:240 8x8 0 +block 617 344:240 8x8 0 +block 618 336:248 8x8 0 +block 619 344:248 8x8 0 +block 620 0:256 16x16 0 +block 621 16:256 16x16 -23 +block 622 0:272 16x16 -32 +block 623 16:272 16x16 -32 +block 624 32:256 16x16 -32 +block 625 48:256 8x8 44 +block 626 56:256 8x8 44 +block 627 48:264 8x8 44 +block 628 56:264 8x8 44 +block 629 32:272 16x16 -32 +block 630 48:272 8x8 44 +block 631 56:272 8x8 44 +block 632 48:280 8x8 44 +block 633 56:280 8x8 44 +block 634 64:256 8x8 0 +block 635 72:256 8x8 0 +block 636 64:264 8x8 0 +block 637 72:264 8x8 0 +block 638 80:256 8x8 0 +block 639 88:256 8x8 0 +block 640 80:264 8x8 0 +block 641 88:264 8x8 0 +block 642 64:272 8x8 -12 +block 643 72:272 8x8 -12 +block 644 64:280 8x8 -12 +block 645 72:280 8x8 -12 +block 646 80:272 16x16 0 +block 647 96:256 16x16 -23 +block 648 112:256 8x8 -12 +block 649 120:256 8x8 -12 +block 650 112:264 8x8 -12 +block 651 120:264 8x8 -12 +block 652 96:272 16x16 -12 +block 653 112:272 8x8 -23 +block 654 120:272 8x8 -23 +block 655 112:280 8x8 -23 +block 656 120:280 8x8 -23 +block 657 128:256 32x32 -32 +block 658 160:256 8x8 33 +block 659 168:256 8x8 33 +block 660 160:264 8x8 33 +block 661 168:264 8x8 33 +block 662 176:256 8x8 33 +block 663 184:256 8x8 33 +block 664 176:264 8x8 33 +block 665 184:264 8x8 33 +block 666 160:272 8x8 33 +block 667 168:272 8x8 33 +block 668 160:280 8x8 33 +block 669 168:280 8x8 33 +block 670 176:272 8x16 0 +block 671 184:272 8x16 0 +block 672 192:256 8x8 33 +block 673 200:256 8x8 33 +block 674 192:264 8x8 33 +block 675 200:264 8x8 33 +block 676 208:256 8x8 44 +block 677 216:256 8x8 44 +block 678 208:264 8x8 44 +block 679 216:264 8x8 44 +block 680 192:272 8x8 33 +block 681 200:272 8x8 33 +block 682 192:280 8x8 33 +block 683 200:280 8x8 33 +block 684 208:272 8x8 33 +block 685 216:272 8x8 33 +block 686 208:280 8x8 33 +block 687 216:280 8x8 33 +block 688 224:256 8x8 0 +block 689 232:256 8x8 0 +block 690 224:264 8x8 0 +block 691 232:264 8x8 0 +block 692 240:256 8x8 33 +block 693 248:256 8x8 33 +block 694 240:264 8x8 33 +block 695 248:264 8x8 33 +block 696 224:272 16x8 -32 +block 697 224:280 16x8 -32 +block 698 240:272 8x8 33 +block 699 248:272 8x8 33 +block 700 240:280 8x8 33 +block 701 248:280 8x8 33 +block 702 256:256 16x16 0 +block 703 272:256 8x8 33 +block 704 280:256 8x8 33 +block 705 272:264 8x8 33 +block 706 280:264 8x8 33 +block 707 256:272 8x8 33 +block 708 264:272 8x8 33 +block 709 256:280 8x8 33 +block 710 264:280 8x8 33 +block 711 272:272 8x8 33 +block 712 280:272 8x8 33 +block 713 272:280 8x8 33 +block 714 280:280 8x8 33 +block 715 288:256 16x16 33 +block 716 304:256 8x8 44 +block 717 312:256 8x8 44 +block 718 304:264 8x8 44 +block 719 312:264 8x8 44 +block 720 288:272 16x16 0 +block 721 304:272 8x16 44 +block 722 312:272 8x16 44 +block 723 320:256 16x8 -32 +block 724 320:264 16x8 -32 +block 725 336:256 8x8 0 +block 726 344:256 8x8 0 +block 727 336:264 8x8 0 +block 728 344:264 8x8 0 +block 729 320:272 16x16 -32 +block 730 336:272 16x16 0 +frame 1 +AVVideoEncParams 0 +qp 183 +nb_blocks 37 +block 0 0:0 64x64 21 +block 1 64:0 64x64 21 +block 2 128:0 64x64 11 +block 3 192:0 64x64 21 +block 4 256:0 64x64 21 +block 5 320:0 32x32 -10 +block 6 320:32 32x32 0 +block 7 0:64 64x64 0 +block 8 64:64 64x64 21 +block 9 128:64 64x64 32 +block 10 192:64 64x64 21 +block 11 256:64 64x64 11 +block 12 320:64 32x32 0 +block 13 320:96 32x32 0 +block 14 0:128 64x64 0 +block 15 64:128 64x64 21 +block 16 128:128 64x64 32 +block 17 192:128 64x64 32 +block 18 256:128 64x64 21 +block 19 320:128 32x32 -10 +block 20 320:160 32x32 -10 +block 21 0:192 64x64 11 +block 22 64:192 64x64 21 +block 23 128:192 64x64 21 +block 24 192:192 64x64 21 +block 25 256:192 64x64 32 +block 26 320:192 32x32 -10 +block 27 320:224 32x32 -10 +block 28 0:256 32x32 -10 +block 29 32:256 32x32 32 +block 30 64:256 32x32 0 +block 31 96:256 32x32 -10 +block 32 128:256 32x32 -32 +block 33 160:256 32x32 21 +block 34 192:256 64x32 21 +block 35 256:256 64x32 21 +block 36 320:256 32x32 -10 +frame 2 +AVVideoEncParams 0 +qp 188 +nb_blocks 40 +block 0 0:0 64x64 21 +block 1 64:0 64x64 21 +block 2 128:0 64x64 11 +block 3 192:0 64x64 21 +block 4 256:0 64x64 21 +block 5 320:0 32x32 -10 +block 6 320:32 32x32 0 +block 7 0:64 64x64 0 +block 8 64:64 64x64 21 +block 9 128:64 64x64 31 +block 10 192:64 64x64 21 +block 11 256:64 64x64 11 +block 12 320:64 32x32 0 +block 13 320:96 32x32 0 +block 14 0:128 64x64 0 +block 15 64:128 64x64 21 +block 16 128:128 32x64 31 +block 17 160:128 32x64 21 +block 18 192:128 64x64 31 +block 19 256:128 64x64 21 +block 20 320:128 32x32 -10 +block 21 320:160 32x32 -10 +block 22 0:192 64x64 11 +block 23 64:192 64x64 21 +block 24 128:192 64x64 21 +block 25 192:192 64x64 21 +block 26 256:192 64x64 31 +block 27 320:192 32x32 -10 +block 28 320:224 32x32 -10 +block 29 0:256 32x32 -10 +block 30 32:256 32x32 31 +block 31 64:256 32x32 0 +block 32 96:256 32x32 -10 +block 33 128:256 32x32 -32 +block 34 160:256 32x32 21 +block 35 192:256 32x32 31 +block 36 224:256 32x32 21 +block 37 256:256 32x32 21 +block 38 288:256 32x32 31 +block 39 320:256 32x32 -10 +frame 3 +AVVideoEncParams 0 +qp 192 +nb_blocks 39 +block 0 0:0 64x64 21 +block 1 64:0 64x64 21 +block 2 128:0 64x64 11 +block 3 192:0 64x64 21 +block 4 256:0 64x64 21 +block 5 320:0 32x32 -10 +block 6 320:32 32x32 0 +block 7 0:64 64x64 0 +block 8 64:64 64x64 21 +block 9 128:64 64x64 31 +block 10 192:64 64x64 21 +block 11 256:64 64x64 11 +block 12 320:64 32x32 0 +block 13 320:96 32x32 0 +block 14 0:128 64x64 0 +block 15 64:128 64x64 21 +block 16 128:128 64x64 31 +block 17 192:128 64x64 31 +block 18 256:128 64x64 21 +block 19 320:128 32x32 -10 +block 20 320:160 32x32 -10 +block 21 0:192 64x64 11 +block 22 64:192 64x64 21 +block 23 128:192 64x64 21 +block 24 192:192 64x64 21 +block 25 256:192 64x64 31 +block 26 320:192 32x32 -10 +block 27 320:224 32x32 -10 +block 28 0:256 32x32 -10 +block 29 32:256 32x32 31 +block 30 64:256 32x32 0 +block 31 96:256 32x32 -10 +block 32 128:256 32x32 -32 +block 33 160:256 32x32 21 +block 34 192:256 32x32 31 +block 35 224:256 32x32 21 +block 36 256:256 32x32 21 +block 37 288:256 32x32 31 +block 38 320:256 32x32 -10 +frame 4 +AVVideoEncParams 0 +qp 196 +nb_blocks 70 +block 0 0:0 64x64 21 +block 1 64:0 64x64 21 +block 2 128:0 64x64 11 +block 3 192:0 64x64 21 +block 4 256:0 64x64 21 +block 5 320:0 32x32 -10 +block 6 320:32 32x32 0 +block 7 0:64 64x64 0 +block 8 64:64 64x64 21 +block 9 128:64 32x32 11 +block 10 160:64 32x32 31 +block 11 128:96 16x16 21 +block 12 144:96 16x16 21 +block 13 128:112 16x16 31 +block 14 144:112 8x8 21 +block 15 152:112 8x8 21 +block 16 144:120 8x8 21 +block 17 152:120 8x8 21 +block 18 160:96 16x16 21 +block 19 176:96 8x8 21 +block 20 184:96 8x8 21 +block 21 176:104 8x8 21 +block 22 184:104 8x8 21 +block 23 160:112 16x16 11 +block 24 176:112 8x8 21 +block 25 184:112 8x8 21 +block 26 176:120 8x8 21 +block 27 184:120 8x8 21 +block 28 192:64 32x32 21 +block 29 224:64 32x32 0 +block 30 192:96 8x8 11 +block 31 200:96 8x8 11 +block 32 192:104 8x8 11 +block 33 200:104 8x8 11 +block 34 208:96 16x16 21 +block 35 192:112 8x8 21 +block 36 200:112 8x8 21 +block 37 192:120 8x8 21 +block 38 200:120 8x8 21 +block 39 208:112 16x16 21 +block 40 224:96 32x16 0 +block 41 224:112 32x16 21 +block 42 256:64 64x64 11 +block 43 320:64 32x32 0 +block 44 320:96 32x32 0 +block 45 0:128 64x64 0 +block 46 64:128 64x64 21 +block 47 128:128 64x64 31 +block 48 192:128 64x64 31 +block 49 256:128 64x64 21 +block 50 320:128 32x32 -10 +block 51 320:160 32x32 -10 +block 52 0:192 64x64 11 +block 53 64:192 64x64 21 +block 54 128:192 64x64 21 +block 55 192:192 64x64 21 +block 56 256:192 64x64 31 +block 57 320:192 32x32 -10 +block 58 320:224 32x32 -10 +block 59 0:256 32x32 -10 +block 60 32:256 32x32 31 +block 61 64:256 32x32 0 +block 62 96:256 32x32 -10 +block 63 128:256 32x32 -32 +block 64 160:256 32x32 21 +block 65 192:256 32x32 31 +block 66 224:256 32x32 21 +block 67 256:256 32x32 21 +block 68 288:256 32x32 31 +block 69 320:256 32x32 -10 diff --git a/tools/venc_data_dump.c b/tools/venc_data_dump.c new file mode 100644 index 0000000000..3a6ce94268 --- /dev/null +++ b/tools/venc_data_dump.c @@ -0,0 +1,195 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include + +#include "libavutil/common.h" +#include "libavutil/dict.h" +#include "libavutil/error.h" +#include "libavutil/video_enc_params.h" + +#include "libavformat/avformat.h" + +#include "libavcodec/avcodec.h" + +static int decode_read(AVCodecContext *decoder, AVFrame *frame, int flush, int max_frames) +{ + const int ret_done = flush ? AVERROR_EOF : AVERROR(EAGAIN); + int ret = 0; + + while (ret >= 0 && + (max_frames == 0 || decoder->frame_number < max_frames)) { + AVFrameSideData *sd; + + ret = avcodec_receive_frame(decoder, frame); + if (ret < 0) + return (ret == ret_done) ? 0 : ret; + + fprintf(stdout, "frame %d\n", decoder->frame_number - 1); + + sd = av_frame_get_side_data(frame, AV_FRAME_DATA_VIDEO_ENC_PARAMS); + if (sd) { + AVVideoEncParams *par = (AVVideoEncParams*)sd->data; + + fprintf(stdout, "AVVideoEncParams %d\n", par->type); + fprintf(stdout, "qp %d\n", par->qp); + for (int i = 0; i < FF_ARRAY_ELEMS(par->delta_qp); i++) + for (int j = 0; j < FF_ARRAY_ELEMS(par->delta_qp[i]); j++) { + if (par->delta_qp[i][j]) + fprintf(stdout, "delta_qp[%d][%d] %"PRId32"\n", i, j, par->delta_qp[i][j]); + } + + if (par->nb_blocks) { + fprintf(stdout, "nb_blocks %d\n", par->nb_blocks); + for (int i = 0; i < par->nb_blocks; i++) { + AVVideoBlockParams *b = av_video_enc_params_block(par, i); + + fprintf(stdout, "block %d %d:%d %dx%d %"PRId32"\n", + i, b->src_x, b->src_y, b->w, b->h, b->delta_qp); + } + } + } + + av_frame_unref(frame); + + if (max_frames && decoder->frame_number == max_frames) + return 1; + } + + return (max_frames == 0 || decoder->frame_number < max_frames) ? 0 : 1; +} + +static int decoder_init(AVFormatContext *demuxer, int stream_idx, + AVCodecContext **dec, AVDictionary **opts) +{ + const AVCodec *codec; + int ret; + + if (stream_idx < 0 || stream_idx >= demuxer->nb_streams) + return AVERROR(EINVAL); + + codec = avcodec_find_decoder(demuxer->streams[stream_idx]->codecpar->codec_id); + if (!codec) + return AVERROR_DECODER_NOT_FOUND; + + *dec = avcodec_alloc_context3(codec); + if (!*dec) + return AVERROR(ENOMEM); + + ret = avcodec_open2(*dec, NULL, opts); + if (ret < 0) + return ret; + + return 0; +} + +int main(int argc, char **argv) +{ + AVFormatContext *demuxer = NULL; + AVCodecContext *decoder = NULL; + AVDictionary *opts = NULL; + + AVPacket *pkt = NULL; + AVFrame *frame = NULL; + + unsigned int stream_idx, max_frames; + const char *filename, *thread_type = NULL, *nb_threads = NULL; + int ret = 0; + + if (argc <= 3) { + fprintf(stderr, "Usage: %s [ ]\n", argv[0]); + return 0; + } + + filename = argv[1]; + stream_idx = strtol(argv[2], NULL, 0); + max_frames = strtol(argv[3], NULL, 0); + if (argc > 5) { + nb_threads = argv[4]; + thread_type = argv[5]; + } + + ret = av_dict_set(&opts, "threads", nb_threads, 0); + ret |= av_dict_set(&opts, "thread_type", thread_type, 0); + ret |= av_dict_set(&opts, "export_side_data", "venc_params", 0); + + ret = avformat_open_input(&demuxer, filename, NULL, NULL); + if (ret < 0) { + fprintf(stderr, "Error opening input file: %d\n", ret); + return ret; + } + + ret = decoder_init(demuxer, stream_idx, &decoder, &opts); + if (ret < 0) { + fprintf(stderr, "Error initializing decoder\n"); + goto finish; + } + + pkt = av_packet_alloc(); + frame = av_frame_alloc(); + if (!pkt || !frame) { + ret = AVERROR(ENOMEM); + goto finish; + } + + while (ret >= 0) { + ret = av_read_frame(demuxer, pkt); + if (ret < 0) + goto flush; + if (pkt->stream_index != stream_idx) { + av_packet_unref(pkt); + continue; + } + + ret = avcodec_send_packet(decoder, pkt); + if (ret < 0) { + fprintf(stderr, "Error decoding: %d\n", ret); + goto finish; + } + av_packet_unref(pkt); + + ret = decode_read(decoder, frame, 0, max_frames); + if (ret < 0) { + fprintf(stderr, "Error decoding: %d\n", ret); + goto finish; + } else if (ret > 0) { + ret = 0; + goto finish; + } + } + +flush: + avcodec_send_packet(decoder, NULL); + ret = decode_read(decoder, frame, 1, max_frames); + if (ret < 0) { + fprintf(stderr, "Error flushing: %d\n", ret); + goto finish; + } + ret = 0; + +finish: + av_dict_free(&opts); + av_packet_free(&pkt); + av_frame_free(&frame); + avcodec_free_context(&decoder); + avformat_close_input(&demuxer); + + return ret; +}