MATLAB: How to use the MMREADER function to properly read DIVX coded AVI files in MATLAB 7.5 (R2007b)

#divxcodecMATLABmmreaderselectselection

When I execute the following code:
filename = 'seq3.avi';%video file encoded with DivX 5.0
avi_obj=mmreader(filename);
no_frame=get(avi_obj,'NumberOfFrames');
figure
for i=1:no_frame
img=read(avi_obj,i);
imshow(img),title(sprintf('Frame %d',i));
drawnow; pause(0.5);
end
I got a garbled image.

Best Answer

The problem of garbled image display is related to the codec being employed. MATLAB does not have control over which codec is used for the decoding. We simply let windows choose the most appropriate codec for us.
DivX® 5.0 Codec causes users to see garbled images when loading AVI files in MATLAB using MMREADER function. There are several fixes and updates to DivX® Codecs and it is important to install the latest codec to prevent undesirable results. The latest updates of this third party codec can be found at:
Since we do not have a control on which codec is being employed, it is also important to make sure that the previous versions of DivX® Codecs are completely uninstalled and removed from the system and registry. This ensures that the older versions are not called.
The AVIREAD function can be employed instead of MMREADER as a possible work-around:
filename = 'seq3.avi';
avi_obj=aviread(filename);
no_frame=size(avi_obj,2);
figure
for i=721:no_frame
img=avi_obj(i).cdata;
imshow(img),title(sprintf('Frame %d',i));
drawnow; pause(0.5);
end