diff --git a/mov.go b/mov.go index 88cfa5a..0fa1646 100644 --- a/mov.go +++ b/mov.go @@ -4,24 +4,20 @@ import ( "bytes" "encoding/binary" "errors" - "os" + "io" "time" ) const epochAdjust = 2082844800 // Created attempts to find a created time from the metadata in a .mov file. -func Created(path string) (time.Time, error) { +func Created(file io.ReadSeeker) (time.Time, error) { var r time.Time - f, err := os.Open(path) - if err != nil { - return r, err - } - defer f.Close() + var err error buf := [8]byte{} for { - _, err := f.Read(buf[:]) + _, err := file.Read(buf[:]) if err != nil { return r, err } @@ -29,11 +25,11 @@ func Created(path string) (time.Time, error) { break } else { atomSize := binary.BigEndian.Uint32(buf[:]) - f.Seek(int64(atomSize)-8, 1) + file.Seek(int64(atomSize)-8, 1) } } - _, err = f.Read(buf[:]) + _, err = file.Read(buf[:]) if err != nil { return r, err } @@ -41,10 +37,10 @@ func Created(path string) (time.Time, error) { s := string(buf[4:8]) switch s { case "mvhd": - if _, err := f.Seek(4, 1); err != nil { + if _, err := file.Seek(4, 1); err != nil { return r, err } - _, err = f.Read(buf[:4]) + _, err = file.Read(buf[:4]) if err != nil { return r, err }