]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/segment.c
avformat: remove deprecated AVStream.codec
[ffmpeg] / libavformat / segment.c
index 7e7128d074073240e5e61dd3b916b52b9a28df60..74106445e6ef0a66dcf86ec49c50a3ff6bf2a3ac 100644 (file)
@@ -72,7 +72,7 @@ typedef struct SegmentContext {
     int segment_idx_wrap;  ///< number after which the index wraps
     int segment_idx_wrap_nb;  ///< number of time the index has wraped
     int segment_count;     ///< number of segment files already written
-    ff_const59 AVOutputFormat *oformat;
+    const AVOutputFormat *oformat;
     AVFormatContext *avf;
     char *format;              ///< format to use for output segment files
     AVDictionary *format_options;
@@ -167,8 +167,10 @@ static int segment_mux_init(AVFormatContext *s)
 
         if (!(st = avformat_new_stream(oc, NULL)))
             return AVERROR(ENOMEM);
+        ret = ff_stream_encode_params_copy(st, ist);
+        if (ret < 0)
+            return ret;
         opar = st->codecpar;
-        avcodec_parameters_copy(opar, ipar);
         if (!oc->oformat->codec_tag ||
             av_codec_get_id (oc->oformat->codec_tag, ipar->codec_tag) == opar->codec_id ||
             av_codec_get_tag(oc->oformat->codec_tag, ipar->codec_id) <= 0) {
@@ -176,17 +178,6 @@ static int segment_mux_init(AVFormatContext *s)
         } else {
             opar->codec_tag = 0;
         }
-        st->sample_aspect_ratio = ist->sample_aspect_ratio;
-        st->time_base           = ist->time_base;
-        st->avg_frame_rate      = ist->avg_frame_rate;
-        st->disposition         = ist->disposition;
-#if FF_API_LAVF_AVCTX
-FF_DISABLE_DEPRECATION_WARNINGS
-        if (ipar->codec_tag == MKTAG('t','m','c','d'))
-            st->codec->time_base = ist->codec->time_base;
-FF_ENABLE_DEPRECATION_WARNINGS
-#endif
-        av_dict_copy(&st->metadata, ist->metadata, 0);
     }
 
     return 0;
@@ -510,7 +501,7 @@ static int parse_times(void *log_ctx, int64_t **times, int *nb_times,
         /* check on monotonicity */
         if (i && (*times)[i-1] > (*times)[i]) {
             av_log(log_ctx, AV_LOG_ERROR,
-                   "Specified time %f is greater than the following time %f\n",
+                   "Specified time %f is smaller than the last time %f\n",
                    (float)((*times)[i])/1000000, (float)((*times)[i-1])/1000000);
             FAIL(AVERROR(EINVAL));
         }
@@ -524,60 +515,52 @@ end:
 static int parse_frames(void *log_ctx, int **frames, int *nb_frames,
                         const char *frames_str)
 {
-    char *p;
-    int i, ret = 0;
-    char *frames_str1 = av_strdup(frames_str);
-    char *saveptr = NULL;
-
-    if (!frames_str1)
-        return AVERROR(ENOMEM);
-
-#define FAIL(err) ret = err; goto end
+    const char *p;
+    int i;
 
     *nb_frames = 1;
-    for (p = frames_str1; *p; p++)
+    for (p = frames_str; *p; p++)
         if (*p == ',')
             (*nb_frames)++;
 
     *frames = av_malloc_array(*nb_frames, sizeof(**frames));
     if (!*frames) {
         av_log(log_ctx, AV_LOG_ERROR, "Could not allocate forced frames array\n");
-        FAIL(AVERROR(ENOMEM));
+        return AVERROR(ENOMEM);
     }
 
-    p = frames_str1;
+    p = frames_str;
     for (i = 0; i < *nb_frames; i++) {
         long int f;
         char *tailptr;
-        char *fstr = av_strtok(p, ",", &saveptr);
 
-        p = NULL;
-        if (!fstr) {
+        if (*p == '\0' || *p == ',') {
             av_log(log_ctx, AV_LOG_ERROR, "Empty frame specification in frame list %s\n",
                    frames_str);
-            FAIL(AVERROR(EINVAL));
+            return AVERROR(EINVAL);
         }
-        f = strtol(fstr, &tailptr, 10);
-        if (*tailptr || f <= 0 || f >= INT_MAX) {
+        f = strtol(p, &tailptr, 10);
+        if (*tailptr != '\0' && *tailptr != ',' || f <= 0 || f >= INT_MAX) {
             av_log(log_ctx, AV_LOG_ERROR,
-                   "Invalid argument '%s', must be a positive integer <= INT64_MAX\n",
-                   fstr);
-            FAIL(AVERROR(EINVAL));
+                   "Invalid argument '%s', must be a positive integer < INT_MAX\n",
+                   p);
+            return AVERROR(EINVAL);
         }
+        if (*tailptr == ',')
+            tailptr++;
+        p = tailptr;
         (*frames)[i] = f;
 
         /* check on monotonicity */
         if (i && (*frames)[i-1] > (*frames)[i]) {
             av_log(log_ctx, AV_LOG_ERROR,
-                   "Specified frame %d is greater than the following frame %d\n",
+                   "Specified frame %d is smaller than the last frame %d\n",
                    (*frames)[i], (*frames)[i-1]);
-            FAIL(AVERROR(EINVAL));
+            return AVERROR(EINVAL);
         }
     }
 
-end:
-    av_free(frames_str1);
-    return ret;
+    return 0;
 }
 
 static int open_null_ctx(AVIOContext **ctx)
@@ -867,7 +850,7 @@ static int seg_write_packet(AVFormatContext *s, AVPacket *pkt)
         return AVERROR(EINVAL);
 
     if (!st->codecpar->extradata_size) {
-        int pkt_extradata_size;
+        size_t pkt_extradata_size;
         uint8_t *pkt_extradata = av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, &pkt_extradata_size);
         if (pkt_extradata && pkt_extradata_size > 0) {
             ret = ff_alloc_extradata(st->codecpar, pkt_extradata_size);