Just for the sake of making this code shorter and easier to follow, I'd be tempted to do this with a loop, like this:

    static const char *demosaic_name[] = { "linear", "VNG", "PPG", ..., NULL };
    int d;
    for (d = 0;  demosaic_name[d];  ++d)
        if (demosaic == demosaic_name[d])
            break;
    if (demosaic_name[d])
        m_processor.imagedata.params.user_qual = d;
    else {
        error ...
    }