X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=services%2Fsurfaceflinger%2FSurfaceFlinger.cpp;h=a9fa1ef424437829e24e0dbc5bbaa7ffdcb4a882;hb=812183d7fd0c29ae094a46304c7010bf3935b78c;hp=7b19a4c7d55aeb5099e1c6843f9dd77ccef60bb9;hpb=92f292aea48bb6c09b76ecd1f581141b9037be06;p=android-x86%2Fframeworks-native.git diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 7b19a4c7d5..a9fa1ef424 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -2169,6 +2169,19 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy, if (UNLIKELY(uint32_t(dpy) >= DISPLAY_COUNT)) return BAD_VALUE; + // make sure none of the layers are protected + const Vector< sp >& layers(mVisibleLayersSortedByZ); + const size_t count = layers.size(); + for (size_t i=0 ; i& layer(layers[i]); + const uint32_t z = layer->drawingState().z; + if (z >= minLayerZ && z <= maxLayerZ) { + if (layer->isProtected()) { + return INVALID_OPERATION; + } + } + } + if (!GLExtensions::getInstance().haveFramebufferObject()) return INVALID_OPERATION; @@ -2217,8 +2230,6 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy, glClearColor(0,0,0,1); glClear(GL_COLOR_BUFFER_BIT); - const Vector< sp >& layers(mVisibleLayersSortedByZ); - const size_t count = layers.size(); for (size_t i=0 ; i& layer(layers[i]); const uint32_t z = layer->drawingState().z;