ハスマルチメディア(MPP)の開発(3) - ビデオ出力(VO)およびビデオデコーダ(VDEC)

はじめに:

    ビデオ入力(VI)、ビデオ処理(VPSS)、ビデオエンコーダ(VENC)、ビデオデコーダ(VDEC)、ビデオ出力(VO)、ビデオ検出解析(VDA)、オーディオ:プラットフォーム(MPP)を処理ハースのマルチメディアに分割されています入力(AI)、オーディオ出力(AO)、オーディオエンコーダ(AENC)、オーディオデコーダ(ADEC)、エリア管理(領域)モジュール。紹介ビデオデコーダ(VDEC)とビデオ出力モジュール(VO)。
    VOは密接にVOを使用する前に、その表示装置に関連して、方法は、あなたは、インターフェイス表示装置とタイミング情報に注意する必要があります。

説明:

開発ボードの構成を使用してテストします。

  • ハウス:Hi3521A
  • AD:NVP6134CのA
  • カメラ:720P、1080P
  • ディスプレイ:HDMIバス、1080P画面。

Hi3521A VO:

  • ハイビジョン機器DHD0、ビデオ層VHD0は、16枚のスクリーンをサポートします。
  • サポートPIP(ピクチャーインピクチャー)1画面にオーバーレイ、PIP画面ビデオレイヤーサポートアップ
  • 最大出力タイミング:60または1600×1200 @ 1920×1080 @ 60

HDMI:

    ハスHDMI機器の開発、基本的な内容は、公式の「HDMI開発リファレンスの.pdf」を参照してください:
    HDMIオーディオは、個別に出力することはできませんビデオ出力に依存しなければならない、とHDMI VOクロックからクロック、そうインターフェース、VOを作ることができ、その後HDMIインタフェースを呼び出し、その後、オーディオおよびビデオ出力を設定するには、シーケンスのニーズを呼び出します。またHi35xxチップ内蔵HDMI HDCP、CEC機能をサポートしていません。
    
    ドライバが正しくロードされた後、SAMPLE_COMM_VO_HdmiStartダイレクトコール機能はHDMIインタフェースを起動することができます。
    
    HDMI端子は通常のGPIOポートに多重化することができますので、HDMIをデバッグするときに、第1のHDMI端子の設定を確認することができたときに、そのデバッガが意味をなさない場合は注意してください。

ビデオデコーディング:

    ここでのVLビデオ入力は、直接H264 H264ビデオストリームにシミュレーションファイルを使用して、関連付けられていません、

(A)データ・ストリーム

  • ビデオとパッケージの一般的なビデオとオーディオの中では、今主流のビデオ圧縮フォーマットは、H264、H265、MGPEG形式を使用していました。ここで私たちはH264形式。
  • データ・ストリームを生成するために、H264 H264 1080Pを持つファイルであるハスのサンプル。
  • メインデータは、各フレームデータH264の開始位置と終了位置を見つけるためにシミュレーションを流れ、その後、内側に行くためにデコーダへの完全なデータを送信します。
  • 完全なデータを見つけるには二つの方法があります

(2)1バイトのデータを読み出します

    読む1つの自分のデータ、フレームの開始位置を見つけ、その後、次のフレームの先頭を見つけ、真ん中は完全なデータであります

  • 利点:プリセットサイズのデータ​​なし
  •  短所:データは、時間のかかるによって読み取られます。

(3)データの一方の大きいパケットより    

ビデオファイルの解像度に応じて、データ空間の最大サイズを設定するために、時間値は、最小空間としてファイルから読み出します。その時から、処理することなく、パケットの残りを読むために次の位置の終わりまでに読んだときに、フレームの開始位置と終了位置を見つけるために、データをパッケージ化します。

  • メリット:速く読むファイル
  • 短所:事前に知る必要最大データ空間

次のようにハースsample_vdec方法2は、使用されます。

else if ( (pstVdecThreadParam->s32StreamMode==VIDEO_MODE_FRAME) && (pstVdecThreadParam->enType == PT_H264) )
        {
            bFindStart = HI_FALSE;  
            bFindEnd   = HI_FALSE;
            /**每次偏移到下一帧开始的位置**/
            fseek(fpStrm, s32UsedBytes, SEEK_SET);
            s32ReadLen = fread(pu8Buf, 1, pstVdecThreadParam->s32MinBufSize, fpStrm);
            if (s32ReadLen == 0)
            {
                if (pstVdecThreadParam->bLoopSend)
                {
                    s32UsedBytes = 0;
                    fseek(fpStrm, 0, SEEK_SET);
                    s32ReadLen = fread(pu8Buf, 1, pstVdecThreadParam->s32MinBufSize, fpStrm);
                }
                else
                {
                    break;
                }
            }

            /**查找开始位置**/
            for (i=0; i<s32ReadLen-5; i++)
            {
                if (  pu8Buf[i] == 0 && pu8Buf[i+1] == 0 && pu8Buf[i+2] == 1 && 
                     ( (pu8Buf[i+3]&0x1F) == 0x5 || (pu8Buf[i+3]&0x1F) == 0x1 ) &&
                     ( (pu8Buf[i+4]&0x80) == 0x80)
                   )                 
                {
                    bFindStart = HI_TRUE;
                    i += 4;
                    break;
                }
            }

            /**查找结束位置,也就是下一个开始帧的标志**/
            for (; i<s32ReadLen-5; i++)
            {
                if (  pu8Buf[i  ] == 0 && pu8Buf[i+1] == 0 && pu8Buf[i+2] == 1 && 
                    ( ((pu8Buf[i+3]&0x1F) == 0x7) || ((pu8Buf[i+3]&0x1F) == 0x8) || ((pu8Buf[i+3]&0x1F) == 0x6)
                      || (((pu8Buf[i+3]&0x1F) == 0x5 || (pu8Buf[i+3]&0x1F) == 0x1) &&((pu8Buf[i+4]&0x80) == 0x80))
                    )
                   )
                {
                    bFindEnd = HI_TRUE;
                    break;
                }
            }

            if(i > 0) s32ReadLen = i;
            if (bFindStart == HI_FALSE)
            {
                printf("SAMPLE_TEST: chn %d can not find start code!s32ReadLen %d, s32UsedBytes %d. \n", 
                                            pstVdecThreadParam->s32ChnId, s32ReadLen, s32UsedBytes);
            }
            else if (bFindEnd == HI_FALSE)
            {
                s32ReadLen = i+5;
            }
            
        }    

デコード表示:

    リファレンスマニュアルに実質的にモジュールインターフェース記述を復号化することを達成することができます。
    次のようにここに結合復号モジュールへのデータストリーム入力、復号化モジュール及び出力モジュールにアナログ4 H264ファイルは、ディスプレイ4~4分割画面エフェクトの表示画面です。

4ウェイは、リアルタイムデコード1080P @ 30fpsの問題ハースHi3521A機器のビューの画像点から、カトンを表示されませんが、CPU占有率が非常に高いです。

 

周波数測定エンジニアリングからこの章「カタログ序文」のアドレスが提供さ得るために

 

このコラムの最初の記事「カタログ序文、」ディレクトリの順で読み取るリスト完全なディレクトリの欄には、あなたの理解を支援します。

 

 

 

 

发布了175 篇原创文章 · 获赞 262 · 访问量 70万+

おすすめ

転載: blog.csdn.net/li_wen01/article/details/105025072