2017-11-30 22 views
-2

私はコーディングとデコードのプロセスでは、コーディングステージは非常によく動作し、私のエンコードされたH.264ファイルを正しく読み取ることができます、問題は私のデコードプロセスと主に変換I420からARGBまで、これを修正するのに役立つことができます。Delphi OpenH264デコード

/* 
* [ IN ] SourceData : the encoded frame(s) 
* [ OUT ] pTargetbuffer : the Target buffer 
* [ OUT ] width 
* [ OUT ] height 
*/ 
{ 

    int iStride[2]; 
    init(); 

     ... the decoding routine : pData contains the YUV 

     if (ret != dsErrorFree) { 

      return -1; 
     } 
     if (!m_sBufferInfo.iBufferStatus) { 
      return -2; 
     } 

    LWidth = m_sBufferInfo.UsrData.sSystemBuffer.iWidth; 
    LHeight = m_sBufferInfo.UsrData.sSystemBuffer.iHeight; 
    *width = LWidth; 
    *height = LHeight; 

     iStride[0] = m_sBufferInfo.UsrData.sSystemBuffer.iStride[0]; 
     iStride[1] = m_sBufferInfo.UsrData.sSystemBuffer.iStride[1]; 



     return 0; 
} 

、ここで私のDelphiの実装です:

Image.Picture.Bitmap.PixelFormat := pf24bit; 
Image.Picture.Bitmap.Width := 320; 
Image.Picture.Bitmap.Height := 240; 
    ... 
Result:=H264Decoder_decode(FEncodedBuffer, 
          Image.Picture.Bitmap.ScanLine[Image.Picture.Bitmap.Height-1], 
          EncodedBufferSize,LWidth,LHeight); 

if result=0 then Image.Repaint; 

非常に多くのおかげで

はここ(OpenH264ラッパーDLLから)私のデコード機能です。

答えて

0

多くのおかげで、私は問題を解決しました。問題は、ちょうど私が設定した

Image.Picture.Bitmap.PixelFormat := pf24bit; 

しかし、正しいPixelFormat is the pf32bit

+0

** OpenH264 **の完全なDelphiバージョンを提供できますか?いくつかのリポジトリにGitHubやダウンロードする他の場所にアップロードすることができますか?私は非常にこれを必要としています:-) –

+0

私は[このモデル](http://www.dobestのようなデバイスの画面のリアルタイムストリームを受信したいDelphi + Android(Java)プロジェクトの例で働いています.me/blog/2016/06/17/Android%E5%B1%8F%E5%B9%95%E7%9B%B4%E6%92%AD%E6%96%B9%E6%A1%88 /しかし、あなたが上記の質問のように「TImage」でDelphiを受け取って欲しいです。 –

0

ストライドサイズ(int dst_stride_frame)は、H264Decoder_decode()にはwidth * 3である必要があります。

これは、1ピクセルが3バイト(24ビット/ 8)の24ビットRGBイメージに変換したいからです。

width * 2を入力すると、変換後の画像には2/3のデータしか含まれず、画像になります。 32ビットRGBに変換する場合は、width * 4が有効になります。

+0

私は幅 'に'幅* 2 'を変更した場合に非常に多くのおかげで、* 3'私もそのAVを取得します。 – randydom