Sunlight can deteriorate fabric and fade dyes very quickly.
The sure-fire solution for odors like tobacco, mildew or pet stains is ammonia.
I use it in the laundry because it strips detergent residue and skin oils and leaves fabrics completely fresh and clean. I use about a half a cup in a load, although for really strong odors, I might use up to two cups.
I use it in a carpet steam cleaner and it stinks to high heaven for ten or twenty minutes, but it cleans oily stains (coffee spills and skin oils) and disinfects and leaves everything clean without perfumes. :)