|
|
|
@@ -1499,7 +1499,6 @@ again: |
|
|
|
init_get_bits(&hx->gb, ptr, bit_length); |
|
|
|
hx->intra_gb_ptr = |
|
|
|
hx->inter_gb_ptr = &hx->gb; |
|
|
|
hx->data_partitioning = 0; |
|
|
|
|
|
|
|
if ((err = ff_h264_decode_slice_header(hx, h))) |
|
|
|
break; |
|
|
|
@@ -1552,46 +1551,11 @@ again: |
|
|
|
} |
|
|
|
break; |
|
|
|
case NAL_DPA: |
|
|
|
if (h->avctx->flags & CODEC_FLAG2_CHUNKS) { |
|
|
|
av_log(h->avctx, AV_LOG_ERROR, |
|
|
|
"Decoding in chunks is not supported for " |
|
|
|
"partitioned slices.\n"); |
|
|
|
return AVERROR(ENOSYS); |
|
|
|
} |
|
|
|
|
|
|
|
init_get_bits(&hx->gb, ptr, bit_length); |
|
|
|
hx->intra_gb_ptr = |
|
|
|
hx->inter_gb_ptr = NULL; |
|
|
|
|
|
|
|
if ((err = ff_h264_decode_slice_header(hx, h)) < 0) { |
|
|
|
/* make sure data_partitioning is cleared if it was set |
|
|
|
* before, so we don't try decoding a slice without a valid |
|
|
|
* slice header later */ |
|
|
|
h->data_partitioning = 0; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
hx->data_partitioning = 1; |
|
|
|
break; |
|
|
|
case NAL_DPB: |
|
|
|
init_get_bits(&hx->intra_gb, ptr, bit_length); |
|
|
|
hx->intra_gb_ptr = &hx->intra_gb; |
|
|
|
break; |
|
|
|
case NAL_DPC: |
|
|
|
init_get_bits(&hx->inter_gb, ptr, bit_length); |
|
|
|
hx->inter_gb_ptr = &hx->inter_gb; |
|
|
|
|
|
|
|
if (hx->redundant_pic_count == 0 && |
|
|
|
hx->intra_gb_ptr && |
|
|
|
hx->data_partitioning && |
|
|
|
h->cur_pic_ptr && h->context_initialized && |
|
|
|
(avctx->skip_frame < AVDISCARD_NONREF || hx->nal_ref_idc) && |
|
|
|
(avctx->skip_frame < AVDISCARD_BIDIR || |
|
|
|
hx->slice_type_nos != AV_PICTURE_TYPE_B) && |
|
|
|
(avctx->skip_frame < AVDISCARD_NONKEY || |
|
|
|
hx->slice_type_nos == AV_PICTURE_TYPE_I) && |
|
|
|
avctx->skip_frame < AVDISCARD_ALL) |
|
|
|
context_count++; |
|
|
|
avpriv_request_sample(avctx, "data partitioning"); |
|
|
|
ret = AVERROR(ENOSYS); |
|
|
|
goto end; |
|
|
|
break; |
|
|
|
case NAL_SEI: |
|
|
|
init_get_bits(&h->gb, ptr, bit_length); |
|
|
|
@@ -1718,9 +1682,6 @@ static int h264_decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
int ret; |
|
|
|
|
|
|
|
h->flags = avctx->flags; |
|
|
|
/* reset data partitioning here, to ensure GetBitContexts from previous |
|
|
|
* packets do not get used. */ |
|
|
|
h->data_partitioning = 0; |
|
|
|
|
|
|
|
/* end of stream, output what is still in the buffers */ |
|
|
|
out: |
|
|
|
|