summaryrefslogtreecommitdiff
path: root/gpr/source/lib/vc5_common/utilities.c
diff options
context:
space:
mode:
Diffstat (limited to 'gpr/source/lib/vc5_common/utilities.c')
-rwxr-xr-xgpr/source/lib/vc5_common/utilities.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/gpr/source/lib/vc5_common/utilities.c b/gpr/source/lib/vc5_common/utilities.c
new file mode 100755
index 0000000..adc8678
--- /dev/null
+++ b/gpr/source/lib/vc5_common/utilities.c
@@ -0,0 +1,82 @@
+/*! @file utilities.c
+ *
+ * @brief The utilities in this file are included to allow the codec to be tested.
+ *
+ * @version 1.0.0
+ *
+ * (C) Copyright 2018 GoPro Inc (http://gopro.com/).
+ *
+ * Licensed under either:
+ * - Apache License, Version 2.0, http://www.apache.org/licenses/LICENSE-2.0
+ * - MIT license, http://opensource.org/licenses/MIT
+ * at your option.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "common.h"
+
+/*!
+ @brief Check that the enabled parts are correct
+*/
+CODEC_ERROR CheckEnabledParts(ENABLED_PARTS *enabled_parts_ref)
+{
+ ENABLED_PARTS enabled_parts = (*enabled_parts_ref);
+
+ // The elementary bitstream is always enabled
+ if ((enabled_parts & VC5_PART_MASK(VC5_PART_ELEMENTARY)) == 0) {
+ enabled_parts |= VC5_PART_MASK(VC5_PART_ELEMENTARY);
+ }
+
+ // The conformance specification is never enabled
+ enabled_parts &= ~((uint32_t)VC5_PART_MASK(VC5_PART_CONFORMANCE));
+
+ // Image formats must be enabled if subsampled color differences are enabled
+ if ((enabled_parts & VC5_PART_MASK(VC5_PART_COLOR_SAMPLING)) != 0) {
+ enabled_parts |= VC5_PART_MASK(VC5_PART_IMAGE_FORMATS);
+ }
+
+ // Check that the enabled parts were built at compile-time
+ //assert((enabled_parts & VC5_ENABLED_PARTS) == enabled_parts);
+ if (! ((enabled_parts & VC5_ENABLED_PARTS) == enabled_parts)) {
+ return CODEC_ERROR_ENABLED_PARTS;
+ }
+
+ // Return the correct enabled parts mask
+ *enabled_parts_ref = enabled_parts;
+ return CODEC_ERROR_OKAY;
+}
+
+/*!
+ @brief Verify that the enabled parts are correct
+*/
+CODEC_ERROR VerifyEnabledParts(ENABLED_PARTS enabled_parts)
+{
+ // The elementary bitstream must always be enabled
+ if ((enabled_parts & VC5_PART_MASK(VC5_PART_ELEMENTARY)) == 0) {
+ return CODEC_ERROR_ENABLED_PARTS;
+ }
+
+ // The conformance specification must not be enabled
+ if ((enabled_parts & VC5_PART_MASK(VC5_PART_CONFORMANCE)) != 0) {
+ return CODEC_ERROR_ENABLED_PARTS;
+ }
+
+ // Image formats must be enabled if subsampled color differences are enabled
+ if ((enabled_parts & VC5_PART_MASK(VC5_PART_COLOR_SAMPLING)) != 0 &&
+ (enabled_parts & VC5_PART_MASK(VC5_PART_IMAGE_FORMATS)) == 0) {
+ return CODEC_ERROR_ENABLED_PARTS;
+ }
+
+ // All enabled parts must be compiled into this codec implementation
+ if ((enabled_parts & VC5_ENABLED_PARTS) != enabled_parts) {
+ return CODEC_ERROR_ENABLED_PARTS;
+ }
+
+ // This codec implementation supports the enabled parts of the VC-5 standard
+ return CODEC_ERROR_OKAY;
+}