2017-01-01 23:35:30 +00:00
|
|
|
// Copyright © 2015-2017 Go Opus Authors (see AUTHORS file)
|
2016-08-14 22:33:23 +00:00
|
|
|
//
|
|
|
|
// License for use of this code is detailed in the LICENSE file
|
|
|
|
|
2015-07-05 19:28:08 +00:00
|
|
|
package opus
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
)
|
|
|
|
|
|
|
|
/*
|
2016-02-26 17:27:41 +00:00
|
|
|
#cgo pkg-config: opus opusfile
|
2015-07-05 19:28:08 +00:00
|
|
|
#include <opus/opus.h>
|
2015-07-13 16:15:26 +00:00
|
|
|
#include <opusfile.h>
|
|
|
|
|
|
|
|
// Access the preprocessor from CGO
|
2016-10-10 13:18:10 +00:00
|
|
|
|
|
|
|
// Errors for libopus
|
|
|
|
const int CONST_OPUS_OK = OPUS_OK;
|
|
|
|
const int CONST_OPUS_BAD_ARG = OPUS_BAD_ARG;
|
|
|
|
const int CONST_OPUS_BUFFER_TOO_SMALL = OPUS_BUFFER_TOO_SMALL;
|
|
|
|
const int CONST_OPUS_INTERNAL_ERROR = OPUS_INTERNAL_ERROR;
|
|
|
|
const int CONST_OPUS_INVALID_PACKET = OPUS_INVALID_PACKET;
|
|
|
|
const int CONST_OPUS_UNIMPLEMENTED = OPUS_UNIMPLEMENTED;
|
|
|
|
const int CONST_OPUS_INVALID_STATE = OPUS_INVALID_STATE;
|
|
|
|
const int CONST_OPUS_ALLOC_FAIL = OPUS_ALLOC_FAIL;
|
|
|
|
|
|
|
|
// Errors for libopusfile
|
2015-07-13 16:15:26 +00:00
|
|
|
const int CONST_OP_FALSE = OP_FALSE;
|
|
|
|
const int CONST_OP_EOF = OP_EOF;
|
|
|
|
const int CONST_OP_HOLE = OP_HOLE;
|
|
|
|
const int CONST_OP_EREAD = OP_EREAD;
|
|
|
|
const int CONST_OP_EFAULT = OP_EFAULT;
|
|
|
|
const int CONST_OP_EIMPL = OP_EIMPL;
|
|
|
|
const int CONST_OP_EINVAL = OP_EINVAL;
|
|
|
|
const int CONST_OP_ENOTFORMAT = OP_ENOTFORMAT;
|
|
|
|
const int CONST_OP_EBADHEADER = OP_EBADHEADER;
|
|
|
|
const int CONST_OP_EVERSION = OP_EVERSION;
|
|
|
|
const int CONST_OP_ENOTAUDIO = OP_ENOTAUDIO;
|
|
|
|
const int CONST_OP_EBADPACKET = OP_EBADPACKET;
|
|
|
|
const int CONST_OP_EBADLINK = OP_EBADLINK;
|
|
|
|
const int CONST_OP_ENOSEEK = OP_ENOSEEK;
|
|
|
|
const int CONST_OP_EBADTIMESTAMP = OP_EBADTIMESTAMP;
|
2015-07-05 19:28:08 +00:00
|
|
|
*/
|
|
|
|
import "C"
|
|
|
|
|
2016-12-29 11:58:57 +00:00
|
|
|
type Error int
|
2016-10-10 13:18:10 +00:00
|
|
|
|
2016-12-29 11:58:57 +00:00
|
|
|
var _ error = Error(0)
|
2016-10-10 13:18:10 +00:00
|
|
|
|
|
|
|
// Libopus errors
|
|
|
|
var (
|
2016-12-29 11:58:57 +00:00
|
|
|
ErrOK = Error(C.CONST_OPUS_OK)
|
|
|
|
ErrBadArg = Error(C.CONST_OPUS_BAD_ARG)
|
|
|
|
ErrBufferTooSmall = Error(C.CONST_OPUS_BUFFER_TOO_SMALL)
|
|
|
|
ErrInternalError = Error(C.CONST_OPUS_INTERNAL_ERROR)
|
|
|
|
ErrInvalidPacket = Error(C.CONST_OPUS_INVALID_PACKET)
|
|
|
|
ErrUnimplemented = Error(C.CONST_OPUS_UNIMPLEMENTED)
|
|
|
|
ErrInvalidState = Error(C.CONST_OPUS_INVALID_STATE)
|
|
|
|
ErrAllocFail = Error(C.CONST_OPUS_ALLOC_FAIL)
|
|
|
|
)
|
|
|
|
|
2016-10-10 13:18:10 +00:00
|
|
|
// Error string (in human readable format) for libopus errors.
|
2016-12-29 11:58:57 +00:00
|
|
|
func (e Error) Error() string {
|
2016-10-10 13:18:10 +00:00
|
|
|
return fmt.Sprintf("opus: %s", C.GoString(C.opus_strerror(C.int(e))))
|
|
|
|
}
|
|
|
|
|
2016-12-29 11:58:57 +00:00
|
|
|
type StreamError int
|
2015-07-12 10:22:25 +00:00
|
|
|
|
2016-12-29 11:58:57 +00:00
|
|
|
var _ error = StreamError(0)
|
2016-10-10 13:18:10 +00:00
|
|
|
|
|
|
|
// Libopusfile errors. The names are copied verbatim from the libopusfile
|
|
|
|
// library.
|
2015-07-13 16:15:26 +00:00
|
|
|
var (
|
2016-12-29 11:58:57 +00:00
|
|
|
ErrStreamFalse = StreamError(C.CONST_OP_FALSE)
|
|
|
|
ErrStreamEOF = StreamError(C.CONST_OP_EOF)
|
|
|
|
ErrStreamHole = StreamError(C.CONST_OP_HOLE)
|
|
|
|
ErrStreamRead = StreamError(C.CONST_OP_EREAD)
|
|
|
|
ErrStreamFault = StreamError(C.CONST_OP_EFAULT)
|
|
|
|
ErrStreamImpl = StreamError(C.CONST_OP_EIMPL)
|
|
|
|
ErrStreamInval = StreamError(C.CONST_OP_EINVAL)
|
|
|
|
ErrStreamNotFormat = StreamError(C.CONST_OP_ENOTFORMAT)
|
|
|
|
ErrStreamBadHeader = StreamError(C.CONST_OP_EBADHEADER)
|
|
|
|
ErrStreamVersion = StreamError(C.CONST_OP_EVERSION)
|
|
|
|
ErrStreamNotAudio = StreamError(C.CONST_OP_ENOTAUDIO)
|
|
|
|
ErrStreamBadPacked = StreamError(C.CONST_OP_EBADPACKET)
|
|
|
|
ErrStreamBadLink = StreamError(C.CONST_OP_EBADLINK)
|
|
|
|
ErrStreamNoSeek = StreamError(C.CONST_OP_ENOSEEK)
|
|
|
|
ErrStreamBadTimestamp = StreamError(C.CONST_OP_EBADTIMESTAMP)
|
|
|
|
)
|
|
|
|
|
|
|
|
func (i StreamError) Error() string {
|
2015-07-12 10:22:25 +00:00
|
|
|
switch i {
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamFalse:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_FALSE"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamEOF:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_EOF"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamHole:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_HOLE"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamRead:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_EREAD"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamFault:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_EFAULT"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamImpl:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_EIMPL"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamInval:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_EINVAL"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamNotFormat:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_ENOTFORMAT"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamBadHeader:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_EBADHEADER"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamVersion:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_EVERSION"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamNotAudio:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_ENOTAUDIO"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamBadPacked:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_EBADPACKET"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamBadLink:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_EBADLINK"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamNoSeek:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_ENOSEEK"
|
2016-12-29 11:58:57 +00:00
|
|
|
case ErrStreamBadTimestamp:
|
2015-07-12 10:22:25 +00:00
|
|
|
return "OP_EBADTIMESTAMP"
|
|
|
|
default:
|
2016-10-10 13:18:10 +00:00
|
|
|
return "libopusfile error: %d (unknown code)"
|
2015-07-05 19:28:08 +00:00
|
|
|
}
|
|
|
|
}
|