• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "iamf/cli/codec/opus_utils.h"
2 
3 #include "absl/status/status.h"
4 #include "absl/strings/str_cat.h"
5 #include "absl/strings/string_view.h"
6 #include "include/opus_defines.h"
7 
8 namespace iamf_tools {
9 
OpusErrorCodeToAbslStatus(int opus_error_code,absl::string_view error_message)10 absl::Status OpusErrorCodeToAbslStatus(int opus_error_code,
11                                        absl::string_view error_message) {
12   absl::StatusCode status_code;
13   switch (opus_error_code) {
14     case OPUS_OK:
15       return absl::OkStatus();
16     case OPUS_BAD_ARG:
17       status_code = absl::StatusCode::kInvalidArgument;
18       break;
19     case OPUS_BUFFER_TOO_SMALL:
20     case OPUS_INVALID_STATE:
21       status_code = absl::StatusCode::kFailedPrecondition;
22       break;
23     case OPUS_INTERNAL_ERROR:
24       status_code = absl::StatusCode::kInternal;
25       break;
26     case OPUS_INVALID_PACKET:
27       status_code = absl::StatusCode::kDataLoss;
28       break;
29     case OPUS_UNIMPLEMENTED:
30       status_code = absl::StatusCode::kUnimplemented;
31       break;
32     case OPUS_ALLOC_FAIL:
33       status_code = absl::StatusCode::kResourceExhausted;
34       break;
35     default:
36       status_code = absl::StatusCode::kUnknown;
37       break;
38   }
39   return absl::Status(
40       status_code,
41       absl::StrCat(error_message, " opus_error_code= ", opus_error_code));
42 }
43 
44 }  // namespace iamf_tools
45