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".