diff --git a/headers/os/media/MediaDefs.h b/headers/os/media/MediaDefs.h index 2594eca7a4..9eaa042a8b 100644 --- a/headers/os/media/MediaDefs.h +++ b/headers/os/media/MediaDefs.h @@ -604,6 +604,9 @@ public: const void* MetaData() const; int32 MetaDataSize() const; + void Unflatten(const char *flatBuffer); + void Clear(); + media_format(); media_format(const media_format& other); ~media_format(); diff --git a/src/kits/media/AddOnManager.cpp b/src/kits/media/AddOnManager.cpp index d1add217c8..66aff824a6 100644 --- a/src/kits/media/AddOnManager.cpp +++ b/src/kits/media/AddOnManager.cpp @@ -558,8 +558,8 @@ AddOnManager::_RegisterEncoder(EncoderPlugin* plugin, const entry_ref& ref) while (true) { memset(&info.codecInfo, 0, sizeof(media_codec_info)); - memset(&info.intputFormat, 0, sizeof(media_format)); - memset(&info.outputFormat, 0, sizeof(media_format)); + info.intputFormat.Clear(); + info.outputFormat.Clear(); if (plugin->RegisterNextEncoder(&cookie, &info.codecInfo, &info.formatFamily, &info.intputFormat, &info.outputFormat) != B_OK) { diff --git a/src/kits/media/MediaAddOn.cpp b/src/kits/media/MediaAddOn.cpp index 1b0e08defa..e018e6771b 100644 --- a/src/kits/media/MediaAddOn.cpp +++ b/src/kits/media/MediaAddOn.cpp @@ -442,11 +442,13 @@ dormant_flavor_info::Unflatten(type_code c, const void *buffer, ssize_t size) if (!in_formats) return B_NO_MEMORY; // TODO: we should not!!! make flat copies of media_format - memcpy(const_cast(in_formats), buf, - count * sizeof(media_format)); + for (int32 i = 0; i < count; i++) { + const_cast + (&in_formats[i])->Unflatten(buf); + buf += sizeof(media_format); // TODO: not save + } in_format_count = count; } - buf += count * sizeof(media_format); // TODO: not save } count = *(int32*)buf; buf += sizeof(int32); @@ -458,11 +460,13 @@ dormant_flavor_info::Unflatten(type_code c, const void *buffer, ssize_t size) if (!out_formats) return B_NO_MEMORY; // TODO: we should not!!! make flat copies of media_format - memcpy(const_cast(out_formats), buf, - count * sizeof(media_format)); + for (int32 i = 0; i < count; i++) { + const_cast + (&out_formats[i])->Unflatten(buf); + buf += sizeof(media_format); // TODO: not save + } out_format_count = count; } - buf += count * sizeof(media_format); // TODO: not save } node_info = *(dormant_node_info*)buf; buf += sizeof(dormant_node_info); diff --git a/src/kits/media/MediaDefs.cpp b/src/kits/media/MediaDefs.cpp index 1eb4803cb9..a8c2829707 100644 --- a/src/kits/media/MediaDefs.cpp +++ b/src/kits/media/MediaDefs.cpp @@ -832,17 +832,34 @@ media_format::MetaDataSize() const } -media_format::media_format() +void +media_format::Unflatten(const char *flatBuffer) +{ + // TODO: we should not!!! make flat copies of media_format + memcpy(this, flatBuffer, sizeof(*this)); + meta_data = NULL; + meta_data_area = B_BAD_VALUE; +} + + +void +media_format::Clear() { memset(this, 0x00, sizeof(*this)); + meta_data = NULL; meta_data_area = B_BAD_VALUE; } +media_format::media_format() +{ + this->Clear(); +} + + media_format::media_format(const media_format& other) { - memset(this, 0x00, sizeof(*this)); - meta_data_area = B_BAD_VALUE; + this->Clear(); *this = other; } diff --git a/src/kits/media/MediaExtractor.cpp b/src/kits/media/MediaExtractor.cpp index 8696279827..b9f3bb5e9c 100644 --- a/src/kits/media/MediaExtractor.cpp +++ b/src/kits/media/MediaExtractor.cpp @@ -96,8 +96,7 @@ MediaExtractor::_Init(BDataIO* source, int32 flags) fStreamInfo[i].chunkCache = new ChunkCache(fExtractorWaitSem, kMaxCacheBytes); fStreamInfo[i].lastChunk = NULL; - memset(&fStreamInfo[i].encodedFormat, 0, - sizeof(fStreamInfo[i].encodedFormat)); + fStreamInfo[i].encodedFormat.Clear(); if (fStreamInfo[i].chunkCache->InitCheck() != B_OK) { fInitStatus = B_NO_MEMORY; diff --git a/src/kits/media/MediaFormats.cpp b/src/kits/media/MediaFormats.cpp index e0bda690c2..13a9e8e2db 100644 --- a/src/kits/media/MediaFormats.cpp +++ b/src/kits/media/MediaFormats.cpp @@ -489,7 +489,7 @@ BMediaFormats::GetFormatFor(const media_format_description& description, meta_format::CompareDescriptions); TRACE("meta format == %p\n", metaFormat); if (metaFormat == NULL) { - memset(_format, 0, sizeof(*_format)); // clear to widlcard + _format->Clear(); // clear to widlcard return B_MEDIA_BAD_FORMAT; } diff --git a/src/kits/media/MediaRoster.cpp b/src/kits/media/MediaRoster.cpp index a7f257f0c2..f1cd6ceb5c 100644 --- a/src/kits/media/MediaRoster.cpp +++ b/src/kits/media/MediaRoster.cpp @@ -3236,7 +3236,7 @@ BMediaRoster::GetFormatFor(const media_input& input, media_format* _format, status_t rv; request.dest = input.destination; - memset(&request.format, 0, sizeof(request.format)); // wildcard + request.format.Clear(); // wildcard rv = QueryPort(input.destination.port, CONSUMER_ACCEPT_FORMAT, &request, sizeof(request), &reply, sizeof(reply)); diff --git a/src/kits/media/TrackReader.cpp b/src/kits/media/TrackReader.cpp index aa35a45b67..f9d1c3ecc6 100644 --- a/src/kits/media/TrackReader.cpp +++ b/src/kits/media/TrackReader.cpp @@ -135,7 +135,7 @@ void BTrackReader::SetToTrack(BMediaTrack *track) { media_format fmt; - memset(&fmt, 0, sizeof(fmt)); //wildcard + fmt.Clear(); //wildcard memcpy(&fmt.u.raw_audio, &fFormat, sizeof(fFormat)); fmt.type = B_MEDIA_RAW_AUDIO; //try to find a output format