Silent pictures contain the complete image buffer delivered by Canon firmware (including black bars), while MLV frames contain a cropped section, not including black bars. Last time I've checked, mlv_dump was handling both types of files correctly (edit: tested two samples linked earlier, they both work fine with mlv_dump).
The tricky part is that raw_info structure is copied directly from current LiveView configuration - that is, it includes the active area offsets for a complete LiveView frame. As the MLV video frame (from mlv_rec/mlv_lite) is cropped, its active area offsets should be updated, and - since the black bars are not normally included in the recorded image - those offsets would be normally 0.
In mlv_dump, this is currently handled as a special case: if the frame size from the RAWI header (xRes x yRes) is smaller than the complete raw frame size (raw_info.width x height), that must be a cropped section of the entire frame. Since the black bars are not included in the recorded image, active_area is assumed to cover the entire recorded frame (that is, active_area offsets must be rewritten - "zeroed out" - by the MLV converter). If the frame size from RAWI matches the one from raw_info, that means the recorded image contains the complete raw frame, including black bars, so the active area declared in raw_info is considered valid (and should be used for conversion).
The offset fields from RAWC are supposed to show where the complete LiveView frame (possibly binned/cropped by crop_rec, x5 zoom, Canon's 1080p / 720p / crop mode etc) is placed, relative to a full-res image (FRSP or CR2), but these are not implemented yet.
The position of the cropped image (saved by mlv_rec/mlv_lite), relative to the complete LiveView frame, is given by VIDF cropPosX/Y (restrictions: we can only crop multiples of 8 pixels horizontally - because of 14-bit packing - and multiples of 2 pixels vertically, in order to keep the same Bayer layout). The "pan" offsets (panPosX/Y) were meant for smooth digital panning within a complete LiveView frame frame (
not implemented yet).
In any case, I don't see a good reason for changing the silent picture code - it works as expected, if you ask me. Changing the active_area offsets should have been done in mlv_rec/mlv_lite from the very beginning, rather than requiring MLV converters to rewrite these offsets - but now it's probably too late to make this change.
In other words, the active area metadata in a silent picture MLV is correct, while the one from a mlv_rec/lite MLV is invalid and must be "zeroed out" (recomputed from scratch) by the MLV converter. I don't see a good way out of this, other than using the above workaround (special case) in MLV converters.