| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 class MediaCodecVideoDecoder : public webrtc::VideoDecoder, | 67 class MediaCodecVideoDecoder : public webrtc::VideoDecoder, |
| 68 public rtc::MessageHandler { | 68 public rtc::MessageHandler { |
| 69 public: | 69 public: |
| 70 explicit MediaCodecVideoDecoder( | 70 explicit MediaCodecVideoDecoder( |
| 71 JNIEnv* jni, VideoCodecType codecType, jobject render_egl_context); | 71 JNIEnv* jni, VideoCodecType codecType, jobject render_egl_context); |
| 72 virtual ~MediaCodecVideoDecoder(); | 72 virtual ~MediaCodecVideoDecoder(); |
| 73 | 73 |
| 74 int32_t InitDecode(const VideoCodec* codecSettings, int32_t numberOfCores) | 74 int32_t InitDecode(const VideoCodec* codecSettings, int32_t numberOfCores) |
| 75 override; | 75 override; |
| 76 | 76 |
| 77 int32_t Decode( | 77 int32_t Decode(const EncodedImage& inputImage, |
| 78 const EncodedImage& inputImage, bool missingFrames, | 78 bool missingFrames, |
| 79 const RTPFragmentationHeader* fragmentation, | 79 const RTPFragmentationHeader* fragmentation, |
| 80 const CodecSpecificInfo* codecSpecificInfo = NULL, | 80 const CodecSpecificInfo* codecSpecificInfo = nullptr, |
| 81 int64_t renderTimeMs = -1) override; | 81 int64_t renderTimeMs = -1) override; |
| 82 | 82 |
| 83 int32_t RegisterDecodeCompleteCallback(DecodedImageCallback* callback) | 83 int32_t RegisterDecodeCompleteCallback(DecodedImageCallback* callback) |
| 84 override; | 84 override; |
| 85 | 85 |
| 86 int32_t Release() override; | 86 int32_t Release() override; |
| 87 | 87 |
| 88 bool PrefersLateDecoding() const override { return true; } | 88 bool PrefersLateDecoding() const override { return true; } |
| 89 | 89 |
| 90 // rtc::MessageHandler implementation. | 90 // rtc::MessageHandler implementation. |
| 91 void OnMessage(rtc::Message* msg) override; | 91 void OnMessage(rtc::Message* msg) override; |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 jni, | 188 jni, |
| 189 FindClass(jni, "org/webrtc/MediaCodecVideoDecoder")), | 189 FindClass(jni, "org/webrtc/MediaCodecVideoDecoder")), |
| 190 j_media_codec_video_decoder_( | 190 j_media_codec_video_decoder_( |
| 191 jni, | 191 jni, |
| 192 jni->NewObject(*j_media_codec_video_decoder_class_, | 192 jni->NewObject(*j_media_codec_video_decoder_class_, |
| 193 GetMethodID(jni, | 193 GetMethodID(jni, |
| 194 *j_media_codec_video_decoder_class_, | 194 *j_media_codec_video_decoder_class_, |
| 195 "<init>", | 195 "<init>", |
| 196 "()V"))) { | 196 "()V"))) { |
| 197 ScopedLocalRefFrame local_ref_frame(jni); | 197 ScopedLocalRefFrame local_ref_frame(jni); |
| 198 codec_thread_->SetName("MediaCodecVideoDecoder", NULL); | 198 codec_thread_->SetName("MediaCodecVideoDecoder", nullptr); |
| 199 RTC_CHECK(codec_thread_->Start()) << "Failed to start MediaCodecVideoDecoder"; | 199 RTC_CHECK(codec_thread_->Start()) << "Failed to start MediaCodecVideoDecoder"; |
| 200 | 200 |
| 201 j_init_decode_method_ = GetMethodID( | 201 j_init_decode_method_ = GetMethodID( |
| 202 jni, *j_media_codec_video_decoder_class_, "initDecode", | 202 jni, *j_media_codec_video_decoder_class_, "initDecode", |
| 203 "(Lorg/webrtc/MediaCodecVideoDecoder$VideoCodecType;" | 203 "(Lorg/webrtc/MediaCodecVideoDecoder$VideoCodecType;" |
| 204 "IILorg/webrtc/SurfaceTextureHelper;)Z"); | 204 "IILorg/webrtc/SurfaceTextureHelper;)Z"); |
| 205 j_reset_method_ = | 205 j_reset_method_ = |
| 206 GetMethodID(jni, *j_media_codec_video_decoder_class_, "reset", "(II)V"); | 206 GetMethodID(jni, *j_media_codec_video_decoder_class_, "reset", "(II)V"); |
| 207 j_release_method_ = | 207 j_release_method_ = |
| 208 GetMethodID(jni, *j_media_codec_video_decoder_class_, "release", "()V"); | 208 GetMethodID(jni, *j_media_codec_video_decoder_class_, "release", "()V"); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 j_presentation_timestamp_ms_field_ = GetFieldID( | 265 j_presentation_timestamp_ms_field_ = GetFieldID( |
| 266 jni, j_decoded_output_buffer_class, "presentationTimeStampMs", "J"); | 266 jni, j_decoded_output_buffer_class, "presentationTimeStampMs", "J"); |
| 267 j_timestamp_ms_field_ = GetFieldID( | 267 j_timestamp_ms_field_ = GetFieldID( |
| 268 jni, j_decoded_output_buffer_class, "timeStampMs", "J"); | 268 jni, j_decoded_output_buffer_class, "timeStampMs", "J"); |
| 269 j_ntp_timestamp_ms_field_ = GetFieldID( | 269 j_ntp_timestamp_ms_field_ = GetFieldID( |
| 270 jni, j_decoded_output_buffer_class, "ntpTimeStampMs", "J"); | 270 jni, j_decoded_output_buffer_class, "ntpTimeStampMs", "J"); |
| 271 j_byte_buffer_decode_time_ms_field_ = GetFieldID( | 271 j_byte_buffer_decode_time_ms_field_ = GetFieldID( |
| 272 jni, j_decoded_output_buffer_class, "decodeTimeMs", "J"); | 272 jni, j_decoded_output_buffer_class, "decodeTimeMs", "J"); |
| 273 | 273 |
| 274 CHECK_EXCEPTION(jni) << "MediaCodecVideoDecoder ctor failed"; | 274 CHECK_EXCEPTION(jni) << "MediaCodecVideoDecoder ctor failed"; |
| 275 use_surface_ = (render_egl_context_ != NULL); | 275 use_surface_ = (render_egl_context_ != nullptr); |
| 276 ALOGD << "MediaCodecVideoDecoder ctor. Use surface: " << use_surface_; | 276 ALOGD << "MediaCodecVideoDecoder ctor. Use surface: " << use_surface_; |
| 277 memset(&codec_, 0, sizeof(codec_)); | 277 memset(&codec_, 0, sizeof(codec_)); |
| 278 AllowBlockingCalls(); | 278 AllowBlockingCalls(); |
| 279 } | 279 } |
| 280 | 280 |
| 281 MediaCodecVideoDecoder::~MediaCodecVideoDecoder() { | 281 MediaCodecVideoDecoder::~MediaCodecVideoDecoder() { |
| 282 // Call Release() to ensure no more callbacks to us after we are deleted. | 282 // Call Release() to ensure no more callbacks to us after we are deleted. |
| 283 Release(); | 283 Release(); |
| 284 } | 284 } |
| 285 | 285 |
| 286 int32_t MediaCodecVideoDecoder::InitDecode(const VideoCodec* inst, | 286 int32_t MediaCodecVideoDecoder::InitDecode(const VideoCodec* inst, |
| 287 int32_t numberOfCores) { | 287 int32_t numberOfCores) { |
| 288 ALOGD << "InitDecode."; | 288 ALOGD << "InitDecode."; |
| 289 if (inst == NULL) { | 289 if (inst == nullptr) { |
| 290 ALOGE << "NULL VideoCodec instance"; | 290 ALOGE << "null VideoCodec instance"; |
| 291 return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; | 291 return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; |
| 292 } | 292 } |
| 293 // Factory should guard against other codecs being used with us. | 293 // Factory should guard against other codecs being used with us. |
| 294 RTC_CHECK(inst->codecType == codecType_) | 294 RTC_CHECK(inst->codecType == codecType_) |
| 295 << "Unsupported codec " << inst->codecType << " for " << codecType_; | 295 << "Unsupported codec " << inst->codecType << " for " << codecType_; |
| 296 | 296 |
| 297 if (sw_fallback_required_) { | 297 if (sw_fallback_required_) { |
| 298 ALOGE << "InitDecode() - fallback to SW decoder"; | 298 ALOGE << "InitDecode() - fallback to SW decoder"; |
| 299 return WEBRTC_VIDEO_CODEC_OK; | 299 return WEBRTC_VIDEO_CODEC_OK; |
| 300 } | 300 } |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 507 int32_t MediaCodecVideoDecoder::Decode( | 507 int32_t MediaCodecVideoDecoder::Decode( |
| 508 const EncodedImage& inputImage, | 508 const EncodedImage& inputImage, |
| 509 bool missingFrames, | 509 bool missingFrames, |
| 510 const RTPFragmentationHeader* fragmentation, | 510 const RTPFragmentationHeader* fragmentation, |
| 511 const CodecSpecificInfo* codecSpecificInfo, | 511 const CodecSpecificInfo* codecSpecificInfo, |
| 512 int64_t renderTimeMs) { | 512 int64_t renderTimeMs) { |
| 513 if (sw_fallback_required_) { | 513 if (sw_fallback_required_) { |
| 514 ALOGE << "Decode() - fallback to SW codec"; | 514 ALOGE << "Decode() - fallback to SW codec"; |
| 515 return WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE; | 515 return WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE; |
| 516 } | 516 } |
| 517 if (callback_ == NULL) { | 517 if (callback_ == nullptr) { |
| 518 ALOGE << "Decode() - callback_ is NULL"; | 518 ALOGE << "Decode() - callback_ is null"; |
| 519 return WEBRTC_VIDEO_CODEC_UNINITIALIZED; | 519 return WEBRTC_VIDEO_CODEC_UNINITIALIZED; |
| 520 } | 520 } |
| 521 if (inputImage._buffer == NULL && inputImage._length > 0) { | 521 if (inputImage._buffer == nullptr && inputImage._length > 0) { |
| 522 ALOGE << "Decode() - inputImage is incorrect"; | 522 ALOGE << "Decode() - inputImage is incorrect"; |
| 523 return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; | 523 return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; |
| 524 } | 524 } |
| 525 if (!inited_) { | 525 if (!inited_) { |
| 526 ALOGE << "Decode() - decoder is not initialized"; | 526 ALOGE << "Decode() - decoder is not initialized"; |
| 527 return WEBRTC_VIDEO_CODEC_UNINITIALIZED; | 527 return WEBRTC_VIDEO_CODEC_UNINITIALIZED; |
| 528 } | 528 } |
| 529 | 529 |
| 530 // Check if encoded frame dimension has changed. | 530 // Check if encoded frame dimension has changed. |
| 531 if ((inputImage._encodedWidth * inputImage._encodedHeight > 0) && | 531 if ((inputImage._encodedWidth * inputImage._encodedHeight > 0) && |
| (...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 980 webrtc::VideoDecoder* decoder) { | 980 webrtc::VideoDecoder* decoder) { |
| 981 ALOGD << "Destroy video decoder."; | 981 ALOGD << "Destroy video decoder."; |
| 982 delete decoder; | 982 delete decoder; |
| 983 } | 983 } |
| 984 | 984 |
| 985 const char* MediaCodecVideoDecoder::ImplementationName() const { | 985 const char* MediaCodecVideoDecoder::ImplementationName() const { |
| 986 return "MediaCodec"; | 986 return "MediaCodec"; |
| 987 } | 987 } |
| 988 | 988 |
| 989 } // namespace webrtc_jni | 989 } // namespace webrtc_jni |
| OLD | NEW |