@@ -1425,8 +1425,9 @@ int decoder_context::generate_unavailable_reference_picture(const seq_parameter_
1425
1425
std::shared_ptr<const seq_parameter_set> current_sps = this ->sps [ (int )current_pps->seq_parameter_set_id ];
1426
1426
1427
1427
int idx = dpb.new_image (current_sps, this , 0 ,0 , false );
1428
- assert (idx>=0 );
1429
- // printf("-> fill with unavailable POC %d\n",POC);
1428
+ if (idx<0 ) {
1429
+ return idx;
1430
+ }
1430
1431
1431
1432
de265_image* img = dpb.get_image (idx);
1432
1433
@@ -1450,7 +1451,7 @@ int decoder_context::generate_unavailable_reference_picture(const seq_parameter_
1450
1451
1451
1452
This function will mark pictures in the DPB as 'unused' or 'used for long-term reference'
1452
1453
*/
1453
- void decoder_context::process_reference_picture_set (slice_segment_header* hdr)
1454
+ de265_error decoder_context::process_reference_picture_set (slice_segment_header* hdr)
1454
1455
{
1455
1456
std::vector<int > removeReferencesList;
1456
1457
@@ -1598,6 +1599,9 @@ void decoder_context::process_reference_picture_set(slice_segment_header* hdr)
1598
1599
// We do not know the correct MSB
1599
1600
int concealedPicture = generate_unavailable_reference_picture (current_sps.get (),
1600
1601
PocLtCurr[i], true );
1602
+ if (concealedPicture<0 ) {
1603
+ return (de265_error)(-concealedPicture);
1604
+ }
1601
1605
picInAnyList.resize (dpb.size (), false ); // adjust size of array to hold new picture
1602
1606
1603
1607
RefPicSetLtCurr[i] = k = concealedPicture;
@@ -1624,6 +1628,9 @@ void decoder_context::process_reference_picture_set(slice_segment_header* hdr)
1624
1628
else {
1625
1629
int concealedPicture = k = generate_unavailable_reference_picture (current_sps.get (),
1626
1630
PocLtFoll[i], true );
1631
+ if (concealedPicture<0 ) {
1632
+ return (de265_error)(-concealedPicture);
1633
+ }
1627
1634
picInAnyList.resize (dpb.size (), false ); // adjust size of array to hold new picture
1628
1635
1629
1636
RefPicSetLtFoll[i] = concealedPicture;
@@ -1655,6 +1662,9 @@ void decoder_context::process_reference_picture_set(slice_segment_header* hdr)
1655
1662
else {
1656
1663
int concealedPicture = generate_unavailable_reference_picture (current_sps.get (),
1657
1664
PocStCurrBefore[i], false );
1665
+ if (concealedPicture<0 ) {
1666
+ return (de265_error)(-concealedPicture);
1667
+ }
1658
1668
RefPicSetStCurrBefore[i] = k = concealedPicture;
1659
1669
1660
1670
picInAnyList.resize (dpb.size (), false ); // adjust size of array to hold new picture
@@ -1678,6 +1688,9 @@ void decoder_context::process_reference_picture_set(slice_segment_header* hdr)
1678
1688
else {
1679
1689
int concealedPicture = generate_unavailable_reference_picture (current_sps.get (),
1680
1690
PocStCurrAfter[i], false );
1691
+ if (concealedPicture<0 ) {
1692
+ return (de265_error)(-concealedPicture);
1693
+ }
1681
1694
RefPicSetStCurrAfter[i] = k = concealedPicture;
1682
1695
1683
1696
@@ -1721,6 +1734,8 @@ void decoder_context::process_reference_picture_set(slice_segment_header* hdr)
1721
1734
hdr->RemoveReferencesList = removeReferencesList;
1722
1735
1723
1736
// remove_images_from_dpb(hdr->RemoveReferencesList);
1737
+
1738
+ return DE265_OK;
1724
1739
}
1725
1740
1726
1741
@@ -2019,8 +2034,8 @@ bool decoder_context::process_slice_segment_header(slice_segment_header* hdr,
2019
2034
int image_buffer_idx;
2020
2035
bool isOutputImage = (!sps->sample_adaptive_offset_enabled_flag || param_disable_sao);
2021
2036
image_buffer_idx = dpb.new_image (current_sps, this , pts, user_data, isOutputImage);
2022
- if (image_buffer_idx == - 1 ) {
2023
- *err = DE265_ERROR_IMAGE_BUFFER_FULL ;
2037
+ if (image_buffer_idx < 0 ) {
2038
+ *err = (de265_error)(-image_buffer_idx) ;
2024
2039
return false ;
2025
2040
}
2026
2041
@@ -2072,7 +2087,8 @@ bool decoder_context::process_slice_segment_header(slice_segment_header* hdr,
2072
2087
// mark picture so that it is not overwritten by unavailable reference frames
2073
2088
img->PicState = UsedForShortTermReference;
2074
2089
2075
- process_reference_picture_set (hdr);
2090
+ *err = process_reference_picture_set (hdr);
2091
+ return false ;
2076
2092
}
2077
2093
2078
2094
img->PicState = UsedForShortTermReference;
0 commit comments