diff --git a/.arcconfig b/.arcconfig --- a/.arcconfig +++ b/.arcconfig @@ -1,5 +1,5 @@ { - "phabricator.uri" : "https://phabricator.services.mozilla.com/", + "phabricator.uri" : "https://phabricator-dev.allizom.org/", "repository.callsign": "MOZILLACENTRAL", "history.immutable": false } diff --git a/media/libdav1d/moz.yaml b/media/libdav1d/moz.yaml --- a/media/libdav1d/moz.yaml +++ b/media/libdav1d/moz.yaml @@ -18,15 +18,15 @@ # Usually different from repository url url: https://code.videolan.org/videolan/dav1d # Human-readable identifier for this version/release # Generally "version NNN", "tag SSS", "bookmark SSS" - release: commit 0243c3ffb644e61848b82f24f5e4a7324669d76e (2020-09-27T15:38:45.000+02:00). + release: commit ffd052bdf513f3284f0a07403caed24035612b3f (2020-11-07T09:51:05.000+08:00). # Revision to pull in # Must be a long or short commit SHA (long preferred) - revision: 0243c3ffb644e61848b82f24f5e4a7324669d76e + revision: ffd052bdf513f3284f0a07403caed24035612b3f # The package's license, where possible using the mnemonic from # https://spdx.org/licenses/ # Multiple licenses can be specified (as a YAML list) # A "LICENSE" file must exist containing the full license text diff --git a/media/libdav1d/vcs_version.h b/media/libdav1d/vcs_version.h --- a/media/libdav1d/vcs_version.h +++ b/media/libdav1d/vcs_version.h @@ -1,2 +1,2 @@ /* auto-generated, do not edit */ -#define DAV1D_VERSION "0.7.1-81-g0243c3f" +#define DAV1D_VERSION "ffd052bdf513f3284f0a07403caed24035612b3f" diff --git a/third_party/dav1d/src/decode.c b/third_party/dav1d/src/decode.c --- a/third_party/dav1d/src/decode.c +++ b/third_party/dav1d/src/decode.c @@ -2676,21 +2676,21 @@ f->tile_thread.titsati_init[1] != f->frame_hdr->tiling.rows || memcmp(f->frame_hdr->tiling.row_start_sb, f->tile_thread.titsati_index_rows, sizeof(*f->tile_thread.titsati_index_rows) * (f->frame_hdr->tiling.rows + 1))) { - for (int tile_row = 0, tile_idx = 0; + for (int tile_row = 0, task_idx = 0; tile_row < f->frame_hdr->tiling.rows; tile_row++) { for (int sby = f->frame_hdr->tiling.row_start_sb[tile_row]; sby < f->frame_hdr->tiling.row_start_sb[tile_row + 1]; sby++) { for (int tile_col = 0; tile_col < f->frame_hdr->tiling.cols; - tile_col++, tile_idx++) + tile_col++, task_idx++) { - f->tile_thread.task_idx_to_sby_and_tile_idx[tile_idx][0] = sby; - f->tile_thread.task_idx_to_sby_and_tile_idx[tile_idx][1] = + f->tile_thread.task_idx_to_sby_and_tile_idx[task_idx][0] = sby; + f->tile_thread.task_idx_to_sby_and_tile_idx[task_idx][1] = tile_row * f->frame_hdr->tiling.cols + tile_col; } } } f->tile_thread.titsati_init[0] = f->frame_hdr->tiling.cols; @@ -3100,11 +3100,11 @@ if (c->n_fc > 1) for (int n = 0; n < 7; n++) if (dav1d_thread_picture_wait(&f->refp[n], 4 * (t->by + f->sb_step), PLANE_TYPE_BLOCK)) { - return 1; + goto error; } dav1d_refmvs_load_tmvs(&f->rf, tile_row, 0, f->bw >> 1, t->by >> 1, by_end); } for (int tile_col = 0; tile_col < f->frame_hdr->tiling.cols; tile_col++) { diff --git a/third_party/dav1d/src/obu.c b/third_party/dav1d/src/obu.c --- a/third_party/dav1d/src/obu.c +++ b/third_party/dav1d/src/obu.c @@ -53,19 +53,19 @@ #endif hdr->profile = dav1d_get_bits(gb, 3); if (hdr->profile > 2) goto error; #if DEBUG_SEQ_HDR - printf("SEQHDR: post-profile: off=%ld\n", + printf("SEQHDR: post-profile: off=%u\n", dav1d_get_bits_pos(gb) - init_bit_pos); #endif hdr->still_picture = dav1d_get_bits(gb, 1); hdr->reduced_still_picture_header = dav1d_get_bits(gb, 1); if (hdr->reduced_still_picture_header && !hdr->still_picture) goto error; #if DEBUG_SEQ_HDR - printf("SEQHDR: post-stillpicture_flags: off=%ld\n", + printf("SEQHDR: post-stillpicture_flags: off=%u\n", dav1d_get_bits_pos(gb) - init_bit_pos); #endif if (hdr->reduced_still_picture_header) { hdr->timing_info_present = 0; @@ -100,11 +100,11 @@ } } else { hdr->decoder_model_info_present = 0; } #if DEBUG_SEQ_HDR - printf("SEQHDR: post-timinginfo: off=%ld\n", + printf("SEQHDR: post-timinginfo: off=%u\n", dav1d_get_bits_pos(gb) - init_bit_pos); #endif hdr->display_model_info_present = dav1d_get_bits(gb, 1); hdr->num_operating_points = dav1d_get_bits(gb, 5) + 1; @@ -136,31 +136,31 @@ } const int op_idx = c->operating_point < hdr->num_operating_points ? c->operating_point : 0; c->operating_point_idc = hdr->operating_points[op_idx].idc; #if DEBUG_SEQ_HDR - printf("SEQHDR: post-operating-points: off=%ld\n", + printf("SEQHDR: post-operating-points: off=%u\n", dav1d_get_bits_pos(gb) - init_bit_pos); #endif } hdr->width_n_bits = dav1d_get_bits(gb, 4) + 1; hdr->height_n_bits = dav1d_get_bits(gb, 4) + 1; hdr->max_width = dav1d_get_bits(gb, hdr->width_n_bits) + 1; hdr->max_height = dav1d_get_bits(gb, hdr->height_n_bits) + 1; #if DEBUG_SEQ_HDR - printf("SEQHDR: post-size: off=%ld\n", + printf("SEQHDR: post-size: off=%u\n", dav1d_get_bits_pos(gb) - init_bit_pos); #endif hdr->frame_id_numbers_present = hdr->reduced_still_picture_header ? 0 : dav1d_get_bits(gb, 1); if (hdr->frame_id_numbers_present) { hdr->delta_frame_id_n_bits = dav1d_get_bits(gb, 4) + 2; hdr->frame_id_n_bits = dav1d_get_bits(gb, 3) + hdr->delta_frame_id_n_bits + 1; } #if DEBUG_SEQ_HDR - printf("SEQHDR: post-frame-id-numbers-present: off=%ld\n", + printf("SEQHDR: post-frame-id-numbers-present: off=%u\n", dav1d_get_bits_pos(gb) - init_bit_pos); #endif hdr->sb128 = dav1d_get_bits(gb, 1); hdr->filter_intra = dav1d_get_bits(gb, 1); @@ -190,11 +190,11 @@ hdr->ref_frame_mvs = 0; hdr->order_hint_n_bits = 0; } hdr->screen_content_tools = dav1d_get_bits(gb, 1) ? DAV1D_ADAPTIVE : dav1d_get_bits(gb, 1); #if DEBUG_SEQ_HDR - printf("SEQHDR: post-screentools: off=%ld\n", + printf("SEQHDR: post-screentools: off=%u\n", dav1d_get_bits_pos(gb) - init_bit_pos); #endif hdr->force_integer_mv = hdr->screen_content_tools ? dav1d_get_bits(gb, 1) ? DAV1D_ADAPTIVE : dav1d_get_bits(gb, 1) : 2; if (hdr->order_hint) @@ -202,11 +202,11 @@ } hdr->super_res = dav1d_get_bits(gb, 1); hdr->cdef = dav1d_get_bits(gb, 1); hdr->restoration = dav1d_get_bits(gb, 1); #if DEBUG_SEQ_HDR - printf("SEQHDR: post-featurebits: off=%ld\n", + printf("SEQHDR: post-featurebits: off=%u\n", dav1d_get_bits_pos(gb) - init_bit_pos); #endif hdr->hbd = dav1d_get_bits(gb, 1); if (hdr->profile == 2 && hdr->hbd) hdr->hbd += dav1d_get_bits(gb, 1); @@ -262,17 +262,17 @@ hdr->chr = hdr->ss_hor == 1 && hdr->ss_ver == 1 ? dav1d_get_bits(gb, 2) : DAV1D_CHR_UNKNOWN; } hdr->separate_uv_delta_q = !hdr->monochrome && dav1d_get_bits(gb, 1); #if DEBUG_SEQ_HDR - printf("SEQHDR: post-colorinfo: off=%ld\n", + printf("SEQHDR: post-colorinfo: off=%u\n", dav1d_get_bits_pos(gb) - init_bit_pos); #endif hdr->film_grain_present = dav1d_get_bits(gb, 1); #if DEBUG_SEQ_HDR - printf("SEQHDR: post-filmgrain: off=%ld\n", + printf("SEQHDR: post-filmgrain: off=%u\n", dav1d_get_bits_pos(gb) - init_bit_pos); #endif dav1d_get_bits(gb, 1); // dummy bit @@ -365,11 +365,11 @@ Dav1dFrameHeader *const hdr = c->frame_hdr; hdr->show_existing_frame = !seqhdr->reduced_still_picture_header && dav1d_get_bits(gb, 1); #if DEBUG_FRAME_HDR - printf("HDR: post-show_existing_frame: off=%ld\n", + printf("HDR: post-show_existing_frame: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif if (hdr->show_existing_frame) { hdr->existing_frame_idx = dav1d_get_bits(gb, 3); if (seqhdr->decoder_model_info_present && !seqhdr->equal_picture_interval) @@ -389,11 +389,11 @@ hdr->error_resilient_mode = (hdr->frame_type == DAV1D_FRAME_TYPE_KEY && hdr->show_frame) || hdr->frame_type == DAV1D_FRAME_TYPE_SWITCH || seqhdr->reduced_still_picture_header || dav1d_get_bits(gb, 1); #if DEBUG_FRAME_HDR - printf("HDR: post-frametype_bits: off=%ld\n", + printf("HDR: post-frametype_bits: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif hdr->disable_cdf_update = dav1d_get_bits(gb, 1); hdr->allow_screen_content_tools = seqhdr->screen_content_tools == DAV1D_ADAPTIVE ? dav1d_get_bits(gb, 1) : seqhdr->screen_content_tools; @@ -410,11 +410,11 @@ hdr->frame_id = dav1d_get_bits(gb, seqhdr->frame_id_n_bits); hdr->frame_size_override = seqhdr->reduced_still_picture_header ? 0 : hdr->frame_type == DAV1D_FRAME_TYPE_SWITCH ? 1 : dav1d_get_bits(gb, 1); #if DEBUG_FRAME_HDR - printf("HDR: post-frame_size_override_flag: off=%ld\n", + printf("HDR: post-frame_size_override_flag: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif hdr->frame_offset = seqhdr->order_hint ? dav1d_get_bits(gb, seqhdr->order_hint_n_bits) : 0; hdr->primary_ref_frame = !hdr->error_resilient_mode && hdr->frame_type & 1 ? @@ -563,18 +563,18 @@ hdr->use_ref_frame_mvs = !hdr->error_resilient_mode && seqhdr->ref_frame_mvs && seqhdr->order_hint && hdr->frame_type & 1 && dav1d_get_bits(gb, 1); } #if DEBUG_FRAME_HDR - printf("HDR: post-frametype-specific-bits: off=%ld\n", + printf("HDR: post-frametype-specific-bits: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif hdr->refresh_context = !seqhdr->reduced_still_picture_header && !hdr->disable_cdf_update && !dav1d_get_bits(gb, 1); #if DEBUG_FRAME_HDR - printf("HDR: post-refresh_context: off=%ld\n", + printf("HDR: post-refresh_context: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif // tile data hdr->tiling.uniform = dav1d_get_bits(gb, 1); @@ -644,11 +644,11 @@ hdr->tiling.n_bytes = dav1d_get_bits(gb, 2) + 1; } else { hdr->tiling.n_bytes = hdr->tiling.update = 0; } #if DEBUG_FRAME_HDR - printf("HDR: post-tiling: off=%ld\n", + printf("HDR: post-tiling: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif // quant data hdr->quant.yac = dav1d_get_bits(gb, 8); @@ -667,11 +667,11 @@ hdr->quant.vdc_delta = hdr->quant.udc_delta; hdr->quant.vac_delta = hdr->quant.uac_delta; } } #if DEBUG_FRAME_HDR - printf("HDR: post-quant: off=%ld\n", + printf("HDR: post-quant: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif hdr->quant.qm = dav1d_get_bits(gb, 1); if (hdr->quant.qm) { hdr->quant.qm_y = dav1d_get_bits(gb, 4); @@ -679,11 +679,11 @@ hdr->quant.qm_v = seqhdr->separate_uv_delta_q ? (int)dav1d_get_bits(gb, 4) : hdr->quant.qm_u; } #if DEBUG_FRAME_HDR - printf("HDR: post-qm: off=%ld\n", + printf("HDR: post-qm: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif // segmentation data hdr->segmentation.enabled = dav1d_get_bits(gb, 1); @@ -764,11 +764,11 @@ memset(&hdr->segmentation.seg_data, 0, sizeof(Dav1dSegmentationDataSet)); for (int i = 0; i < DAV1D_MAX_SEGMENTS; i++) hdr->segmentation.seg_data.d[i].ref = -1; } #if DEBUG_FRAME_HDR - printf("HDR: post-segmentation: off=%ld\n", + printf("HDR: post-segmentation: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif // delta q hdr->delta.q.present = hdr->quant.yac ? dav1d_get_bits(gb, 1) : 0; @@ -776,11 +776,11 @@ hdr->delta.lf.present = hdr->delta.q.present && !hdr->allow_intrabc && dav1d_get_bits(gb, 1); hdr->delta.lf.res_log2 = hdr->delta.lf.present ? dav1d_get_bits(gb, 2) : 0; hdr->delta.lf.multi = hdr->delta.lf.present ? dav1d_get_bits(gb, 1) : 0; #if DEBUG_FRAME_HDR - printf("HDR: post-delta_q_lf_flags: off=%ld\n", + printf("HDR: post-delta_q_lf_flags: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif // derive lossless flags const int delta_lossless = !hdr->quant.ydc_delta && !hdr->quant.udc_delta && @@ -836,11 +836,11 @@ dav1d_get_sbits(gb, 6); } } } #if DEBUG_FRAME_HDR - printf("HDR: post-lpf: off=%ld\n", + printf("HDR: post-lpf: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif // cdef if (!hdr->all_lossless && seqhdr->cdef && !hdr->allow_intrabc) { @@ -855,11 +855,11 @@ hdr->cdef.n_bits = 0; hdr->cdef.y_strength[0] = 0; hdr->cdef.uv_strength[0] = 0; } #if DEBUG_FRAME_HDR - printf("HDR: post-cdef: off=%ld\n", + printf("HDR: post-cdef: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif // restoration if ((!hdr->all_lossless || hdr->super_res.enabled) && @@ -897,23 +897,23 @@ hdr->restoration.type[0] = DAV1D_RESTORATION_NONE; hdr->restoration.type[1] = DAV1D_RESTORATION_NONE; hdr->restoration.type[2] = DAV1D_RESTORATION_NONE; } #if DEBUG_FRAME_HDR - printf("HDR: post-restoration: off=%ld\n", + printf("HDR: post-restoration: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif hdr->txfm_mode = hdr->all_lossless ? DAV1D_TX_4X4_ONLY : dav1d_get_bits(gb, 1) ? DAV1D_TX_SWITCHABLE : DAV1D_TX_LARGEST; #if DEBUG_FRAME_HDR - printf("HDR: post-txfmmode: off=%ld\n", + printf("HDR: post-txfmmode: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif hdr->switchable_comp_refs = hdr->frame_type & 1 ? dav1d_get_bits(gb, 1) : 0; #if DEBUG_FRAME_HDR - printf("HDR: post-refmode: off=%ld\n", + printf("HDR: post-refmode: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif hdr->skip_mode_allowed = 0; if (hdr->switchable_comp_refs && hdr->frame_type & 1 && seqhdr->order_hint) { const unsigned poc = hdr->frame_offset; @@ -970,22 +970,22 @@ } } } hdr->skip_mode_enabled = hdr->skip_mode_allowed ? dav1d_get_bits(gb, 1) : 0; #if DEBUG_FRAME_HDR - printf("HDR: post-extskip: off=%ld\n", + printf("HDR: post-extskip: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif hdr->warp_motion = !hdr->error_resilient_mode && hdr->frame_type & 1 && seqhdr->warped_motion && dav1d_get_bits(gb, 1); #if DEBUG_FRAME_HDR - printf("HDR: post-warpmotionbit: off=%ld\n", + printf("HDR: post-warpmotionbit: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif hdr->reduced_txtp_set = dav1d_get_bits(gb, 1); #if DEBUG_FRAME_HDR - printf("HDR: post-reducedtxtpset: off=%ld\n", + printf("HDR: post-reducedtxtpset: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif for (int i = 0; i < 7; i++) hdr->gmv[i] = dav1d_default_wm_params; @@ -1035,11 +1035,11 @@ mat[0] = dav1d_get_bits_subexp(gb, ref_mat[0] >> shift, bits) * (1 << shift); mat[1] = dav1d_get_bits_subexp(gb, ref_mat[1] >> shift, bits) * (1 << shift); } } #if DEBUG_FRAME_HDR - printf("HDR: post-gmv: off=%ld\n", + printf("HDR: post-gmv: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif hdr->film_grain.present = seqhdr->film_grain_present && (hdr->show_frame || hdr->showable_frame) && @@ -1119,11 +1119,11 @@ } } else { memset(&hdr->film_grain.data, 0, sizeof(hdr->film_grain.data)); } #if DEBUG_FRAME_HDR - printf("HDR: post-filmgrain: off=%ld\n", + printf("HDR: post-filmgrain: off=%td\n", (gb->ptr - init_ptr) * 8 - gb->bits_left); #endif return 0; @@ -1364,10 +1364,14 @@ c->tile[c->n_tile_data].start; c->n_tile_data++; break; } case DAV1D_OBU_METADATA: { +#define DEBUG_OBU_METADATA 0 +#if DEBUG_OBU_METADATA + const uint8_t *const init_ptr = gb.ptr; +#endif // obu metadta type field const enum ObuMetaType meta_type = dav1d_get_uleb128(&gb); const int meta_type_len = (dav1d_get_bits_pos(&gb) - init_bit_pos) >> 3; if (gb.error) goto error; @@ -1376,11 +1380,21 @@ Dav1dRef *ref = dav1d_ref_create(sizeof(Dav1dContentLightLevel)); if (!ref) return DAV1D_ERR(ENOMEM); Dav1dContentLightLevel *const content_light = ref->data; content_light->max_content_light_level = dav1d_get_bits(&gb, 16); +#if DEBUG_OBU_METADATA + printf("CLLOBU: max-content-light-level: %d [off=%td]\n", + content_light->max_content_light_level, + (gb.ptr - init_ptr) * 8 - gb.bits_left); +#endif content_light->max_frame_average_light_level = dav1d_get_bits(&gb, 16); +#if DEBUG_OBU_METADATA + printf("CLLOBU: max-frame-average-light-level: %d [off=%td]\n", + content_light->max_frame_average_light_level, + (gb.ptr - init_ptr) * 8 - gb.bits_left); +#endif // Skip the trailing bit, align to the next byte boundary and check for overrun. dav1d_get_bits(&gb, 1); dav1d_bytealign_get_bits(&gb); if (check_for_overrun(c, &gb, init_bit_pos, len)) { @@ -1399,17 +1413,41 @@ Dav1dMasteringDisplay *const mastering_display = ref->data; for (int i = 0; i < 3; i++) { mastering_display->primaries[i][0] = dav1d_get_bits(&gb, 16); mastering_display->primaries[i][1] = dav1d_get_bits(&gb, 16); +#if DEBUG_OBU_METADATA + printf("MDCVOBU: primaries[%d]: (%d, %d) [off=%td]\n", i, + mastering_display->primaries[i][0], + mastering_display->primaries[i][1], + (gb.ptr - init_ptr) * 8 - gb.bits_left); +#endif } mastering_display->white_point[0] = dav1d_get_bits(&gb, 16); +#if DEBUG_OBU_METADATA + printf("MDCVOBU: white-point-x: %d [off=%td]\n", + mastering_display->white_point[0], + (gb.ptr - init_ptr) * 8 - gb.bits_left); +#endif mastering_display->white_point[1] = dav1d_get_bits(&gb, 16); - +#if DEBUG_OBU_METADATA + printf("MDCVOBU: white-point-y: %d [off=%td]\n", + mastering_display->white_point[1], + (gb.ptr - init_ptr) * 8 - gb.bits_left); +#endif mastering_display->max_luminance = dav1d_get_bits(&gb, 32); +#if DEBUG_OBU_METADATA + printf("MDCVOBU: max-luminance: %d [off=%td]\n", + mastering_display->max_luminance, + (gb.ptr - init_ptr) * 8 - gb.bits_left); +#endif mastering_display->min_luminance = dav1d_get_bits(&gb, 32); - +#if DEBUG_OBU_METADATA + printf("MDCVOBU: min-luminance: %d [off=%td]\n", + mastering_display->min_luminance, + (gb.ptr - init_ptr) * 8 - gb.bits_left); +#endif // Skip the trailing bit, align to the next byte boundary and check for overrun. dav1d_get_bits(&gb, 1); dav1d_bytealign_get_bits(&gb); if (check_for_overrun(c, &gb, init_bit_pos, len)) { dav1d_ref_dec(&ref);