問題タブ [cvpixelbuffer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - AVAssetWriterInputPixelBufferAdaptor から作成された背景が透明なビデオは、黒の背景になります
0.01 秒ごとにレンダリング コンテキストで画面イメージをキャプチャしてビデオを作成しています。背景が透明なキャプチャ画像。しかし、AVAssetWritter、AVAssetWriterInputPixelBufferAdaptor を使用してこれらの画像でビデオを作成すると、透明な背景が黒色に変わります。
私は次のコードを使用しています:-
canvasAssetWriter = [[AVAssetWriter alloc] initWithURL:[self tempFileURL:@"output.mp4"] fileType:AVFileTypeQuickTimeMovie エラー:&error];
CVPixelBufferRef pixelBuffer = NULL; CGImageRef cgImage = CGImageCreateCopy([capturedImage CGImage]);
ios - AVAssetWriter 使用時の不明な基になる OSStatus エラー -16364
アプリの 1 つのビデオ エクスポート機能を構築しています。本質的に、このビデオは、異なる (短い) 期間持続する 6 つの異なる画像のうちの 1 つのシリーズです。
さまざまな期間の 283 枚の画像を含むものをエクスポートすると、エクスポートは正常に機能しますが、803 枚のうちの 1 つをエクスポートしようとすると、恐ろしい「操作を完了できませんでした」というエラーが表示されます (別名「何が爆発したのかわかりません。 AVFoundation のエラー報告はひどいものです」)。
my を使用して 754 番目のフレーム (常に 754 番目のフレーム) を追加しようとするとAVAssetWriterInputPixelBufferAdaptor
、appendPixelBuffer:withPresentationTime:
が返さNO
れ、AVAssetWriter
のステータスが失敗し、そのエラーは次のようになります。
私の人生では、その根本的なエラー ( OSStatus
-16364) が何であるかを理解することはできません。www.osstatus.comは見当もつかないし、macerror
そのようなものは存在しないと言っているし、SDK ヘッダーを検索するためのこのPython スクリプトは何も見つけられない. また、いくつかの OSStatus エラーのような 4 文字のコードでもありません (これをチェックするのに失敗した場合を除きます)。
私が見つけた「操作を完了できません」というエラーの一般的な原因をすべて除外しました。ファイルシステムのアクセス許可や上書きとは関係ありません。 の 2 つの呼び出しがappendPixelBuffer
同じプレゼンテーション時間を持つことはありません。
これはメモリの問題ではなく (ビデオのエクスポート中、メモリ使用量は 165MB で一定です)、CPU は 3% 近くにとどまります。
重要な場合は、毎回 sCVPixelBuffer
から新しい画像を作成するのではなく、6 つの画像に対して同じ 6 s を何度も再利用します。UIImage
これはパフォーマンスに役立つようで、毎回新しいものに変更しても何も変わらないように見えますが (代わりにフレーム 753 で失敗することを除いて)、誰にもわかりません。
誰かがこれが何であるか考えていますか?
ios - CVPixelBuffer 内のピクセルを適切に処理する方法は?
簡単な質問は次のとおりです。 のピクセル値に対処する式は何CVPixelBuffer
ですか?
a をフラットなバイト配列に変換しようとしているのですCVPixelBuffer
が、いくつかの奇妙な点に気付きました:CVPixelBuffer
は a から取得されますCMSampleBuffer
。幅と高さは852x640
ピクセルです。合計ピクセルでは、ピクセルあたりのバイトを考慮するとバイト545280
が必要になります。2181120
4
最初の奇妙なことは、同じ行ごとにバイトCVPixelBuffer
が返されることです。これは、ピクセルに十分なスペースです。これらの追加のピクセルはどこから来るのでしょうか? 最終イメージの 1 行がピクセル幅だけで、実際には の行にピクセルがある場合、どのバイトをコピーする必要があるかをどのように知ることができますか? または、未使用のバイトはどれですか? ところで、それらは未使用ですか?3456
864
12
852
864
CVPixelBuffer
もう 1 つのことは、報告されるデータ サイズCVPixelBuffers
(2211848
バイト数) です。ここで、3456
1 行あたりのバイト数に行数を掛けると、バイト数640
になり2211840
ます。8
繰り返しになりますが、追加のバイトが残っています。それらの8
バイトの問題は何ですか?未使用ですか?彼らは最後にいますか?
その問題に光を当てるアドバイスは大歓迎です、ありがとう.
ios - iOS でピクセル バッファの一部を白いピクセルに置き換える
iPhone カメラを使用してライブ ビデオをキャプチャし、オブジェクト認識を行うネットワークにピクセル バッファを供給しています。AVCaptureSession
関連するコードは次のとおりです(これはかなり標準的なため、設定などのコードは投稿しません。)
次に、ネットワークはsourceStartAddr
、width
、height
、sourceRowBytes
&doReverseChannels
を入力として受け取ります。
私の質問は次のとおりです。画像データの一部をすべて白い「ピクセル」で置き換えまたは削除する最も簡単で効率的な方法は何ですか? ピクセル バッファ データの一部を直接上書きすることは可能ですか。
私はこのピクセル バッファがどのように機能するかについて非常に初歩的なことしか理解していないので、ここで非常に基本的なことが抜けていたら申し訳ありません。私が Stackoverflow で見つけた私のものに最も関連する質問は、ビデオ フレームにテキストを追加するためにaが使用されるthis oneでした。EAGLContext
これは、単一の画像に対してのみこの置換を必要とする私の目的では実際に機能しますが、この手順をすべてのビデオ フレームに適用するとパフォーマンスが低下すると思います。別の方法があるかどうかを確認したいと思います。ここで何か助けていただければ幸いです。
ios - CVPixelBufferCreate で CVPixelBufferRef を複製/コピーする
CVPixelBufferRef
コピーの値を使用して元のピクセル バッファーをビット単位で操作できるようにするには、a のコピーを作成する必要があります。CVPixelBufferCreate
、または でこれを達成できないようですCVPixelBufferCreateWithBytes
。
この質問によると、memcpy() でも実行できる可能性があります。ただし、これがどのように達成されるかについての説明はありません。また、どの Core Video ライブラリ呼び出しが必要になるかについても説明されていません。