Chipsy's peer comment is excellent. For video I'd:
1. write an MPEG-4 parser -- this is much simpler than you probably think;
2. decode the H.264 metadata;
3. decode the H.264 picture data and write it to files, one per frame -- do not be ashamed to use an existing decoder!
4. put these frames back into a MJPEG, for instance;
5. try your hand at developing a DEAD SIMPLE I-frame only video codec, using e.g. zip for the frames.
This could teach you if you are interested in video without too much conceptual overhead. I had a friend and coworker who did #5 in Ruby, so don't think you need to get into GPU vectorization and signals theory right away.
1. write an MPEG-4 parser -- this is much simpler than you probably think;
2. decode the H.264 metadata;
3. decode the H.264 picture data and write it to files, one per frame -- do not be ashamed to use an existing decoder!
4. put these frames back into a MJPEG, for instance;
5. try your hand at developing a DEAD SIMPLE I-frame only video codec, using e.g. zip for the frames.
This could teach you if you are interested in video without too much conceptual overhead. I had a friend and coworker who did #5 in Ruby, so don't think you need to get into GPU vectorization and signals theory right away.