On 1/11/2021 1:33 PM, Nuo Mi wrote:
@@ -1218,6 +1464,20 @@ static int cbs_h2645_unit_requires_zero_byte(enum 
AVCodecID codec_id,
          return type == H264_NAL_SPS || type == H264_NAL_PPS;
      if (codec_id == AV_CODEC_ID_HEVC)
          return type == HEVC_NAL_VPS || type == HEVC_NAL_SPS || type == 
HEVC_NAL_PPS;
+    if (codec_id == AV_CODEC_ID_VVC) {
+        switch (type) {
+            case VVC_DCI_NUT:
+            case VVC_OPI_NUT:
+            case VVC_VPS_NUT:
+            case VVC_SPS_NUT:
+            case VVC_PPS_NUT:
+            case VVC_PREFIX_APS_NUT:
+            case VVC_SUFFIX_APS_NUT:
+                return 1;
+            default:
+                return 0;
+        }

return type >= VVC_OPI_NUT && type <= VVC_SUFFIX_APS_NUT;

+    }
      return 0;
  }
@@ -1369,6 +1629,34 @@ static void cbs_h265_close(CodedBitstreamContext *ctx)
          av_buffer_unref(&h265->pps_ref[i]);
  }
+static void cbs_h266_flush(CodedBitstreamContext *ctx)
+{
+    CodedBitstreamH266Context *h266 = ctx->priv_data;
+
+    for (int i = 0; i < FF_ARRAY_ELEMS(h266->sps); i++) {
+        av_buffer_unref(&h266->sps_ref[i]);
+        h266->sps[i] = NULL;
+    }
+    for (int i = 0; i < FF_ARRAY_ELEMS(h266->pps); i++) {
+        av_buffer_unref(&h266->pps_ref[i]);
+        h266->pps[i] = NULL;
+    }
+    av_buffer_unref(&h266->ph_ref);
+    h266->ph = NULL;
+
+    h266->active_sps = NULL;
+    h266->active_pps = NULL;
+}
+
+static void cbs_h266_close(CodedBitstreamContext *ctx)
+{
+    CodedBitstreamH266Context *h266 = ctx->priv_data;
+
+    cbs_h266_flush(ctx);
+    ff_h2645_packet_uninit(&h266->common.read_packet);
+
+ }
+
  static void cbs_h264_free_sei_payload(H264RawSEIPayload *payload)
  {
      switch (payload->payload_type) {
@@ -1513,6 +1801,76 @@ static const CodedBitstreamUnitTypeDescriptor 
cbs_h265_unit_types[] = {
      CBS_UNIT_TYPE_END_OF_LIST
  };
+static void cbs_h266_free_sei(void *opaque, uint8_t *content)
+{
+}

static void cbs_h266_free_sei_payload(H266RawSEIPayload *payload)
{
    switch (payload->payload_type) {
    case VVC_SEI_TYPE_DECODED_PICTURE_HASH:
        break;
    default:
        av_buffer_unref(&payload->payload.other.data_ref);
        break;
    }
    av_buffer_unref(&payload->extension_data.data_ref);
}

static void cbs_h266_free_sei(void *opaque, uint8_t *content)
{
    H266RawSEI *sei = (H266RawSEI*)content;

    for (int i = 0; i < sei->payload_count; i++)
        cbs_h266_free_sei_payload(&sei->payload[i]);
    av_freep(&content);
}
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to