{"id":475,"date":"2008-07-24T20:24:30","date_gmt":"2008-07-24T18:24:30","guid":{"rendered":"https:\/\/alax.info\/blog\/?p=475"},"modified":"2009-09-27T11:07:19","modified_gmt":"2009-09-27T09:07:19","slug":"video-conversion-yuy2-to-yv12","status":"publish","type":"post","link":"https:\/\/alax.info\/blog\/475","title":{"rendered":"Video Conversion: YUY2 to YV12"},"content":{"rendered":"<p>See topic on <a href=\"http:\/\/forums.microsoft.com\/msdn\/ShowPost.aspx?PostID=3650255&amp;SiteID=1\">MSDN Forums<\/a> about coloring issue.<\/p>\n<p>This is a demo of <a href=\"http:\/\/fourcc.org\/yuv.php#YUY2\">YUY2<\/a> to <a href=\"http:\/\/fourcc.org\/yuv.php#YV12\">YV12<\/a> conversion as suggested copying Y values and averaging U and V.<\/p>\n<p><a href=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2008\/07\/yuy2-yv12-01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-477\" title=\"GraphEdit DirectShow filter graph demonstrating conversion from YUY2 to YV12\" src=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2008\/07\/yuy2-yv12-01-300x155.png\" alt=\"\" width=\"300\" height=\"155\" srcset=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2008\/07\/yuy2-yv12-01-300x155.png 300w, https:\/\/alax.info\/blog\/wp-content\/uploads\/2008\/07\/yuy2-yv12-01.png 1357w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Original image is on the right.<\/p>\n<p>Code snippet to perform the transformation:<\/p>\n<p><!--more--><\/p>\n<pre>ATLASSERT<span style=\"color: #808030;\">(<\/span>pInputBitmapInfoHeader<span style=\"color: #808030;\">-<\/span><span style=\"color: #808030;\">&gt;<\/span>biCompression <span style=\"color: #808030;\">=<\/span><span style=\"color: #808030;\">=<\/span> FOURCC_YUY2<span style=\"color: #808030;\">)<\/span><span style=\"color: #800080;\">;<\/span>\r\n<span style=\"color: #800000; font-weight: bold;\">const<\/span> <span style=\"color: #603000;\">CSize<\/span> Extent <span style=\"color: #808030;\">=<\/span> pInputVideoInfoHeader<span style=\"color: #808030;\">-<\/span><span style=\"color: #808030;\">&gt;<\/span>GetExtent<span style=\"color: #808030;\">(<\/span><span style=\"color: #808030;\">)<\/span><span style=\"color: #800080;\">;<\/span>\r\nATLASSERT<span style=\"color: #808030;\">(<\/span>Extent <span style=\"color: #808030;\">=<\/span><span style=\"color: #808030;\">=<\/span> pOutputVideoInfoHeader<span style=\"color: #808030;\">-<\/span><span style=\"color: #808030;\">&gt;<\/span>GetExtent<span style=\"color: #808030;\">(<\/span><span style=\"color: #808030;\">)<\/span><span style=\"color: #808030;\">)<\/span><span style=\"color: #800080;\">;<\/span>\r\n<span style=\"color: #800000; font-weight: bold;\">const<\/span> <span style=\"color: #603000;\">BYTE<\/span><span style=\"color: #808030;\">*<\/span> pnInputData <span style=\"color: #808030;\">=<\/span> InputMediaBuffer<span style=\"color: #808030;\">.<\/span>m_pnData<span style=\"color: #800080;\">;<\/span>\r\nSSIZE_T nFirstInputRowOffset<span style=\"color: #808030;\">,<\/span> nNextInputRowOffset<span style=\"color: #800080;\">;<\/span>\r\npInputVideoInfoHeader<span style=\"color: #808030;\">-<\/span><span style=\"color: #808030;\">&gt;<\/span>GetData<span style=\"color: #808030;\">(<\/span>nFirstInputRowOffset<span style=\"color: #808030;\">,<\/span> nNextInputRowOffset<span style=\"color: #808030;\">)<\/span><span style=\"color: #800080;\">;<\/span>\r\nATLASSERT<span style=\"color: #808030;\">(<\/span><span style=\"color: #808030;\">!<\/span>nFirstInputRowOffset<span style=\"color: #808030;\">)<\/span><span style=\"color: #800080;\">;<\/span>\r\n<span style=\"color: #603000;\">BYTE<\/span><span style=\"color: #808030;\">*<\/span> pnOutputData <span style=\"color: #808030;\">=<\/span> OutputMediaBuffer<span style=\"color: #808030;\">.<\/span>m_pnData<span style=\"color: #800080;\">;<\/span>\r\nSSIZE_T nFirstOutputRowOffset<span style=\"color: #808030;\">,<\/span> nNextOutputRowOffset<span style=\"color: #800080;\">;<\/span>\r\npOutputVideoInfoHeader<span style=\"color: #808030;\">-<\/span><span style=\"color: #808030;\">&gt;<\/span>GetData<span style=\"color: #808030;\">(<\/span>nFirstOutputRowOffset<span style=\"color: #808030;\">,<\/span> nNextOutputRowOffset<span style=\"color: #808030;\">)<\/span><span style=\"color: #800080;\">;<\/span>\r\nATLASSERT<span style=\"color: #808030;\">(<\/span><span style=\"color: #808030;\">!<\/span>nFirstOutputRowOffset<span style=\"color: #808030;\">)<\/span><span style=\"color: #800080;\">;<\/span>\r\n<span style=\"color: #603000;\">BYTE<\/span><span style=\"color: #808030;\">*<\/span> pnOutputDataY <span style=\"color: #808030;\">=<\/span> pnOutputData<span style=\"color: #800080;\">;<\/span>\r\n<span style=\"color: #603000;\">BYTE<\/span><span style=\"color: #808030;\">*<\/span> pnOutputDataV <span style=\"color: #808030;\">=<\/span> pnOutputDataY <span style=\"color: #808030;\">+<\/span> Extent<span style=\"color: #808030;\">.<\/span>cy <span style=\"color: #808030;\">*<\/span> nNextOutputRowOffset<span style=\"color: #800080;\">;<\/span>\r\n<span style=\"color: #603000;\">BYTE<\/span><span style=\"color: #808030;\">*<\/span> pnOutputDataU <span style=\"color: #808030;\">=<\/span> pnOutputDataV <span style=\"color: #808030;\">+<\/span> <span style=\"color: #808030;\">(<\/span>Extent<span style=\"color: #808030;\">.<\/span>cy <span style=\"color: #808030;\">*<\/span> nNextOutputRowOffset<span style=\"color: #808030;\">)<\/span> <span style=\"color: #808030;\">\/<\/span> <span style=\"color: #008c00;\">4<\/span><span style=\"color: #800080;\">;<\/span>\r\nATLTRACE2<span style=\"color: #808030;\">(<\/span>atlTraceGeneral<span style=\"color: #808030;\">,<\/span> <span style=\"color: #008c00;\">5<\/span><span style=\"color: #808030;\">,<\/span> _T<span style=\"color: #808030;\">(<\/span><span style=\"color: #800000;\">\"<\/span><span style=\"color: #0000e6;\">pnInputData 0x<\/span><span style=\"color: #0f69ff;\">%08x<\/span><span style=\"color: #0000e6;\"> - 0x<\/span><span style=\"color: #0f69ff;\">%08x<\/span><span style=\"color: #0000e6;\">, Extent { <\/span><span style=\"color: #0f69ff;\">%d<\/span><span style=\"color: #0000e6;\">, <\/span><span style=\"color: #0f69ff;\">%d<\/span><span style=\"color: #0000e6;\"> }, pnOutputData 0x<\/span><span style=\"color: #0f69ff;\">%08x<\/span><span style=\"color: #0000e6;\"> - 0x<\/span><span style=\"color: #0f69ff;\">%08x<\/span><span style=\"color: #0f69ff;\">\\n<\/span><span style=\"color: #800000;\">\"<\/span><span style=\"color: #808030;\">)<\/span><span style=\"color: #808030;\">,<\/span> pnInputData<span style=\"color: #808030;\">,<\/span> pnInputData <span style=\"color: #808030;\">+<\/span> pInputBitmapInfoHeader<span style=\"color: #808030;\">-<\/span><span style=\"color: #808030;\">&gt;<\/span>biSizeImage<span style=\"color: #808030;\">,<\/span> Extent<span style=\"color: #808030;\">.<\/span>cx<span style=\"color: #808030;\">,<\/span> Extent<span style=\"color: #808030;\">.<\/span>cy<span style=\"color: #808030;\">,<\/span> pnOutputData<span style=\"color: #808030;\">,<\/span> pnOutputData <span style=\"color: #808030;\">+<\/span> pOutputBitmapInfoHeader<span style=\"color: #808030;\">-<\/span><span style=\"color: #808030;\">&gt;<\/span>biSizeImage<span style=\"color: #808030;\">)<\/span><span style=\"color: #800080;\">;<\/span>\r\nATLTRACE2<span style=\"color: #808030;\">(<\/span>atlTraceGeneral<span style=\"color: #808030;\">,<\/span> <span style=\"color: #008c00;\">5<\/span><span style=\"color: #808030;\">,<\/span> _T<span style=\"color: #808030;\">(<\/span><span style=\"color: #800000;\">\"<\/span><span style=\"color: #0000e6;\">nFirstInputRowOffset <\/span><span style=\"color: #0f69ff;\">%d<\/span><span style=\"color: #0000e6;\">, nNextInputRowOffset <\/span><span style=\"color: #0f69ff;\">%d<\/span><span style=\"color: #0000e6;\">, nFirstOutputRowOffset <\/span><span style=\"color: #0f69ff;\">%d<\/span><span style=\"color: #0000e6;\">, nNextOutputRowOffset <\/span><span style=\"color: #0f69ff;\">%d<\/span><span style=\"color: #0f69ff;\">\\n<\/span><span style=\"color: #800000;\">\"<\/span><span style=\"color: #808030;\">)<\/span><span style=\"color: #808030;\">,<\/span> nFirstInputRowOffset<span style=\"color: #808030;\">,<\/span> nNextInputRowOffset<span style=\"color: #808030;\">,<\/span> nFirstOutputRowOffset<span style=\"color: #808030;\">,<\/span> nNextOutputRowOffset<span style=\"color: #808030;\">)<\/span><span style=\"color: #800080;\">;<\/span>\r\nATLTRACE2<span style=\"color: #808030;\">(<\/span>atlTraceGeneral<span style=\"color: #808030;\">,<\/span> <span style=\"color: #008c00;\">5<\/span><span style=\"color: #808030;\">,<\/span> _T<span style=\"color: #808030;\">(<\/span><span style=\"color: #800000;\">\"<\/span><span style=\"color: #0000e6;\">pnOutputDataY 0x<\/span><span style=\"color: #0f69ff;\">%08x<\/span><span style=\"color: #0000e6;\">, pnOutputDataV 0x<\/span><span style=\"color: #0f69ff;\">%08x<\/span><span style=\"color: #0000e6;\">, pnOutputDataU 0x<\/span><span style=\"color: #0f69ff;\">%08x<\/span><span style=\"color: #0f69ff;\">\\n<\/span><span style=\"color: #800000;\">\"<\/span><span style=\"color: #808030;\">)<\/span><span style=\"color: #808030;\">,<\/span> pnOutputDataY<span style=\"color: #808030;\">,<\/span> pnOutputDataV<span style=\"color: #808030;\">,<\/span> pnOutputDataU<span style=\"color: #808030;\">)<\/span><span style=\"color: #800080;\">;<\/span>\r\nSSIZE_T nInputRowOffset <span style=\"color: #808030;\">=<\/span> nFirstInputRowOffset<span style=\"color: #800080;\">;<\/span>\r\n<span style=\"color: #800000; font-weight: bold;\">for<\/span><span style=\"color: #808030;\">(<\/span><span style=\"color: #603000;\">LONG<\/span> nY <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">0<\/span><span style=\"color: #800080;\">;<\/span> nY <span style=\"color: #808030;\">&lt;<\/span> Extent<span style=\"color: #808030;\">.<\/span>cy<span style=\"color: #800080;\">;<\/span> nY <span style=\"color: #808030;\">+<\/span><span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">2<\/span><span style=\"color: #808030;\">)<\/span>\r\n<span style=\"color: #800080;\">{<\/span>\r\n    SSIZE_T nInputOffset <span style=\"color: #808030;\">=<\/span> nInputRowOffset<span style=\"color: #800080;\">;<\/span>\r\n    <span style=\"color: #800000; font-weight: bold;\">for<\/span><span style=\"color: #808030;\">(<\/span><span style=\"color: #603000;\">LONG<\/span> nX <span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">0<\/span><span style=\"color: #800080;\">;<\/span> nX <span style=\"color: #808030;\">&lt;<\/span> Extent<span style=\"color: #808030;\">.<\/span>cx<span style=\"color: #800080;\">;<\/span> nX <span style=\"color: #808030;\">+<\/span><span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">2<\/span><span style=\"color: #808030;\">)<\/span>\r\n    <span style=\"color: #800080;\">{<\/span>\r\n        pnOutputDataY<span style=\"color: #808030;\">[<\/span><span style=\"color: #008c00;\">0<\/span><span style=\"color: #808030;\">]<\/span> <span style=\"color: #808030;\">=<\/span> pnInputData<span style=\"color: #808030;\">[<\/span>nInputOffset <span style=\"color: #808030;\">+<\/span> <span style=\"color: #008c00;\">0<\/span><span style=\"color: #808030;\">]<\/span><span style=\"color: #800080;\">;<\/span>\r\n        <span style=\"color: #800000; font-weight: bold;\">const<\/span> <span style=\"color: #603000;\">BYTE<\/span> nU0 <span style=\"color: #808030;\">=<\/span> pnInputData<span style=\"color: #808030;\">[<\/span>nInputOffset <span style=\"color: #808030;\">+<\/span> <span style=\"color: #008c00;\">1<\/span><span style=\"color: #808030;\">]<\/span><span style=\"color: #800080;\">;<\/span>\r\n        pnOutputDataY<span style=\"color: #808030;\">[<\/span><span style=\"color: #008c00;\">1<\/span><span style=\"color: #808030;\">]<\/span> <span style=\"color: #808030;\">=<\/span> pnInputData<span style=\"color: #808030;\">[<\/span>nInputOffset <span style=\"color: #808030;\">+<\/span> <span style=\"color: #008c00;\">2<\/span><span style=\"color: #808030;\">]<\/span><span style=\"color: #800080;\">;<\/span>\r\n        <span style=\"color: #800000; font-weight: bold;\">const<\/span> <span style=\"color: #603000;\">BYTE<\/span> nV0 <span style=\"color: #808030;\">=<\/span> pnInputData<span style=\"color: #808030;\">[<\/span>nInputOffset <span style=\"color: #808030;\">+<\/span> <span style=\"color: #008c00;\">3<\/span><span style=\"color: #808030;\">]<\/span><span style=\"color: #800080;\">;<\/span>\r\n        pnOutputDataY<span style=\"color: #808030;\">[<\/span>nNextOutputRowOffset <span style=\"color: #808030;\">+<\/span> <span style=\"color: #008c00;\">0<\/span><span style=\"color: #808030;\">]<\/span> <span style=\"color: #808030;\">=<\/span> pnInputData<span style=\"color: #808030;\">[<\/span>nInputOffset <span style=\"color: #808030;\">+<\/span> nNextInputRowOffset <span style=\"color: #808030;\">+<\/span> <span style=\"color: #008c00;\">0<\/span><span style=\"color: #808030;\">]<\/span><span style=\"color: #800080;\">;<\/span>\r\n        <span style=\"color: #800000; font-weight: bold;\">const<\/span> <span style=\"color: #603000;\">BYTE<\/span> nU1 <span style=\"color: #808030;\">=<\/span> pnInputData<span style=\"color: #808030;\">[<\/span>nInputOffset <span style=\"color: #808030;\">+<\/span> nNextInputRowOffset <span style=\"color: #808030;\">+<\/span> <span style=\"color: #008c00;\">1<\/span><span style=\"color: #808030;\">]<\/span><span style=\"color: #800080;\">;<\/span>\r\n        pnOutputDataY<span style=\"color: #808030;\">[<\/span>nNextOutputRowOffset <span style=\"color: #808030;\">+<\/span> <span style=\"color: #008c00;\">1<\/span><span style=\"color: #808030;\">]<\/span> <span style=\"color: #808030;\">=<\/span> pnInputData<span style=\"color: #808030;\">[<\/span>nInputOffset <span style=\"color: #808030;\">+<\/span> nNextInputRowOffset <span style=\"color: #808030;\">+<\/span> <span style=\"color: #008c00;\">2<\/span><span style=\"color: #808030;\">]<\/span><span style=\"color: #800080;\">;<\/span>\r\n        <span style=\"color: #800000; font-weight: bold;\">const<\/span> <span style=\"color: #603000;\">BYTE<\/span> nV1 <span style=\"color: #808030;\">=<\/span> pnInputData<span style=\"color: #808030;\">[<\/span>nInputOffset <span style=\"color: #808030;\">+<\/span> nNextInputRowOffset <span style=\"color: #808030;\">+<\/span> <span style=\"color: #008c00;\">3<\/span><span style=\"color: #808030;\">]<\/span><span style=\"color: #800080;\">;<\/span>\r\n        pnOutputDataU<span style=\"color: #808030;\">[<\/span><span style=\"color: #008c00;\">0<\/span><span style=\"color: #808030;\">]<\/span> <span style=\"color: #808030;\">=<\/span> <span style=\"color: #808030;\">(<\/span>nU0 <span style=\"color: #808030;\">+<\/span> nU1<span style=\"color: #808030;\">)<\/span> <span style=\"color: #808030;\">\/<\/span> <span style=\"color: #008c00;\">2<\/span><span style=\"color: #800080;\">;<\/span>\r\n        pnOutputDataV<span style=\"color: #808030;\">[<\/span><span style=\"color: #008c00;\">0<\/span><span style=\"color: #808030;\">]<\/span> <span style=\"color: #808030;\">=<\/span> <span style=\"color: #808030;\">(<\/span>nV0 <span style=\"color: #808030;\">+<\/span> nV1<span style=\"color: #808030;\">)<\/span> <span style=\"color: #808030;\">\/<\/span> <span style=\"color: #008c00;\">2<\/span><span style=\"color: #800080;\">;<\/span>\r\n        nInputOffset <span style=\"color: #808030;\">+<\/span><span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">4<\/span><span style=\"color: #800080;\">;<\/span>\r\n        pnOutputDataY <span style=\"color: #808030;\">+<\/span><span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">2<\/span><span style=\"color: #800080;\">;<\/span>\r\n        pnOutputDataV <span style=\"color: #808030;\">+<\/span><span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">1<\/span><span style=\"color: #800080;\">;<\/span>\r\n        pnOutputDataU <span style=\"color: #808030;\">+<\/span><span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">1<\/span><span style=\"color: #800080;\">;<\/span>\r\n    <span style=\"color: #800080;\">}<\/span>\r\n    nInputRowOffset <span style=\"color: #808030;\">+<\/span><span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">2<\/span> <span style=\"color: #808030;\">*<\/span> nNextInputRowOffset<span style=\"color: #800080;\">;<\/span>\r\n    pnOutputDataY <span style=\"color: #808030;\">+<\/span><span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">2<\/span> <span style=\"color: #808030;\">*<\/span> nNextOutputRowOffset <span style=\"color: #808030;\">-<\/span> Extent<span style=\"color: #808030;\">.<\/span>cx<span style=\"color: #800080;\">;<\/span>\r\n    pnOutputDataV <span style=\"color: #808030;\">+<\/span><span style=\"color: #808030;\">=<\/span> nNextOutputRowOffset <span style=\"color: #808030;\">\/<\/span> <span style=\"color: #008c00;\">2<\/span> <span style=\"color: #808030;\">-<\/span> Extent<span style=\"color: #808030;\">.<\/span>cx <span style=\"color: #808030;\">\/<\/span> <span style=\"color: #008c00;\">2<\/span><span style=\"color: #800080;\">;<\/span>\r\n    pnOutputDataU <span style=\"color: #808030;\">+<\/span><span style=\"color: #808030;\">=<\/span> nNextOutputRowOffset <span style=\"color: #808030;\">\/<\/span> <span style=\"color: #008c00;\">2<\/span> <span style=\"color: #808030;\">-<\/span> Extent<span style=\"color: #808030;\">.<\/span>cx <span style=\"color: #808030;\">\/<\/span> <span style=\"color: #008c00;\">2<\/span><span style=\"color: #800080;\">;<\/span>\r\n<span style=\"color: #800080;\">}<\/span>\r\nATLTRACE2<span style=\"color: #808030;\">(<\/span>atlTraceGeneral<span style=\"color: #808030;\">,<\/span> <span style=\"color: #008c00;\">5<\/span><span style=\"color: #808030;\">,<\/span> _T<span style=\"color: #808030;\">(<\/span><span style=\"color: #800000;\">\"<\/span><span style=\"color: #0000e6;\">pnOutputDataY 0x<\/span><span style=\"color: #0f69ff;\">%08x<\/span><span style=\"color: #0000e6;\">, pnOutputDataV 0x<\/span><span style=\"color: #0f69ff;\">%08x<\/span><span style=\"color: #0000e6;\">, pnOutputDataU 0x<\/span><span style=\"color: #0f69ff;\">%08x<\/span><span style=\"color: #0f69ff;\">\\n<\/span><span style=\"color: #800000;\">\"<\/span><span style=\"color: #808030;\">)<\/span><span style=\"color: #808030;\">,<\/span> pnOutputDataY<span style=\"color: #808030;\">,<\/span> pnOutputDataV<span style=\"color: #808030;\">,<\/span> pnOutputDataU<span style=\"color: #808030;\">)<\/span><\/pre>\n<p>See also:<\/p>\n<ul>\n<li><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/aa904813.aspx\">Video Rendering with 8-Bit YUV Formats<\/a><\/li>\n<li><a href=\"http:\/\/www.animemusicvideos.org\/guides\/avtech\/colorspace.html\">Colorspaces, YUY2 and YV12<\/a><\/li>\n<li><a href=\"http:\/\/forum.doom9.org\/archive\/index.php\/t-76455.html\">IYUV or YV12 colorspace?, YUV colorspaces SMPTE vs 601 vs 709<\/a><\/li>\n<li><a href=\"http:\/\/www.tomshardware.co.uk\/forum\/142470-15-feeding-cbcr-yv12-data-tmpgenc\">Feeding Y&#8217;CbCr (&#8220;YUV&#8221;\/&#8221;YV12&#8221;) data to TMPGEnc<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>See topic on MSDN Forums about coloring issue. This is a demo of YUY2 to YV12 conversion as suggested copying Y values and averaging U and V. Original image is on the right. Code snippet to perform the transformation:<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,12,10],"tags":[78,83,486,89,90],"class_list":["post-475","post","type-post","status-publish","format-standard","hentry","category-source","category-technology","category-video","tag-directshow","tag-dmo","tag-video","tag-yuy2","tag-yv12"],"_links":{"self":[{"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/posts\/475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/comments?post=475"}],"version-history":[{"count":0,"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/posts\/475\/revisions"}],"wp:attachment":[{"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/media?parent=475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/categories?post=475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/tags?post=475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}