| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | 
							- #pragma once
 
- #include <util/util.hpp>
 
- static inline void encode_dstr(struct dstr *str)
 
- {
 
- 	dstr_replace(str, "#", "#22");
 
- 	dstr_replace(str, ":", "#3A");
 
- }
 
- static inline void decode_dstr(struct dstr *str)
 
- {
 
- 	dstr_replace(str, "#3A", ":");
 
- 	dstr_replace(str, "#22", "#");
 
- }
 
- static inline void EncodeDeviceId(struct dstr *encodedStr,
 
- 		const wchar_t *name_str, const wchar_t *path_str)
 
- {
 
- 	DStr name;
 
- 	DStr path;
 
- 	dstr_from_wcs(name, name_str);
 
- 	dstr_from_wcs(path, path_str);
 
- 	encode_dstr(name);
 
- 	encode_dstr(path);
 
- 	dstr_copy_dstr(encodedStr, name);
 
- 	dstr_cat(encodedStr, ":");
 
- 	dstr_cat_dstr(encodedStr, path);
 
- }
 
- static inline bool DecodeDeviceDStr(DStr &name, DStr &path,
 
- 		const char *device_id)
 
- {
 
- 	const char *path_str;
 
- 	if (!device_id || !*device_id)
 
- 		return false;
 
- 	path_str = strchr(device_id, ':');
 
- 	if (!path_str)
 
- 		return false;
 
- 	dstr_copy(path, path_str+1);
 
- 	dstr_copy(name, device_id);
 
- 	size_t len = path_str - device_id;
 
- 	name->array[len] = 0;
 
- 	name->len        = len;
 
- 	decode_dstr(name);
 
- 	decode_dstr(path);
 
- 	return true;
 
- }
 
- static inline bool DecodeDeviceId(DShow::DeviceId &out, const char *device_id)
 
- {
 
- 	DStr name, path;
 
- 	if (!DecodeDeviceDStr(name, path, device_id))
 
- 		return false;
 
- 	BPtr<wchar_t> wname = dstr_to_wcs(name);
 
- 	out.name = wname;
 
- 	if (!dstr_is_empty(path)) {
 
- 		BPtr<wchar_t> wpath = dstr_to_wcs(path);
 
- 		out.path = wpath;
 
- 	}
 
- 	return true;
 
- }
 
 
  |