25 #define NONAMELESSUNION 89 IWICMetadataBlockReader_Release(
This->block);
102 return IWICMetadataBlockReader_GetContainerFormat(
This->block,
format);
121 if (
len < actual_len)
145 { 4, {
'c',
'h',
'a',
'r'},
VT_I1 },
146 { 5, {
'u',
'c',
'h',
'a',
'r'},
VT_UI1 },
147 { 5, {
's',
'h',
'o',
'r',
't'},
VT_I2 },
148 { 6, {
'u',
's',
'h',
'o',
'r',
't'},
VT_UI2 },
149 { 4, {
'l',
'o',
'n',
'g'},
VT_I4 },
150 { 5, {
'u',
'l',
'o',
'n',
'g'},
VT_UI4 },
151 { 3, {
'i',
'n',
't'},
VT_I4 },
152 { 4, {
'u',
'i',
'n',
't'},
VT_UI4 },
153 { 8, {
'l',
'o',
'n',
'g',
'l',
'o',
'n',
'g'},
VT_I8 },
154 { 9, {
'u',
'l',
'o',
'n',
'g',
'l',
'o',
'n',
'g'},
VT_UI8 },
155 { 5, {
'f',
'l',
'o',
'a',
't'},
VT_R4 },
156 { 6, {
'd',
'o',
'u',
'b',
'l',
'e'},
VT_R8 },
160 { 4, {
'b',
'o',
'o',
'l'},
VT_BOOL }
215 TRACE(
"get_token error %#x\n",
hr);
223 else if (*
start ==
'{')
283 PROPVARIANT next_id, next_schema;
288 hr =
get_token(&next_elem, &next_id, &next_schema, &next_idx);
291 TRACE(
"get_token error %#x\n",
hr);
321 next_elem.
str =
p + 1;
333 bstr =
id->u.bstrVal;
345 PROPVARIANT next_id, next_schema;
348 hr =
get_token(&next_elem, &next_id, &next_schema, &next_idx);
351 TRACE(
"get_token error %#x\n",
hr);
356 elem->len += next_elem.
len + 1;
386 hr = IWICMetadataBlockReader_GetCount(block_reader, &
count);
393 hr = IWICMetadataBlockReader_GetReaderByIndex(block_reader,
i, &new_reader);
396 hr = IWICMetadataReader_GetMetadataFormat(new_reader, &
format);
401 if (matched_index ==
index)
411 IWICMetadataReader_Release(new_reader);
427 PropVariantInit(&
id);
428 PropVariantInit(&
value);
442 hr = IUnknown_QueryInterface(
value.
u.punkVal, &IID_IWICMetadataReader, (
void **)new_reader);
457 PROPVARIANT tk_id, tk_schema, new_value;
472 PropVariantInit(&tk_id);
473 PropVariantInit(&tk_schema);
474 PropVariantInit(&new_value);
483 WARN(
"query should start with '/'\n");
496 WARN(
"get_token error %#x\n",
hr);
500 TRACE(
"id %s, schema %s\n", wine_dbgstr_variant((
VARIANT *)&tk_id), wine_dbgstr_variant((
VARIANT *)&tk_schema));
502 if (!
elem.len)
break;
510 FIXME(
"unsupported schema vt %u\n", tk_schema.
vt);
521 IWICMetadataReader_Release(
reader);
555 hr = IWICMetadataReader_GetMetadataFormat(
reader, &
guid);
569 id.u.pwszVal = tk_id.u.
bstrVal;
575 hr = IWICMetadataReader_GetValue(
reader, &
schema, &
id, &new_value);
586 IWICMetadataReader_Release(
reader);
627 obj->IWICMetadataQueryReader_iface.lpVtbl = &
mqr_vtbl;
630 IWICMetadataBlockReader_AddRef(mbr);
635 *
out = &
obj->IWICMetadataQueryReader_iface;
659 static const WCHAR _8bimResInfoW[] = {
'8',
'b',
'i',
'm',
'R',
'e',
's',
'I',
'n',
'f',
'o',0 };
660 static const WCHAR _8bimiptcdigestW[] = {
'8',
'b',
'i',
'm',
'i',
'p',
't',
'c',
'd',
'i',
'g',
'e',
's',
't',0 };
668 static const WCHAR logscrdescW[] = {
'l',
'o',
'g',
's',
'c',
'r',
'd',
'e',
's',
'c',0 };
672 static const WCHAR chrominanceW[] = {
'c',
'h',
'r',
'o',
'm',
'i',
'n',
'a',
'n',
'c',
'e',0 };
675 static const WCHAR commentextW[] = {
'c',
'o',
'm',
'm',
'e',
'n',
't',
'e',
'x',
't',0 };
691 { &GUID_ContainerFormatBmp,
bmpW },
692 { &GUID_ContainerFormatPng,
pngW },
693 { &GUID_ContainerFormatIco,
icoW },
694 { &GUID_ContainerFormatJpeg,
jpgW },
695 { &GUID_ContainerFormatTiff,
tiffW },
696 { &GUID_ContainerFormatGif,
gifW },
697 { &GUID_ContainerFormatWmp,
wmphotoW },
698 { &GUID_MetadataFormatUnknown,
unknownW },
699 { &GUID_MetadataFormatIfd,
ifdW },
700 { &GUID_MetadataFormatSubIfd,
subW },
701 { &GUID_MetadataFormatExif,
exifW },
702 { &GUID_MetadataFormatGps,
gpsW },
703 { &GUID_MetadataFormatInterop,
interopW },
704 { &GUID_MetadataFormatApp0,
app0W },
705 { &GUID_MetadataFormatApp1,
app1W },
706 { &GUID_MetadataFormatApp13,
app13W },
707 { &GUID_MetadataFormatIPTC,
iptcW },
708 { &GUID_MetadataFormatIRB,
irbW },
712 { &GUID_MetadataFormatXMP,
xmpW },
713 { &GUID_MetadataFormatThumbnail,
thumbW },
714 { &GUID_MetadataFormatChunktEXt,
tEXtW },
715 { &GUID_MetadataFormatXMPStruct,
xmpstructW },
716 { &GUID_MetadataFormatXMPBag,
xmpbagW },
717 { &GUID_MetadataFormatXMPSeq,
xmpseqW },
718 { &GUID_MetadataFormatXMPAlt,
xmpaltW },
720 { &GUID_MetadataFormatIMD,
imgdescW },
722 { &GUID_MetadataFormatAPE,
appextW },
724 { &GUID_MetadataFormatJpegLuminance,
luminanceW },
725 { &GUID_MetadataFormatJpegComment,
comW },
727 { &GUID_MetadataFormatChunkgAMA,
gAMAW },
728 { &GUID_MetadataFormatChunkbKGD,
bKGDW },
729 { &GUID_MetadataFormatChunkiTXt,
iTXtW },
730 { &GUID_MetadataFormatChunkcHRM,
cHRMW },
731 { &GUID_MetadataFormatChunkhIST,
hISTW },
732 { &GUID_MetadataFormatChunkiCCP,
iCCPW },
733 { &GUID_MetadataFormatChunksRGB,
sRGBW },
734 { &GUID_MetadataFormatChunktIME,
tIMEW }
789 static const WCHAR rdf_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'w',
'w',
'w',
'.',
'w',
'3',
'.',
'o',
'r',
'g',
'/',
'1',
'9',
'9',
'9',
'/',
'0',
'2',
'/',
'2',
'2',
'-',
'r',
'd',
'f',
'-',
's',
'y',
'n',
't',
'a',
'x',
'-',
'n',
's',
'#',0 };
791 static const WCHAR dc_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'p',
'u',
'r',
'l',
'.',
'o',
'r',
'g',
'/',
'd',
'c',
'/',
'e',
'l',
'e',
'm',
'e',
'n',
't',
's',
'/',
'1',
'.',
'1',
'/',0 };
793 static const WCHAR xmp_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',0 };
795 static const WCHAR xmpidq_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'm',
'p',
'/',
'I',
'd',
'e',
'n',
't',
'i',
'f',
'i',
'e',
'r',
'/',
'q',
'u',
'a',
'l',
'/',
'1',
'.',
'0',
'/',0 };
797 static const WCHAR xmpRights_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
'r',
'i',
'g',
'h',
't',
's',
'/',0 };
799 static const WCHAR xmpMM_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
'm',
'm',
'/',0 };
801 static const WCHAR xmpBJ_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
'b',
'j',
'/',0 };
803 static const WCHAR xmpTPg_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
't',
'/',
'p',
'g',
'/',0 };
805 static const WCHAR pdf_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'p',
'd',
'f',
'/',
'1',
'.',
'3',
'/',0 };
807 static const WCHAR photoshop_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'p',
'h',
'o',
't',
'o',
's',
'h',
'o',
'p',
'/',
'1',
'.',
'0',
'/',0 };
809 static const WCHAR tiff_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
't',
'i',
'f',
'f',
'/',
'1',
'.',
'0',
'/',0 };
811 static const WCHAR exif_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'e',
'x',
'i',
'f',
'/',
'1',
'.',
'0',
'/',0 };
813 static const WCHAR stDim_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
's',
'T',
'y',
'p',
'e',
'/',
'D',
'i',
'm',
'e',
'n',
's',
'i',
'o',
'n',
's',
'#',0 };
815 static const WCHAR xapGImg_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
'g',
'/',
'i',
'm',
'g',
'/',0 };
817 static const WCHAR stEvt_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
's',
'T',
'y',
'p',
'e',
'/',
'R',
'e',
's',
'o',
'u',
'r',
'c',
'e',
'E',
'v',
'e',
'n',
't',
'#',0 };
819 static const WCHAR stRef_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
's',
'T',
'y',
'p',
'e',
'/',
'R',
'e',
's',
'o',
'u',
'r',
'c',
'e',
'R',
'e',
'f',
'#',0 };
821 static const WCHAR stVer_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
's',
'T',
'y',
'p',
'e',
'/',
'V',
'e',
'r',
's',
'i',
'o',
'n',
'#',0 };
823 static const WCHAR stJob_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
's',
'T',
'y',
'p',
'e',
'/',
'J',
'o',
'b',
'#',0 };
825 static const WCHAR aux_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'e',
'x',
'i',
'f',
'/',
'1',
'.',
'0',
'/',
'a',
'u',
'x',
'/',0 };
827 static const WCHAR crs_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'c',
'a',
'm',
'e',
'r',
'a',
'-',
'r',
'a',
'w',
'-',
's',
'e',
't',
't',
'i',
'n',
'g',
's',
'/',
'1',
'.',
'0',
'/',0 };
829 static const WCHAR xmpDM_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'm',
'p',
'/',
'1',
'.',
'0',
'/',
'D',
'y',
'n',
'a',
'm',
'i',
'c',
'M',
'e',
'd',
'i',
'a',
'/',0 };
830 static const WCHAR Iptc4xmpCore[] = {
'I',
'p',
't',
'c',
'4',
'x',
'm',
'p',
'C',
'o',
'r',
'e',0 };
831 static const WCHAR Iptc4xmpCore_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'i',
'p',
't',
'c',
'.',
'o',
'r',
'g',
'/',
's',
't',
'd',
'/',
'I',
'p',
't',
'c',
'4',
'x',
'm',
'p',
'C',
'o',
'r',
'e',
'/',
'1',
'.',
'0',
'/',
'x',
'm',
'l',
'n',
's',
'/',0 };
832 static const WCHAR MicrosoftPhoto[] = {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'P',
'h',
'o',
't',
'o',0 };
833 static const WCHAR MicrosoftPhoto_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'.',
'c',
'o',
'm',
'/',
'p',
'h',
'o',
't',
'o',
'/',
'1',
'.',
'0',
'/',0 };
835 static const WCHAR MP_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'.',
'c',
'o',
'm',
'/',
'p',
'h',
'o',
't',
'o',
'/',
'1',
'.',
'2',
'/',0 };
837 static const WCHAR MPRI_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'.',
'c',
'o',
'm',
'/',
'p',
'h',
'o',
't',
'o',
'/',
'1',
'.',
'2',
'/',
't',
'/',
'R',
'e',
'g',
'i',
'o',
'n',
'I',
'n',
'f',
'o',
'#',0 };
839 static const WCHAR MPReg_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'.',
'c',
'o',
'm',
'/',
'p',
'h',
'o',
't',
'o',
'/',
'1',
'.',
'2',
'/',
't',
'/',
'R',
'e',
'g',
'i',
'o',
'n',
'#',0 };
#define HRESULT_FROM_WIN32(x)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
HRESULT WINAPI PropVariantClear(PROPVARIANT *pvar)
char * wine_dbgstr_w(const wchar_t *wstr)
static const WCHAR rootW[]
int WINAPI lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
GLuint GLuint GLsizei count
const char * wine_dbgstr_guid(const GUID *guid)
int next_token(char **, FILE *)
HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc, PROPVAR_CHANGE_FLAGS flags, VARTYPE vt)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
int WINAPI lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2)
GLsizei GLsizei GLuint * obj
RPC_STATUS WINAPI UuidFromStringW(RPC_WSTR s, UUID *uuid)
static WCHAR * heap_strdupW(const WCHAR *str)
#define WINCODEC_ERR_UNEXPECTEDMETADATATYPE
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
#define WINCODEC_ERR_INVALIDQUERYREQUEST
#define DISP_E_TYPEMISMATCH
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define LOCALE_SYSTEM_DEFAULT
static JOBOBJECTINFOCLASS LPVOID DWORD LPDWORD ret_len
#define InterlockedDecrement
#define memcpy(s1, s2, n)
REFIID LPVOID * ppvObject
const char * wine_dbgstr_wn(const WCHAR *str, int n)
GLsizei const GLfloat * value
#define WINCODEC_ERR_WRONGSTATE
#define InterlockedIncrement
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
IWICMetadataQueryReader IWICMetadataQueryReader_iface
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
IWICMetadataBlockReader * block
#define WINCODEC_ERR_PROPERTYNOTSUPPORTED
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define WINCODEC_ERR_PROPERTYNOTFOUND
#define WINCODEC_ERR_INSUFFICIENTBUFFER
WINE_UNICODE_INLINE WCHAR * memchrW(const WCHAR *ptr, WCHAR ch, size_t n)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
#define HeapFree(x, y, z)
#define ERROR_INSUFFICIENT_BUFFER