There is a lot going on with the SMW camera (that's why it's design is so good, and hence the video).
To start, you can use an invisible helper "camera" sprite with the scroll to behavior (I'm guessing you already have this part).
After that, it is just a matter of setting target positions relative to the player sprite. You might want to make use of the lighttween or moveto plugins. A simple lerp over time should do fine as well, as long as you use it properly.
To move over time at a constant rate without plugins, do not lerp using a dynamic origin based on the position of the sprite:
You'll need a set of variables to store the originx and originy when you change states (facing left, facing right, flying, swimming ect.). I recommend using a second invisible sprite as the "target". The target does not move over time, it is positioned instantly and is always a set distance away from the player depending on the current state .
Use a timer behavior to determine how long you want it to take the camera to get to the target position. This timer will be triggered upon changing states.
Then you will lerp(originx, targetx, object.timer.CurrentTime/object.timer.Duration) and likewise for y.
Upon the timer expiring (onTimer condition), you can simply pin or set the camera position to the target position.