From a4f26c7d660dff50936e5f895dcfb6a417c71e4a Mon Sep 17 00:00:00 2001 From: shatty Date: Sat, 24 Jan 2004 22:19:00 +0000 Subject: [PATCH] fix SetMetaData to create an area, do not bother with checking the return value from find_thread(NULL) git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6259 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/media/MediaDefs.cpp | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/kits/media/MediaDefs.cpp b/src/kits/media/MediaDefs.cpp index ccf58ed678..20622c3e7d 100644 --- a/src/kits/media/MediaDefs.cpp +++ b/src/kits/media/MediaDefs.cpp @@ -626,8 +626,29 @@ status_t media_format::SetMetaData(const void *data, size_t size) { - meta_data = data; + // TODO: create_area / delete_area for this should be done by the media server? + if (meta_data_area > 0) { + delete_area(meta_data_area); + } + uchar * addr = 0; + uint32 area_size = ((size - 1) / B_PAGE_SIZE + 1) * B_PAGE_SIZE ; + area_id area = create_area("meta_data_area", (void**)&addr, B_ANY_ADDRESS, area_size, + B_NO_LOCK, B_READ_AREA | B_WRITE_AREA); + if (area < 0) { + return area; + } + memcpy(addr, data, size); + set_area_protection(area,B_READ_AREA); + meta_data = addr; meta_data_size = size; + meta_data_area = area; + use_area = area; + thread_id thread = find_thread(NULL); + thread_info info; + if (get_thread_info(thread, &info) == B_OK) { + team = info.team; + } + thisPtr = this; return B_OK; } @@ -681,11 +702,9 @@ media_format::operator=(const media_format &clone) // these things only happen when a meta_data_area is defined: if (meta_data_area > 0) { thread_id thread = find_thread(NULL); - if (thread != B_NAME_NOT_FOUND) { - thread_info info; - if (get_thread_info(thread,&info) == B_OK) { - team = info.team; - } + thread_info info; + if (get_thread_info(thread,&info) == B_OK) { + team = info.team; } thisPtr = this; // TODO: start _Media_Roster_