Dave,
I was not considering the out of standard remotes, which indeed are equally important.
I agree that raw codes should be used for more compatibility. They are more reliable most times and supposedly will work with any remote.
Be aware however, that the IR library that you are using may have a maximum length limitation for saving raw codes. For example, Air Conditioner remotes usually send the full config every time you press a button (kind of a sync between what you see on the remote LCD and the A/C unit). These may be very large packets of data if we are looking only to the bytes. But then it is worse, as you are tracking bits instead of bytes, then the size grows a lot. Add to it that most over the air protocols will have a single bit composed by two bits (just like I showed in the graphic) and hence there are more raw data to save.
So, if instead of 68 bit times you have for example 680? Would it still be able to save it?
Regarding the use of a SD card (which is the reason I started this discussion), I still would like to keep it away from my circuit just for simplicity. But I agree that it has its advantages. Just like you guys, I'll prioritize compatibility.
One last comment since you mentioned the limited size of memory in the arduinos. For saving only raw codes, maybe you can fire away the IRremote lib. I'll explain.
I did not get into details, but I suppose the lib has some significant amount of code (and presumably use of ram) to deal with each protocol, etc. But for saving raw codes, all you need is to monitor the state of the input pin of the arduino (which is connected to the output pin of the IR receiver chip) and use the timer to count the time between each change of state. The timer is a hardware feature on these microcontrollers and it counts time infinitely.
You'll attach an interrupt for that pin and keep looping until the current pin state is different from the previous. Once a change has been detected, you will have an interrupt that calls a function.
On the function that has been called, you will reset the timer because the pin has changed its state and you need to start counting the next one. And you will also save the time elapsed since the last state change in an array.
Once an idle state has been detected, ie a lot of time has passed without any changes to the pin state, you are finished and can save the entire array to the card.
What I mean, is that maybe its better to write you own functions to save the raw data because you don't need all the extra stuff that the library potentially have.
Thanks for the discussion and please keep us updated!