Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(332)

Side by Side Diff: webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc

Issue 1433273002: Update temporal up switch field for non-flexible mode according to updates in the RTP payload profi… (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 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 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 codec_specific->codecType = kVideoCodecVP9; 555 codec_specific->codecType = kVideoCodecVP9;
556 CodecSpecificInfoVP9 *vp9_info = &(codec_specific->codecSpecific.VP9); 556 CodecSpecificInfoVP9 *vp9_info = &(codec_specific->codecSpecific.VP9);
557 // TODO(asapersson): Set correct values. 557 // TODO(asapersson): Set correct values.
558 vp9_info->inter_pic_predicted = 558 vp9_info->inter_pic_predicted =
559 (pkt.data.frame.flags & VPX_FRAME_IS_KEY) ? false : true; 559 (pkt.data.frame.flags & VPX_FRAME_IS_KEY) ? false : true;
560 vp9_info->flexible_mode = codec_.codecSpecific.VP9.flexibleMode; 560 vp9_info->flexible_mode = codec_.codecSpecific.VP9.flexibleMode;
561 vp9_info->ss_data_available = ((pkt.data.frame.flags & VPX_FRAME_IS_KEY) && 561 vp9_info->ss_data_available = ((pkt.data.frame.flags & VPX_FRAME_IS_KEY) &&
562 !codec_.codecSpecific.VP9.flexibleMode) 562 !codec_.codecSpecific.VP9.flexibleMode)
563 ? true 563 ? true
564 : false; 564 : false;
565 if (pkt.data.frame.flags & VPX_FRAME_IS_KEY)
566 frames_since_kf_ = 0;
567 565
568 vpx_svc_layer_id_t layer_id = {0}; 566 vpx_svc_layer_id_t layer_id = {0};
569 vpx_codec_control(encoder_, VP9E_GET_SVC_LAYER_ID, &layer_id); 567 vpx_codec_control(encoder_, VP9E_GET_SVC_LAYER_ID, &layer_id);
570 568
571 assert(num_temporal_layers_ > 0); 569 assert(num_temporal_layers_ > 0);
572 assert(num_spatial_layers_ > 0); 570 assert(num_spatial_layers_ > 0);
573 if (num_temporal_layers_ == 1) { 571 if (num_temporal_layers_ == 1) {
574 assert(layer_id.temporal_layer_id == 0); 572 assert(layer_id.temporal_layer_id == 0);
575 vp9_info->temporal_idx = kNoTemporalIdx; 573 vp9_info->temporal_idx = kNoTemporalIdx;
576 } else { 574 } else {
(...skipping 17 matching lines...) Expand all
594 is_first_frame = 592 is_first_frame =
595 layer_id.spatial_layer_id == spatial_layer_->GetStartLayer(); 593 layer_id.spatial_layer_id == spatial_layer_->GetStartLayer();
596 } else { 594 } else {
597 is_first_frame = layer_id.spatial_layer_id == 0; 595 is_first_frame = layer_id.spatial_layer_id == 0;
598 } 596 }
599 597
600 if (is_first_frame) { 598 if (is_first_frame) {
601 picture_id_ = (picture_id_ + 1) & 0x7FFF; 599 picture_id_ = (picture_id_ + 1) & 0x7FFF;
602 // TODO(asapersson): this info has to be obtained from the encoder. 600 // TODO(asapersson): this info has to be obtained from the encoder.
603 vp9_info->inter_layer_predicted = false; 601 vp9_info->inter_layer_predicted = false;
602 ++frames_since_kf_;
604 } else { 603 } else {
605 // TODO(asapersson): this info has to be obtained from the encoder. 604 // TODO(asapersson): this info has to be obtained from the encoder.
606 vp9_info->inter_layer_predicted = true; 605 vp9_info->inter_layer_predicted = true;
607 } 606 }
608 607
608 if (pkt.data.frame.flags & VPX_FRAME_IS_KEY) {
609 frames_since_kf_ = 0;
610 }
611
609 vp9_info->picture_id = picture_id_; 612 vp9_info->picture_id = picture_id_;
610 613
611 if (!vp9_info->flexible_mode) { 614 if (!vp9_info->flexible_mode) {
612 if (layer_id.temporal_layer_id == 0 && layer_id.spatial_layer_id == 0) { 615 if (layer_id.temporal_layer_id == 0 && layer_id.spatial_layer_id == 0) {
613 tl0_pic_idx_++; 616 tl0_pic_idx_++;
614 } 617 }
615 vp9_info->tl0_pic_idx = tl0_pic_idx_; 618 vp9_info->tl0_pic_idx = tl0_pic_idx_;
616 } 619 }
617 620
618 // Always populate this, so that the packetizer can properly set the marker 621 // Always populate this, so that the packetizer can properly set the marker
619 // bit. 622 // bit.
620 vp9_info->num_spatial_layers = num_spatial_layers_; 623 vp9_info->num_spatial_layers = num_spatial_layers_;
621 624
622 vp9_info->num_ref_pics = 0; 625 vp9_info->num_ref_pics = 0;
623 if (vp9_info->flexible_mode) { 626 if (vp9_info->flexible_mode) {
624 vp9_info->gof_idx = kNoGofIdx; 627 vp9_info->gof_idx = kNoGofIdx;
625 vp9_info->num_ref_pics = num_ref_pics_[layer_id.spatial_layer_id]; 628 vp9_info->num_ref_pics = num_ref_pics_[layer_id.spatial_layer_id];
626 for (int i = 0; i < num_ref_pics_[layer_id.spatial_layer_id]; ++i) { 629 for (int i = 0; i < num_ref_pics_[layer_id.spatial_layer_id]; ++i) {
627 vp9_info->p_diff[i] = p_diff_[layer_id.spatial_layer_id][i]; 630 vp9_info->p_diff[i] = p_diff_[layer_id.spatial_layer_id][i];
628 } 631 }
629 } else { 632 } else {
630 vp9_info->gof_idx = 633 vp9_info->gof_idx =
631 static_cast<uint8_t>(frames_since_kf_ % gof_.num_frames_in_gof); 634 static_cast<uint8_t>(frames_since_kf_ % gof_.num_frames_in_gof);
635 vp9_info->temporal_up_switch = gof_.temporal_up_switch[vp9_info->gof_idx];
632 } 636 }
633 ++frames_since_kf_;
634 637
635 if (vp9_info->ss_data_available) { 638 if (vp9_info->ss_data_available) {
636 vp9_info->spatial_layer_resolution_present = true; 639 vp9_info->spatial_layer_resolution_present = true;
637 for (size_t i = 0; i < vp9_info->num_spatial_layers; ++i) { 640 for (size_t i = 0; i < vp9_info->num_spatial_layers; ++i) {
638 vp9_info->width[i] = codec_.width * 641 vp9_info->width[i] = codec_.width *
639 svc_internal_.svc_params.scaling_factor_num[i] / 642 svc_internal_.svc_params.scaling_factor_num[i] /
640 svc_internal_.svc_params.scaling_factor_den[i]; 643 svc_internal_.svc_params.scaling_factor_den[i];
641 vp9_info->height[i] = codec_.height * 644 vp9_info->height[i] = codec_.height *
642 svc_internal_.svc_params.scaling_factor_num[i] / 645 svc_internal_.svc_params.scaling_factor_num[i] /
643 svc_internal_.svc_params.scaling_factor_den[i]; 646 svc_internal_.svc_params.scaling_factor_den[i];
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 decoder_ = NULL; 978 decoder_ = NULL;
976 } 979 }
977 // Releases buffers from the pool. Any buffers not in use are deleted. Buffers 980 // Releases buffers from the pool. Any buffers not in use are deleted. Buffers
978 // still referenced externally are deleted once fully released, not returning 981 // still referenced externally are deleted once fully released, not returning
979 // to the pool. 982 // to the pool.
980 frame_buffer_pool_.ClearPool(); 983 frame_buffer_pool_.ClearPool();
981 inited_ = false; 984 inited_ = false;
982 return WEBRTC_VIDEO_CODEC_OK; 985 return WEBRTC_VIDEO_CODEC_OK;
983 } 986 }
984 } // namespace webrtc 987 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698