Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file in the root of the source tree. All
contributing project authors may be found in the AUTHORS file in the
root of the source tree.

The files were originally licensed by ARM Limited.

The following files:

    * dl/api/omxtypes.h
    * dl/sp/api/omxSP.h

are licensed by Khronos:

Copyright © 2005-2008 The Khronos Group Inc. All Rights Reserved. 

These materials are protected by copyright laws and contain material 
proprietary to the Khronos Group, Inc.  You may use these materials 
for implementing Khronos specifications, without altering or removing 
any trademark, copyright or other notice from the specification.

Khronos Group makes no, and expressly disclaims any, representations 
or warranties, express or implied, regarding these materials, including, 
without limitation, any implied warranties of merchantability or fitness 
for a particular purpose or non-infringement of any intellectual property. 
Khronos Group makes no, and expressly disclaims any, warranties, express 
or implied, regarding the correctness, accuracy, completeness, timeliness, 
and reliability of these materials. 

Under no circumstances will the Khronos Group, or any of its Promoters, 
Contributors or Members or their respective partners, officers, directors, 
employees, agents or representatives be liable for any damages, whether 
direct, indirect, special or consequential damages for lost revenues, 
lost profits, or otherwise, arising from or in connection with these 
materials.

Khronos and OpenMAX are trademarks of the Khronos Group Inc. 
