Sebastian
unread,Dec 3, 2024, 7:14:51 PM12/3/24Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to gav1-devel
Hi there,
I'm currently doing a student project where the goal is to extract useful informations out of AV1 bitstreams. Specifically, I'd be interested in getting the residuals/motion vectors per decoded block and then process these blocks further (e.g. for visualization like in AOMAnalyzer).
I've used the gav1_decode example and followed the decoding process, with the following call stack:
DecodeTiles
-> DecodeTilesNonFrameParallel
-> ProcessSuperBlockRow
-> ProcessSuperBlock
-> ProcessPartition
-> ProcessBlock
-> ComputePrediction
-> Residual
-> TransformBlock
-> ReadTransformCoeffcient
-> ReconstructBlock
-> Reconstruct
Now from my understanding is that the entire frame is divided into 4x4 blocks which then get decoded (by a DFS traversal over the superblocks and checking if it already has been decoded). The inverse transforms are applied row/column wise and the result is written back into the residual buffer, where each block holds a reference to.
I still have problems to understand where the residuals are stored and in what format. Before the call to reconstruct, are there only the residuals in the block.residual buffer (and the inverse transform is applied to them)? And since there are different possible plane sizes, how can one access the individual values?
I'd be very happy if someone could help me and provide additional insights.
Best,
Sebastian