2016-09-13 13 views
6

私のアプリでは、画像のピクセル操作をしています。 マイコードはTHISの例に基づいています。OpenGL ES 2はAndroid API23で動作しません

私が作った唯一の変更は、グレースケールにFRAGMENT_SHADERを変更することであり、それは次のようになります。私は記録後、銀河S7機器からの映像を記録しました :

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"; 

問題私は記録されたビデオを撮って、2つの異なるデバイス(Galaxy S7とGalaxy s3)から最初のフレームを読み込んでいましたが、ピクセル値がこれらのデバイス間で全く異なることがわかりました。

誰かがなぜそれが起こるのか知っていますか?私のアルゴリズムはこの違いのために失敗したので、私はこの問題を解決するために何ができますか?

更新:

これは私が持っているdiferencesの一例です。

Gaaxy S3:マトリックスの パート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,213,214,213,213,214,214 、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,208,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

0以外のピクセル数:1632816

0123全画素の

合計:3.1834445E8

ギャラクシーS7:ギャラクシー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,162, 非ゼロピクセルの10数:全画素の1063680

合計:1.6593408E8

アップデート2:

私は画像を受信したことがわかったが、絶対に台無しに、しかしビデオはよく記録されています。 これはギャラクシーS3から良いイメージです、私はここで何が起こっているか全く見当がつかない enter image description here

そして、これは私がギャラクシーS7(同じフレーム#) enter image description here

から持っているイメージです最後のイメージはすべてのマシュマロデバイス(Galaxy S6、S7、Huawei)で同じであることがわかります

+0

?違いを示すスクリーンショットを追加することも役立ちます。 –

+0

私はそれを更新します、ありがとう – user2235615

+0

また、あなたはどのようにビデオを録音しているのですか? – codetiger

答えて

1

解決策を見つけるのは一週間かかりましたが、それが見つかりました!

私が言ったように、私はbigflakeの例に基づいていました。この例ではフレームを反転するオプションがあり、例では何が行われたのかが示されています。

反転を偽に変更することで問題は解決しました。

フレームに逆転する理由を説明できる人がいれば、本当に感謝しています。なぜ、それがデフォルトで「true」に設定されたのですか?

すべてのあなたの助けのためのThannks!

これは、それが十分明確ではなかった場合、私は行った変更である:あなたが2つのデバイス間の画素値の差について詳しく説明してください可能性があり

outputSurface.drawImage(false); 
関連する問題