]> git.sesse.net Git - ffmpeg/blobdiff - libavdevice/lavfi.c
avfilter/vf_lut3d: support remaping negative values in the prelut
[ffmpeg] / libavdevice / lavfi.c
index c949ff7e12472f046fb7c39e7cdcb5a2d5fc4e5a..4f05a1542edb17e5def381f23e2172cd45b3fe45 100644 (file)
@@ -362,16 +362,12 @@ static int create_subcc_packet(AVFormatContext *avctx, AVFrame *frame,
 {
     LavfiContext *lavfi = avctx->priv_data;
     AVFrameSideData *sd;
-    int stream_idx, i, ret;
+    int stream_idx, ret;
 
     if ((stream_idx = lavfi->sink_stream_subcc_map[sink_idx]) < 0)
         return 0;
-    for (i = 0; i < frame->nb_side_data; i++)
-        if (frame->side_data[i]->type == AV_FRAME_DATA_A53_CC)
-            break;
-    if (i >= frame->nb_side_data)
+    if (!(sd = av_frame_get_side_data(frame, AV_FRAME_DATA_A53_CC)))
         return 0;
-    sd = frame->side_data[i];
     if ((ret = av_new_packet(&lavfi->subcc_packet, sd->size)) < 0)
         return ret;
     memcpy(lavfi->subcc_packet.data, sd->data, sd->size);
@@ -392,10 +388,7 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
     int size = 0;
 
     if (lavfi->subcc_packet.size) {
-        *pkt = lavfi->subcc_packet;
-        av_init_packet(&lavfi->subcc_packet);
-        lavfi->subcc_packet.size = 0;
-        lavfi->subcc_packet.data = NULL;
+        av_packet_move_ref(pkt, &lavfi->subcc_packet);
         return pkt->size;
     }
 
@@ -451,37 +444,26 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
 
     frame_metadata = frame->metadata;
     if (frame_metadata) {
-        uint8_t *metadata;
-        AVDictionaryEntry *e = NULL;
-        AVBPrint meta_buf;
-
-        av_bprint_init(&meta_buf, 0, AV_BPRINT_SIZE_UNLIMITED);
-        while ((e = av_dict_get(frame_metadata, "", e, AV_DICT_IGNORE_SUFFIX))) {
-            av_bprintf(&meta_buf, "%s", e->key);
-            av_bprint_chars(&meta_buf, '\0', 1);
-            av_bprintf(&meta_buf, "%s", e->value);
-            av_bprint_chars(&meta_buf, '\0', 1);
-        }
-        if (!av_bprint_is_complete(&meta_buf) ||
-            !(metadata = av_packet_new_side_data(pkt, AV_PKT_DATA_STRINGS_METADATA,
-                                                 meta_buf.len))) {
-            av_bprint_finalize(&meta_buf, NULL);
+        int size;
+        uint8_t *metadata = av_packet_pack_dictionary(frame_metadata, &size);
+
+        if (!metadata)
             return AVERROR(ENOMEM);
+        if ((ret = av_packet_add_side_data(pkt, AV_PKT_DATA_STRINGS_METADATA,
+                                           metadata, size)) < 0) {
+            av_freep(&metadata);
+            return ret;
         }
-        memcpy(metadata, meta_buf.str, meta_buf.len);
-        av_bprint_finalize(&meta_buf, NULL);
     }
 
     if ((ret = create_subcc_packet(avctx, frame, min_pts_sink_idx)) < 0) {
         av_frame_unref(frame);
-        av_packet_unref(pkt);
         return ret;
     }
 
     pkt->stream_index = stream_idx;
     pkt->pts = frame->pts;
     pkt->pos = frame->pkt_pos;
-    pkt->size = size;
     av_frame_unref(frame);
     return size;
 }