JP2005333412A - 多重ストリーム作成装置 - Google Patents
多重ストリーム作成装置 Download PDFInfo
- Publication number
- JP2005333412A JP2005333412A JP2004149857A JP2004149857A JP2005333412A JP 2005333412 A JP2005333412 A JP 2005333412A JP 2004149857 A JP2004149857 A JP 2004149857A JP 2004149857 A JP2004149857 A JP 2004149857A JP 2005333412 A JP2005333412 A JP 2005333412A
- Authority
- JP
- Japan
- Prior art keywords
- video
- frame
- audio
- multiplexing
- time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Landscapes
- Television Systems (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
【課題】符号化ビデオ・データと符号化オーディオ・データを多重化する場合、符号化ビデオ・データが時間情報を含むか否かに関わらず、フレーム・スキップを考慮した時間情報を多重ストリームに挿入し、再生時におけるAV同期を取ることができるようにした多重ストリーム作成装置を提供する。
【解決手段】フレーム・メモリ監視部19は、フレーム・メモリ11を監視し、ビデオ・エンコーダ10でフレーム・スキップが発生した場合、どのビデオESの後にフレーム・スキップが発生したかを示すフレーム・スキップ・メッセージを多重化タイミング生成部20に送る。多重化タイミング生成部20は、フレーム・スキップ・メッセージを受けたときは、フレーム・スキップされたビデオESの次のビデオESの多重化タイミング及びそのPESのタイム・スタンプ(PTS、DTS)を1フレーム分遅らせる。
【選択図】 図1
【解決手段】フレーム・メモリ監視部19は、フレーム・メモリ11を監視し、ビデオ・エンコーダ10でフレーム・スキップが発生した場合、どのビデオESの後にフレーム・スキップが発生したかを示すフレーム・スキップ・メッセージを多重化タイミング生成部20に送る。多重化タイミング生成部20は、フレーム・スキップ・メッセージを受けたときは、フレーム・スキップされたビデオESの次のビデオESの多重化タイミング及びそのPESのタイム・スタンプ(PTS、DTS)を1フレーム分遅らせる。
【選択図】 図1
Description
本発明は、MPEG(Moving Picture Experts Group)ストリーム作成装置のように、ビデオ・データ及びオーディオ・データを符号化・多重化してビデオとオーディオの多重ストリームを作成する多重ストリーム作成装置に関する。
図3は従来のMPEGストリーム作成装置の一例の要部を示す回路図である。図3中、10は入力されるビデオ・データを符号化してビデオ・エレメンタリ・ストリーム(以下、ビデオESという)を出力するビデオ符号化部をなすビデオ・エンコーダ、11はビデオ・エンコーダ10に入力されるビデオ・データを一時的に記憶するフレーム・メモリ、12、13はそれぞれ1フレーム分のビデオ・データを記憶可能とされた記憶領域であるバンク、14はビデオ・エンコーダ10が出力するビデオESを一時的に記憶するビデオESバッファである。
15は入力されるオーディオ・データを符号化してオーディオ・エレメンタリ・ストリーム(以下、オーディオESという)を出力するオーディオ符号化部をなすオーディオ・エンコーダ、16はオーディオ・エンコーダ15が出力するオーディオESを一時的に記憶するオーディオESバッファ、17はビデオESバッファ14が記憶するビデオESとオーディオESバッファ16が記憶するオーディオESを多重化してMPEGストリームを作成する多重化部、18は多重化部17における多重化タイミングを生成する多重化タイミング生成部である。
ビデオ・エンコーダ10は、入力されるビデオ・データを1フレーム分ずつバンク12、13に交互に取り込ませると共に、バンク12、13内のビデオ・データを交互に符号化する。図4はビデオ・エンコーダ10でフレーム・スキップ(ビデオ・フレームの符号化が省略される現象)が発生していない場合の多重化部17での多重化タイミングを示すタイムチャートである。なお、時刻軸は、実時刻軸ではなく、MPEGストリーム上の時刻軸である(図2、図6においても同様)。
図4中、ビデオES1、ビデオES2、ビデオES3、ビデオES4は、ビデオ・エンコーダ10から順に出力されるビデオESを示し、オーディオES1、オーディオES2、オーディオES3、オーディオES4は、オーディオ・エンコーダ15から順に出力されるオーディオESを示している。なお、オーディオESi内のオーディオ・データは、ビデオESi内のビデオ・データが示す映像のシーンに対応するものである。
図4の例はビデオ・エンコーダ10でフレーム・スキップが発生していない場合であるから、この場合には、多重化部17は、多重化タイミング生成部18が生成する多重化タイミングに従って、ビデオES1、オーディオES1、ビデオES2、オーディオES2、ビデオES3、オーディオES3、ビデオES4、オーディオES4の順に多重化し、MPEGストリームを作成することになる。
ここで、例えば、1フレーム毎に異なるシーンとなるコマーシャルのような映像では、映像内容の変化が大きく、ビデオ・エンコーダ10の処理が極端に重くなる。その際、1フレーム時間(33ミリ秒程度)の間に1フレーム分のビデオ・データの符号化が完了しないと、ビデオ・エンコーダ10でフレーム・スキップが発生することになる。
図5はビデオ・エンコーダ10でのフレーム・スキップの発生原因例を説明するためのタイムチャートである。例えば、時刻T1で、バンク12に1フレーム分のビデオ・データVD1の取り込みが開始され、時刻T2で、バンク12へのビデオ・データVD1の取り込みが完了した場合において、次のフレームのビデオ・データVD2のバンク13への取り込みが可能である場合には、ビデオ・データVD2のバンク13への取り込みが開始される。
そして、例えば、時刻T3で、バンク12に取り込まれているビデオ・データVD1の符号化が開始され、時刻T4で、バンク13へのビデオ・データVD2の取り込みが完了した場合において、バンク12に記憶されているビデオ・データVD1の符号化が完了していない場合には、次のフレームのビデオ・データVD3のバンク12への取り込みは不可能であるから、バンク13へのビデオ・データVD3の取り込みが開始され、ビデオ・データVD3は、ビデオ・データVD2に上書きされることになる。
その後、例えば、時刻T5で、バンク12に取り込まれているビデオ・データVD1の符号化が完了した場合において、ビデオ・データVD3のバンク13への取り込みが完了していない場合には、ビデオ・エンコーダ10は、符号化動作の待ち状態となり、時刻T6で、ビデオ・データVD3のバンク13への取り込みが完了すると、例えば、時刻T7で、バンク13に取り込まれているビデオ・データVD3の符号化が開始される。この例では、ビデオ・データVD2のフレーム・スキップが発生し、1フレーム分のビデオESの欠落が発生する。
図3に示す従来のMPEGストリーム作成装置では、多重化タイミング生成部18は、ビデオ・エンコーダ10でフレーム・スキップが発生し、1フレーム分のビデオESが欠落した場合においても、生成する多重化タイミングを変化させることがない。このため、多重化部17では、ビデオ・エンコーダ10におけるフレーム・スキップにより欠落したビデオESの次のビデオESを、欠落したビデオESの多重化タイミングで多重化しようとする。
この場合、欠落したビデオESの次のビデオESの生成時刻は、欠落したビデオESよりも1フレーム時間遅くなるが、オーディオ・エンコーダ15では、ビデオ・エンコーダ10でのフレーム・スキップとは無関係に、即ち、ビデオ・エンコーダ10でのフレーム・スキップによってビデオESが存在しない時間帯でも、オーディオESを生成し続けることになる。
ここに、多重化タイミング生成部18は、もともと想定していた次に多重化すべきビデオESの多重化時刻と、もともと想定していた次に多重化すべきオーディオESの多重化時刻を変えることがないので、欠落したビデオESに対応するオーディオESを、欠落したビデオESの次のビデオESよりも先に多重化することはできず、欠落したビデオESの次のビデオESの生成が遅れる時間分、欠落したビデオESに対応するオーディオESは、オーディオESバッファ16で多重化を待たされることになる。
この結果、オーディオESバッファ16では、オーバーフローが起こる可能性がある。また、仮に、オーディオESバッファ16がオーバーフローせず、多重化部17でビデオESとオーディオESの多重化ができたとしても、ビデオESは1フレーム、スキップしているにも関わらず、そのPES(packetized elementary stream)のタイム・スタンプ(PTS[presentation time stamp]、DTS[decoding time stamp])は1フレーム時間ごとに連続してセットされることになるため、再生時に、ビデオがオーディオよりも1フレーム時間分だけ先に再生され、AV(オーディオ・ビデオ)同期がずれることになる。
図6は図3に示す従来のMPEGストリーム作成装置においてビデオ・エンコーダ10が図4の例でビデオES2をスキップした場合の多重化部17での多重化タイミングを示すタイムチャートである。例えば、ビデオ・エンコーダ10がビデオES2をスキップすると、ビデオES1、オーディオES1、ビデオES3、オーディオES2、ビデオES4、オーディオES3の順に多重化されてしまう。この例では、再生時に、ビデオES3以降では、ビデオESはオーディオESよりも1フレーム時間だけ先に再生されることになり、AV同期がずれることになる。
特許文献1には、ビデオ・エンコーダで発生したフレーム・スキップを考慮した時間情報をPESに挿入し、AV同期を取る技術が開示されている。具体的には、パース・PES生成部において、入力されるビデオESからフレーム・スキップ情報を抽出し、この情報を使用してタイム・スタンプ(PTS)を計算し、PESヘッダに、計算したタイム・スタンプ(PTS)を乗せるというものである。
特開2002―16918号公報
特許文献1に記載の技術は、MPEG4 visual等のように、ビデオES内に時間情報を持つものを対象としており、このようなものを対象とする場合には、多重化部17でビデオES内の時間情報を解読することにより、ビデオESがフレーム・スキップをしているか否かを判定することができ、AV同期を取るための時間情報をPESに挿入することができる。しかし、MPEG2のように、ビデオ・エンコーダから出力されるビデオES内に時間情報を持たないものを対象とする場合には、特許文献1に記載の技術を適用してもAV同期を取ることができない。
本発明は、かかる点に鑑み、符号化ビデオ・データと符号化オーディオ・データとを多重化する場合、符号化ビデオ・データが時間情報を含むか否かに関わらず、ビデオ符号化部で発生したフレーム・スキップを考慮した時間情報を多重ストリームに挿入し、再生時にAV同期を取ることができる多重ストリームを作成できるようにした多重ストリーム作成装置を提供することを目的とする。
本発明は、ビデオ・データを符号化するビデオ符号化部と、オーディオ・データを符号化するオーディオ符号化部と、ビデオ符号化部が出力する符号化ビデオ・データとオーディオ符号化部が出力する符号化オーディオ・データとを多重化する多重化部を有する多重ストリーム作成装置であって、ビデオ符号化部内のフレーム・メモリを監視し、ビデオ符号化部でフレーム・スキップが発生した場合は、スキップが発生したことを多重化部に知らせるフレーム・メモリ監視部を有するというものである。
本発明によれば、フレーム・メモリ監視部は、ビデオ符号化部でフレーム・スキップが発生した場合は、スキップが発生したことを多重化部に知らせるので、多重化部は、これを受けて、フレーム・スキップされた符号化ビデオ・データの次の符号化ビデオ・データの多重化タイミング及び時間情報を1フレーム分遅らせる措置を取ることができる。したがって、符号化ビデオ・データが時間情報を含むか否かに関わらず、ビデオ符号化部で発生したフレーム・スキップを考慮した時間情報を多重ストリームに挿入することができ、再生時におけるAV同期を取ることができる。
以下、図1及び図2を参照して、本発明の一実施形態について、本発明をMPEGストリーム作成装置に適用した場合を例にして説明する。
図1は本発明の一実施形態の要部を示す回路図である。本発明の一実施形態は、フレーム・メモリ監視部19を設けると共に、図3に示す多重化部17の代わりに、フレーム・メモリ監視部19からのフレーム・スキップ・メッセージを受ける多重化タイミング生成部20を有してなる多重化部21を設け、その他については、図3に示す従来のMPEGストリーム作成装置と同様に構成したものである。
フレーム・メモリ監視部19は、ビデオ・エンコーダ10内のフレーム・メモリ11を監視し、ビデオ・エンコーダ10が連続してビデオ・フレームを符号化できず、ビデオ・エンコーダ10でフレーム・スキップが発生した場合、どのビデオESの後にフレーム・スキップが発生したかを示すフレーム・スキップ・メッセージを生成し、これを多重化タイミング生成部20へ送るものである。
多重化タイミング生成部20は、フレーム・メモリ監視部19からフレーム・スキップ・メッセージを受けたときは、多重化部21における多重化タイミング及びタイム・スタンプの付加について、フレーム・スキップされたビデオESの次のビデオESの多重化タイミングを1フレーム分遅らせ、更に、そのPESのタイム・スタンプ(PTS、DTS)も1フレーム分遅らせ、その他の場合には、従来周知のように機能するものである。
ここで、図3に示す従来のMPEGストリーム作成装置において、多重化部17が、もともと想定していた次に多重化すべきビデオESの多重化時刻(time video)をTv、もともと想定していた次に多重化すべきオーディオESの多重化時刻(time audio)をTaとすると、これらは、多重化タイミング生成部18により決定されるが、現在時刻をTpとすると、図3に示す従来のMPEGストリーム作成装置では、Tp<Tv<Taの関係が完全に維持されることになる。
ここで、ビデオ・エンコーダ10で1フレーム・スキップが起こった場合、ビデオ多重化時刻Tvで多重化すべきビデオESがビデオESバッファ16に入ってくる時刻がほぼ1フレーム時間分遅れることになるので、図3に示す従来のMPEGストリーム作成装置では、ビデオESより先にオーディオESを多重化することはできないことになる(問題点1)。この場合、オーディオESを1フレーム時間分、通常より余計にオーディオESバッファ16で保持する必要が発生し、オーディオESバッファ16がオーバーフローする可能性がある(問題点2)。
また、仮に、図3に示す従来のMPEGストリーム作成装置において、オーディオESバッファ16がオーバーフローせず、多重化部17でビデオESとオーディオESを多重化してMPEGストリームを生成することができたとしても、ビデオ・データが1フレーム・スキップしているため、スキップ後のMPEGストリームはAV同期がずれ、再生時にビデオが1フレーム分早く再生されてしまうことになる(問題点3)。
これに対して、本発明の一実施形態においては、フレーム・メモリ監視部19は、ビデオ・エンコーダ10でフレーム・スキップが発生したときは、どのビデオESの後にフレーム・スキップが発生したかを示すフレーム・スキップ・メッセージを生成し、これを多重化タイミング生成部20に送り、多重化タイミング生成部20は、フレーム・スキップ・メッセージを受けて、フレーム・スキップされたビデオESの次のビデオESの多重化タイミングを1フレーム分遅らせ、更に、そのPESのタイム・スタンプ(PTS、DTS)も1フレーム分遅らせることになる。
即ち、本発明の一実施形態においては、現在時刻Tpがほぼビデオ多重化時刻Tvと等しいとき、多重化タイミング生成部20がフレーム・スキップ・メッセージを受けると、多重化タイミング生成部20は、ビデオ多重化時刻Tvを「Tv+1フレーム時間」とし、ビデオESの多重化タイミングを1フレーム分遅らせ、さらに、ビデオESに対応するPESのタイム・スタンプ(PTS、DTS)も1フレーム分遅らせる。
これにより、「Tp<Ta<Tv」という状況になれば、オーディオESバッファ16に記憶しているオーディオESをビデオESより先に多重化することができ、オーディオESバッファ16のオーバーフローを回避することができる(問題点1、2の解消)。また、ビデオESに対応するタイム・スタンプ(PTS、DTS)も1フレーム分遅れるので、実際に、スキップしたフレームのデータは消失するが、次のフレーム以降については、AV同期を維持したまま再生が可能となる(問題点3の解消)。
図2は本発明の一実施形態における多重化タイミング例を示すタイムチャートであり、図4の例でビデオ・エンコーダ10がビデオES2をスキップした場合の多重化部21での多重化タイミングを示すタイムチャートである。例えば、ビデオ・エンコーダ10がビデオES2をスキップすると、本発明の一実施形態では、ビデオES1、オーディオES1、オーディオES2、ビデオES3、オーディオES3、ビデオES4、オーディオES4の順に多重化される。この例では、スキップしたフレームのビデオES2は消失するが、ビデオES3以降については、AV同期を維持したまま再生が可能である。
以上のように、本発明の一実施形態によれば、フレーム・メモリ監視部19は、ビデオ・エンコーダ10でフレーム・スキップが発生したときは、どのビデオESの後にフレーム・スキップが発生したかを示すフレーム・スキップ・メッセージを生成し、これを多重化タイミング生成部20に送り、多重化タイミング生成部20は、フレーム・スキップ・メッセージを受けて、フレーム・スキップされたビデオESの次のビデオESの多重化タイミングを1フレーム分遅らせ、更に、そのPESのタイム・スタンプ(PTS、DTS)も1フレーム分遅らせる。
したがって、ビデオESが、例えば、MPEG2のビデオESのように時間情報を含むものであっても、MPEG4 visualのビデオESのように時間情報を含むものであっても、即ち、ビデオESが時間情報を含むか否かに関わらず、ビデオ・エンコーダ10で発生したフレーム・スキップを考慮した時間情報をMPEGストリームに挿入することができ、再生時におけるAV同期を取ることができる。
なお、本発明の一実施形態では、本発明をMPEGストリーム作成装置に適用した場合を例にして説明したが、本発明は、ビデオ・データ及びオーディオ・データを符号化・多重化してビデオとオーディオの多重ストリームを作成する多重ストリーム作成装置に広く適用することができる。
10…ビデオ・エンコーダ
11…フレーム・メモリ
12、13…バンク
14…ビデオESバッファ
15…オーディオ・エンコーダ
16…オーディオESバッファ
17…多重化部
18…多重化タイミング生成部
19…フレーム・メモリ監視部
20…多重化タイミング生成部
21…多重化部
11…フレーム・メモリ
12、13…バンク
14…ビデオESバッファ
15…オーディオ・エンコーダ
16…オーディオESバッファ
17…多重化部
18…多重化タイミング生成部
19…フレーム・メモリ監視部
20…多重化タイミング生成部
21…多重化部
Claims (2)
- ビデオ・データを符号化するビデオ符号化部と、
オーディオ・データを符号化するオーディオ符号化部と、
前記ビデオ符号化部が出力する符号化ビデオ・データと前記オーディオ符号化部が出力する符号化オーディオ・データとを多重化する多重化部を有する多重ストリーム作成装置であって、
前記ビデオ符号化部内のフレーム・メモリを監視し、前記ビデオ符号化部でフレーム・スキップが発生した場合は、スキップが発生したことを前記多重化部に知らせるフレーム・メモリ監視部を有することを特徴とする多重ストリーム作成装置。 - 前記多重化部は、前記フレーム・メモリ監視部からスキップが発生したことを知らされた場合は、フレーム・スキップされた符号化ビデオ・データの次の符号化ビデオ・データの多重化タイミング及び時間情報を1フレーム分遅らせる機能を有することを特徴とする請求項1記載の多重ストリーム作成装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004149857A JP2005333412A (ja) | 2004-05-20 | 2004-05-20 | 多重ストリーム作成装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004149857A JP2005333412A (ja) | 2004-05-20 | 2004-05-20 | 多重ストリーム作成装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005333412A true JP2005333412A (ja) | 2005-12-02 |
Family
ID=35487756
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004149857A Withdrawn JP2005333412A (ja) | 2004-05-20 | 2004-05-20 | 多重ストリーム作成装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2005333412A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009124093A1 (en) * | 2008-03-31 | 2009-10-08 | Qualcomm Incorporated | Method and apparatus for synchronizing an encoder with a multiplexer |
US8169947B2 (en) | 2007-12-05 | 2012-05-01 | Qualcomm Incorporated | Method and apparatus for data-centric multiplexing |
US8761150B2 (en) | 2007-12-05 | 2014-06-24 | Qualcomm Incorporated | Method and apparatus for data-centric multiplexing and asynchronous command interface to the encoder and multiplexer modules |
CN107077313A (zh) * | 2014-12-23 | 2017-08-18 | 英特尔公司 | 用于非媒体内容的远程显示的改进延迟和效率 |
-
2004
- 2004-05-20 JP JP2004149857A patent/JP2005333412A/ja not_active Withdrawn
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8169947B2 (en) | 2007-12-05 | 2012-05-01 | Qualcomm Incorporated | Method and apparatus for data-centric multiplexing |
US8761150B2 (en) | 2007-12-05 | 2014-06-24 | Qualcomm Incorporated | Method and apparatus for data-centric multiplexing and asynchronous command interface to the encoder and multiplexer modules |
WO2009124093A1 (en) * | 2008-03-31 | 2009-10-08 | Qualcomm Incorporated | Method and apparatus for synchronizing an encoder with a multiplexer |
KR101123447B1 (ko) * | 2008-03-31 | 2012-03-27 | 콸콤 인코포레이티드 | 멀티플렉서와 인코더를 동기화하기 위한 방법 및 장치 |
CN107077313A (zh) * | 2014-12-23 | 2017-08-18 | 英特尔公司 | 用于非媒体内容的远程显示的改进延迟和效率 |
CN107077313B (zh) * | 2014-12-23 | 2020-08-18 | 英特尔公司 | 用于非媒体内容的远程显示的改进延迟和效率 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7844166B2 (en) | Reproduction device, video decoding device, synchronization/reproduction method, program and recording medium | |
JP4570462B2 (ja) | パーソナルビデオレコーディングの応用におけるmpegデコーダでの音声画像同期を達成する安定した方法 | |
KR101350754B1 (ko) | 채널 변경 시간을 감소시키고 채널 변경 동안 오디오/비디오 콘텐츠를 동기화하는 방법 | |
JP6184408B2 (ja) | 受信装置及びその受信方法 | |
WO2013136754A1 (ja) | 表示装置、及び送信装置 | |
JP4983923B2 (ja) | デコーダ装置、およびデコード方法 | |
JP2007189688A (ja) | 同一チャンネル内で相異なるコーデックを用いて符号化されたビデオ及び/またはオーディオデータストリームの再生のためのコーデック変更方法及び装置 | |
WO2000060872A1 (fr) | Procede et dispositif de decodage continu de flux video comprenant des sequences de donnees ayant des frequences de trame differentes | |
JP2005123789A (ja) | Av同期システム | |
JP2008167061A (ja) | 符号化装置及び符号化方法 | |
JP4613860B2 (ja) | Mpeg符号化ストリーム復号装置 | |
US20040103446A1 (en) | Audio-video multiplexed data generating apparatus, reproducing apparatus and moving video decoding apparatus | |
JP2010171919A (ja) | 映像表示装置 | |
JP2005333412A (ja) | 多重ストリーム作成装置 | |
JP4096915B2 (ja) | デジタル情報再生装置及び方法 | |
KR100864009B1 (ko) | 오디오/비디오 동기화 방법 | |
JP2009290768A (ja) | 映像処理装置および映像処理方法 | |
JP2010081141A (ja) | 字幕放送システム及び字幕放送方法 | |
JP2010141498A (ja) | 映像受信装置及び映像送信装置 | |
JP4967402B2 (ja) | 多重化ストリーム変換装置および方法 | |
JP3671969B2 (ja) | データ多重方法及び多重データ復号方法 | |
JPH099215A (ja) | データ多重方法、データ伝送方法、及び多重データ復号方法、多重データ復号装置 | |
JP2009044282A (ja) | デジタル映像データ再生装置及び表示装置 | |
JP2007201797A (ja) | 伝送システム及び映像出力方法 | |
JP2006345364A (ja) | セグメントメタデータ生成装置及び方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20070807 |