42 lines
692 B
Go
42 lines
692 B
Go
![]() |
package lame
|
||
|
|
||
|
import (
|
||
|
"io"
|
||
|
)
|
||
|
|
||
|
type LameWriter struct {
|
||
|
output io.Writer
|
||
|
Encoder *Encoder
|
||
|
EncodedChunkSize int
|
||
|
}
|
||
|
|
||
|
func NewWriter(out io.Writer) *LameWriter {
|
||
|
writer := &LameWriter{out, Init(), 0}
|
||
|
return writer
|
||
|
}
|
||
|
|
||
|
func (lw *LameWriter) Write(p []byte) (int, error) {
|
||
|
// fmt.Println("lame Write len:", len(p))
|
||
|
out := lw.Encoder.Encode(p)
|
||
|
lw.EncodedChunkSize = len(out)
|
||
|
|
||
|
if lw.EncodedChunkSize > 0 {
|
||
|
_, err := lw.output.Write(out)
|
||
|
if err != nil {
|
||
|
return 0, err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return len(p), nil
|
||
|
}
|
||
|
|
||
|
func (lw *LameWriter) Close() error {
|
||
|
out := lw.Encoder.Flush()
|
||
|
if len(out) == 0 {
|
||
|
return nil
|
||
|
}
|
||
|
lw.Encoder.Close()
|
||
|
_, err := lw.output.Write(out)
|
||
|
return err
|
||
|
}
|