簡體   English   中英

媒體基礎錯誤的視頻大小

[英]Media Foundation wrong video size

有時源閱讀器會返回不正確的視頻大小。 某些 H265 視頻文件會發生這種情況。

這是參考視頻: https: //drive.google.com/file/d/12oH9x7MCW7YFZu1MDKGbOnIt4VvxrgtZ/view?usp=share_link 3840x2160 像素

CComPtr<IMFSourceReader> r;
CComPtr<IMFMediaType> NativeMT;
MFCreateSourceReaderFromURL(L"file.mp4" 0, &r);
r->GetCurrentMediaType((DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM, &NativeMT);
UINT wi = 0,he = 0;
MFGetAttributeSize(NativeMT, MF_MT_FRAME_SIZE, &wi,&he);

這將返回 3840x2176。 為什么?

我會跟進更多問題,因為這種格式無法使用 Media Foundation 轉換為另一種 H264/H265 視頻。

所以你有視頻軌道的這種媒體類型:

  • MF_MT_FRAME_SIZE ,16492674418816(類型VT_UI8
  • MF_MT_MINIMUM_DISPLAY_APERTURE ,00 00 00 00 00 00 00 00 00 0F 00 00 70 08 00 00(類型VT_VECTOR | VT_UI1

后一個引用的屬性如下所示:

{OffsetX={fract=0 value=0 } OffsetY={fract=0 value=0 } Area={cx=3840 cy=2160 } }
  {fract=0 value=0 }
  {fract=0 value=0 }
  {cx=3840 cy=2160 }

您應該考慮到這一點,並准備好接受在 3840x2176 緩沖區中攜帶 3840x2160 負載的樣本。

相關問題: 處理來自 IMFSourceReader 和 IMFSample 的圖像數據

IMO 這仍然是一個錯誤,因為 H.265 多路分解器知道這是編碼視頻,並且填充沒有意義。 解碼器在設置帶有填充的紋理或緩沖區時會應用它,它只在那里開始變得重要。

此外,這是與 H.264 編解碼器 AFAIR 不同的行為。 然后,這種副作用 AFAIR 再次導致屬性表處理程序出現問題,該處理程序顯示媒體文件的錯誤分辨率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM