質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

2092閲覧

Swift2におけるCMSampleBufferCreateCopyWithNewTiming()メソッドの仕様変更について

ia_isier

総合スコア29

iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2015/11/18 06:23

編集2015/11/18 06:33

閲覧いただきありがとうございます。

Swift1.2にて動作していたコードをSwift2にコンバートしたところ、
以下のようなエラーメッセージを確認しました。

Cannot convert value of type 'Unmanaged<CMSampleBuffer>?' to expected argument type 'UnsafeMutablePointer<CMSampleBuffer?>' (aka 'UnsafeMutablePointer<Optional<CMSampleBuffer>>')

実際のコードは以下の通りになります。

swift

1func adjustTimeStamp(sample: CMSampleBufferRef, offset: CMTime) -> CMSampleBufferRef { 2 var count: CMItemCount = 0 3 CMSampleBufferGetSampleTimingInfoArray(sample, 0, nil, &count) 4 var info = [CMSampleTimingInfo](count: count, repeatedValue: CMSampleTimingInfo(duration: CMTimeMake(0, 0), presentationTimeStamp: CMTimeMake(0, 0), decodeTimeStamp: CMTimeMake(0, 0))) 5 CMSampleBufferGetSampleTimingInfoArray(sample, count, &info, &count) 6 7 for i in 0..<count { 8 info[i].decodeTimeStamp = CMTimeSubtract(info[i].decodeTimeStamp, offset) 9 info[i].presentationTimeStamp = CMTimeSubtract(info[i].presentationTimeStamp, offset) 10 } 11 12 let out: Unmanaged<CMSampleBuffer>? 13 CMSampleBufferCreateCopyWithNewTiming(nil, sample, count, &info, out) 14 return (out?.takeRetainedValue())! 15}

エラーメッセージの通り、
定数outUnsafeMutablePointer<CMSampleBuffer?>に変更したところ、
上記のエラーメッセージは消えましたが、
Unmanaged型からUnsafeMutablePointer型に変更された影響か、
takeRetainedValue()で返り値を返すことができなくなってしまいました。

上記の現象について対応策をご存知の方がいらっしゃいましたらご教授いただけますと幸いです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

相変わらず適当にコネコネしてるだけですが、

swift

1let out: UnsafeMutablePointer<CMSampleBuffer?> 2CMSampleBufferCreateCopyWithNewTiming(nil, sample, count, &info, out); 3return out.memory!

シンプルになるといけそうな気がしてきますw

投稿2015/11/18 07:22

編集2015/11/19 02:40
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ia_isier

2015/11/18 07:57

ありがとうございます! ご提示いただいたコードでエラーが消えたので、早速実機で確認してみました。 …が、`out`をキャストするタイミングでbreakpointが発生して挙動が止まってしまいました。 もう少し調べてみます…!
fuzzball

2015/11/19 02:31

第二弾追加しました。
ia_isier

2015/11/19 12:17

何度もご回答いただきありがとうございます…! いただいた回答を基に少しずつ手を加えてみたところ、 let out: UnsafeMutablePointer<CMSampleBuffer?> = UnsafeMutablePointer.alloc(1) CMSampleBufferCreateCopyWithNewTiming(nil, sample, count, &info, out) return out.memory! こちらのコードでエラーが消えることが確認できました。 しかし、コンバート前とコードの挙動が変わってしまい…前途多難ですね。 もう少し様子を見て他の方の回答がなければ締め切らせていただきます。 ありがとうございます!
ia_isier

2015/11/19 13:50

var out: CMSampleBuffer? CMSampleBufferCreateCopyWithNewTiming(nil, sample, count, &info, &out) return out! こちらのコードで無事動作確認できました。 ご協力、ありがとうございました!
fuzzball

2015/11/19 14:52

なんだか難しく考え過ぎていたみたいですね。私も色々と調べたりして(少しだけ)勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問