I found that YV12 and NV12 are garbled too - on both import and export.
I have been assured by Adobe they have it right so I don't know what the deal is.
Ok, I see what I did wrong.
I used the sample plugin project that came with the CS6 SDK. In their sample code (SDK_File.cpp), they use the following call to access a packed-pixel framebuffer:
mySettings->ppixSuite->GetPixels( ... ); // only works for PackedPixel formats (not planar!)
It turns out that the standard PrPixSuite only supports the packed-pixel formats (non-planar.) For the 'new' planar formats (PrPixelFormat_YUV_420_*), you must use the new PrPix2Suite. It's briefly mentioned in the SDF User's Guide:
"PPix 2 Suite
A call to get the size of a PPix. Starting in version 2 of this suite, introduced in CS4, there is a new
GetYUV420PlanarBuffers call to get buffer offsets and rowbytes of YUV_420_MPEG2 pixel formats. See PrSDKPPix2Suite.h."
After changing the struct "mySettings", to acquire & store the 'kPrSDKPPix2Suite' suite, I changed the above call to this:
mySettings->ppix2Suite->GetYUV420PlanarBuffers( ... ); // for planar PixelFormats only!
After this change, my plugin properly reads the 3 separate Y/U/V pixel-planes!
At least I know now why it didn't work for me.