CONFIG_F322_OBUER_REFRESTRICT: Unable to exercise restricted prediction
Working with restricted switch frame, it does not appear to be possible to exercise the restricted prediction functionality. My understanding is that this is a key difference between the restricted switch frame and other tools, i.e. "When RefRestrict[i] is true, only pixel values of the corresponding reference frame can be used for further prediction" (Section 3.2 of E322).
For example, the command avmenc --limit=4 --lag-in-frames=0 --cpu-used=0 --end-usage=q --qp=63 --sframe-dist=2 --sframe-mode=0 -o output.bin ParkJoy_480x270_50.y4m generates the following output:
baseline_gf_interval = 3
POC: 0 [ KEY ][Level:1][Q: 21]: 95220 Bytes, 835122.0ms [ -1, -1, -1, -1, -1, -1, -1,] 480x270
POC: 1 [INTER][Level:2][Q: 63]: 25297 Bytes, 667460.1ms [ 0, 0, 0, 0, 0, 0, 0,] 480x270
POC: 2 [ S ][Level:2][Q: 63]: 47134 Bytes, 732693.5ms [ -2, -2, -2, -2, -2, -2, -2,] 480x270
POC: 3 [INTER][Level:2][Q: 63]: 46084 Bytes, 739756.9ms [ 2, 2, 2, 2, 2, 2, 2,] 480x270
Bitrate(kbps) | Encoding time (FPS)
Summary: 21373.500000 | 2975.0s (0.0 fps)
By comparison, the command avmenc --limit=4 --lag-in-frames=0 --cpu-used=0 --end-usage=q --qp=63 --sframe-dist=2 --sframe-mode=0 --explicit-ref-frame-map=1 -o output.bin ParkJoy_480x270_50.y4m gives the following output:
baseline_gf_interval = 3
POC: 0 [ KEY ][Level:1][Q: 21]: 95220 Bytes, 828077.0ms [ -1, -1, -1, -1, -1, -1, -1,] 480x270
POC: 1 [INTER][Level:2][Q: 63]: 25298 Bytes, 664801.1ms [ 0, 0, 0, 0, 0, 0, 0,] 480x270
POC: 2 [ S ][Level:2][Q: 63]: 47134 Bytes, 725904.5ms [ -2, -2, -2, -2, -2, -2, -2,] 480x270
POC: 3 [INTER][Level:2][Q: 63]: 46085 Bytes, 732740.9ms [ 2, 2, 2, 2, 2, 2, 2,] 480x270
Bitrate(kbps) | Encoding time (FPS)
Summary: 21373.700000 | 2951.5s (0.0 fps)
POC 3 is the frame of interest, and I see two things. The first is that this frame appears to be intra coded. This may be related to the issue reported as #1332 (closed) . The second is that my understanding is that POC3 should be able to predict from POC0 and POC1 through the use of explicit signaling of the frame map. However, my inspection from the encoder is that this is not supported. And adding an override to reference POC0 and/or POC1 results in the encoder coding POC3 using intra-prediction.