On Thu, Apr 14, 2011 at 01:32:40PM +0200, Luca Barbato wrote:
> ---
>  libavformat/output-example.c |   43 
> +++++++++++++++++++++++++++++++++++++++++-
>  1 files changed, 42 insertions(+), 1 deletions(-)
> 
> diff --git a/libavformat/output-example.c b/libavformat/output-example.c
> index 27db78c..1a0a6db 100644
> --- a/libavformat/output-example.c
> +++ b/libavformat/output-example.c
> @@ -416,6 +416,44 @@ static void close_video(AVFormatContext *oc, AVStream 
> *st)
>      av_free(video_outbuf);
>  }
>  
> +static AVStream *add_data_stream(AVFormatContext *oc, enum CodecID codec_id)
> +{
> +    AVCodecContext *c;
> +    AVStream *st;
> +
> +    st = av_new_stream(oc, 0);
> +    if (!st) {
> +        fprintf(stderr, "Could not alloc stream\n");
> +        exit(1);
> +    }
> +
> +    c = st->codec;
> +    c->codec_id = codec_id;
> +    c->codec_type = AVMEDIA_TYPE_DATA;
> +
> +    c->time_base.den = STREAM_FRAME_RATE;
> +    c->time_base.num = 1;
> +
> +    // some formats want stream headers to be separate
> +    if(oc->oformat->flags & AVFMT_GLOBALHEADER)
> +        c->flags |= CODEC_FLAG_GLOBAL_HEADER;
> +
> +    return st;
> +}
> +
> +static void write_data_frame(AVFormatContext *oc, AVStream *st, char *text)
> +{
> +    AVPacket pkt;
> +    av_init_packet(&pkt);
> +    pkt.flags |= AV_PKT_FLAG_KEY;
> +    pkt.stream_index= st->index;
> +    pkt.data = text;
> +    pkt.size= strlen(text);

align vertically here please

> +    av_interleaved_write_frame(oc, &pkt);
> +}
> +
> +
>  /**************************************************************/
>  /* media file output */
>  
> @@ -424,7 +462,7 @@ int main(int argc, char **argv)
>      const char *filename;
>      AVOutputFormat *fmt;
>      AVFormatContext *oc;
> -    AVStream *audio_st, *video_st;
> +    AVStream *audio_st, *video_st, *data_st;
>      double audio_pts, video_pts;
>      int i;
>  
> @@ -474,6 +512,8 @@ int main(int argc, char **argv)
>          audio_st = add_audio_stream(oc, fmt->audio_codec);
>      }
>  
> +    data_st = add_data_stream(oc, CODEC_ID_TEXT);
> +
>      /* set the output parameters (must be done even if no
>         parameters). */
>      if (av_set_parameters(oc, NULL) < 0) {
> @@ -522,6 +562,7 @@ int main(int argc, char **argv)
>              write_audio_frame(oc, audio_st);
>          } else {
>              write_video_frame(oc, video_st);
> +            write_data_frame(oc, data_st, "Test");
>          }
>      }
>  
> -- 

And what happens if it's impossible to add data stream here?
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to