diff --git a/headers/os/media/MediaFile.h b/headers/os/media/MediaFile.h index cb8d0e0708..f9f14c92cb 100644 --- a/headers/os/media/MediaFile.h +++ b/headers/os/media/MediaFile.h @@ -157,6 +157,7 @@ private: BMediaTrack** fTrackList; void _Init(); + void _UnInit(); void _InitReader(BDataIO* source, int32 flags = 0); void _InitWriter(BDataIO* source, const media_file_format* mfi, int32 flags); diff --git a/src/kits/media/MediaFile.cpp b/src/kits/media/MediaFile.cpp index 977873837f..56bcc1d76b 100644 --- a/src/kits/media/MediaFile.cpp +++ b/src/kits/media/MediaFile.cpp @@ -78,16 +78,25 @@ BMediaFile::BMediaFile(const media_file_format* mfi, int32 flags) status_t BMediaFile::SetTo(const entry_ref* ref) { - debugger("BMediaFile::SetTo not implemented"); - return B_OK; + CALLED(); + + _UnInit(); + fDeleteSource = true; + _InitReader(new (std::nothrow) BFile(ref, O_RDONLY)); + + return fErr; } status_t BMediaFile::SetTo(BDataIO* destination) { - debugger("BMediaFile::SetTo not implemented"); - return B_OK; + CALLED(); + + _UnInit(); + _InitReader(destination); + + return fErr; } @@ -95,11 +104,7 @@ BMediaFile::~BMediaFile() { CALLED(); - ReleaseAllTracks(); - delete[] fTrackList; - delete fExtractor; - if (fDeleteSource) - delete fSource; + _UnInit(); } @@ -359,6 +364,23 @@ BMediaFile::_Init() } +void +BMediaFile::_UnInit() +{ + ReleaseAllTracks(); + delete[] fTrackList; + fTrackList = NULL; + fTrackNum = 0; + delete fExtractor; + fExtractor = NULL; + if (fDeleteSource) { + delete fSource; + fSource = NULL; + fDeleteSource = false; + } +} + + void BMediaFile::_InitReader(BDataIO* source, int32 flags) {