2016-09-13 26 views
6

Trong ứng dụng của tôi, tôi đang thực hiện một số thao tác pixel ảnh. Mã của tôi dựa trên ví dụ THIS.OpenGL ES 2 không hoạt động trên Android API23

Sự thay đổi duy nhất mà tôi đã thực hiện là thay đổi FRAGMENT_SHADER đến một màu xám và nó trông như thế này:

private static final String FRAGMENT_SHADER = 
     "#extension GL_OES_EGL_image_external : require\n" + 
     "precision mediump float;\n" +  // highp here doesn't seem to matter 
     "varying vec2 vTextureCoord;\n" + 
     "uniform samplerExternalOES sTexture;\n" + 
     "void main() {\n" + 
     " vec4 tc = texture2D(sTexture, vTextureCoord);\n" + 
     " gl_FragColor.r = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" + 
     " gl_FragColor.g = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" + 
     " gl_FragColor.b = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" + 
     "}\n"; 

Vấn đề: Tôi đã ghi lại một đoạn video từ điện thoại Galaxy s7, sau khi ghi hình Tôi đã quay video và tôi đã đọc khung hình đầu tiên từ 2 thiết bị khác nhau (Galaxy S7 và Galaxy s3), tôi thấy rằng các giá trị pixel hoàn toàn khác nhau giữa các thiết bị đó.

Có ai đó biết tại sao điều đó xảy ra không? và tôi có thể làm gì để giải quyết vấn đề này, vì thuật toán của tôi không thành công do sự khác biệt này?

Cập nhật:

Đây là ví dụ về các diferences Tôi đã có.

Gaaxy S3: Một phần của ma trận 213, 214, 212, 214, 216, 214, 213, 212, 212, 212, 213, 214, 214, 214, 213, 213, 214, 214 , 214, 214, 212, 213, 212, 213, 212, 214, 214, 212, 212, 210, 211, 210, 211, 210, 211, 211, 214, 211, 214, 213, 213, 214, 214 , 216, 216, 216, 215, 215, 216, 212, 213, 213, 214, 213, 213, 212, 211, 209, 209, 207, 208, 208, 210, 211, 209, 207, 209, 210 , 217, 219, 216, 209, 209, 210, 210, 210, 211, 209, 207, 205, 205, 206, 210, 210, 220, 211, 202, 210, 211, 206, 206, 209, 210 , 211, 213, 219, 222, 216, 217, 217

đếm số không pixel: 1632816

Sum của tất cả các điểm ảnh: 3.1834445E8

Galaxy S7: cùng một phần của Matrix như Galaxy 3 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164 , 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164 , 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164 , 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164 , 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164

đếm pixel không số không: 1063680

Sum của tất cả các điểm ảnh: 1.6593408E8

Update2:

tôi thấy rằng hình ảnh nhận được hoàn toàn bị hủy hoại, nhưng đoạn video ghi lại tốt. Đây là hình ảnh tốt từ Galaxy S3: enter image description here

Và đây là hình ảnh tôi đã nhận được từ Galaxy S7 (Same khung #) enter image description here

Tôi không có ý tưởng ở tất cả những gì đang xảy ra ở đây, nhưng tôi biết rằng hình ảnh cuối cùng là giống nhau cho tất cả các thiết bị Marshmallow (Galaxy S6, S7 và Huawei)

+0

bạn có thể xin hãy giải thích về sự khác biệt giữa các giá trị điểm ảnh giữa 2 thiết bị? Thêm ảnh chụp màn hình cho thấy sự khác biệt cũng sẽ hữu ích. –

+0

Tôi sẽ cập nhật nó, Cảm ơn – user2235615

+0

Ngoài ra, hãy cho chúng tôi biết thêm thông tin về cách bạn ghi lại video? – codetiger

Trả lời

1

Ok sau một tuần làm việc chăm chỉ để tìm ra giải pháp, nó đã được tìm thấy!

Như tôi đã nói tôi dựa trên ví dụ về bông hoa và trong ví dụ này, có một tùy chọn để đảo ngược khung và trong ví dụ về những gì đã được thực hiện.

Bằng cách thay đổi nghịch đảo thành sai, sự cố đã được khắc phục.

Tôi thực sự sẽ đánh giá cao nếu ai đó có thể giải thích cho tôi lý do có đảo ngược khung hình và tại sao nó được quyết định đặt thành "true" theo mặc định.

Thannks cho tất cả sự giúp đỡ của bạn!

Đây là sự thay đổi mà tôi đã thực hiện nếu nó không đủ rõ ràng:

outputSurface.drawImage(false); 
Các vấn đề liên quan