开发者

Getting Matrix (CGAffineTransform) Info from iPhone Movies in C#/C++

开发者 https://www.devze.com 2023-04-03 03:55 出处:网络
When the iPhone records a video it puts the data from the camera directly onto the disk. What tells the player how to reorient the video is the Transform Matrix. Its a Mathematics structure that is us

When the iPhone records a video it puts the data from the camera directly onto the disk. What tells the player how to reorient the video is the Transform Matrix. Its a Mathematics structure that is used to change the position of the pixels in X,Y space.

In the iPhone and in the Macintosh I can ask the Video what its Transform is, and I get back a CGAffineTransform with a b c d tx and ty. Apple describes the Transform Matrix here

With this information I can determine what the Video layout is supposed to be and determine if it is expecting to be rotated before display.

I can get this information with ease in the osx and ios environments. I am trying to determine a way to get the same matrix information with Windows. Preferrable C# however if I must use C++ then so be it. Active开发者_运维技巧 X solutions are entirely undesirable and I am hoping that the Quicktime SDK for windows has some use. Otherwise what the heck did Apple write it for ??

If anyone knows how to obtain the Transform Matrix from a video or any place to start please, point me in the right direction.


It appears that the CGAffineTransform is something that will need to be pulled right out of the file itself. I used the Quicktime File Format Specification pdf to gain an understanding of the file and where to get the CGAffineMatrix

Here is a link to the page with the Matrix data on it

Quicktime File Format Specification Matrix Info

as you can see from this clip the matrix is in the Movie header atom. dignified with the 'mvhd' type.

it is a total of 36 Bytes long and is a total of 36 bytes after the 'mvhd' atom typename.

Given the file format specifications of the frames and tracks the Matrix can change throughout the playback of the video. But it is my experience that this method is not exercised on the videos that are output from the iphone.

I imagine that the matrix will need to be grabbed from each frame sometime in the near future and perhaps this is something that FFMpeg or other video format applications can work into their frame grabbers and video translators. But since I currently do not have a version of ffmpeg that used this matrix information I will be creating a simple Movie header grabber that will pull out the matrix and allow me to adjust my ffmpeg command line parameters accordingly, allowing me to translate my video appropriately..

If I come up with a better idea I will try to include this post on that knowledge.

Getting Matrix (CGAffineTransform) Info from iPhone Movies in C#/C++

A side note on the journey to this answer

For all of those who downvoted this question because You did not know what I was talking about. A request to clarify could have been quite sufficient. Coming in and downvoting because you dont understand or dont know the answer is neither constructive or fair. This is a very specific question and this answer will assist more than just myself.

I believe in helping to spread all kinds of knowledge and those of you who think its helpful to downvote because you just dont have any clue on how to help. I hope this gives you a better understanding of the issues that people are looking to solve. Just because you dont know what the problem is does not mean you should turn your nose up at it and certainly does not mean that you should discount those looking for answers that you cannot provide.

I am glad that I have an answer to my question and will definitely be open to any further criticism to the answer that I have given. Perhaps this answer will spark more questions about this issue and I will be able to learn and contribute to the future discussions about it

Thank you StackOverflow for restoring my question so I could answer it appropriately.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号