Hi Luca,
It works fine, thank you !!
Regards
Luca Abeni a écrit :
> Hi David,
>
> David REGADE wrote:
>> Hi,
>>
>> x264 is installed on my system. If I use output_example like that it
>> works fine but without the good container:
>
> Try the attached patch: it should fix the problem.
> I do not know if the problem is in output_example (well, it contains at
> least a
> bug or two...) or in the mov muxer... I am going to check on ffmpeg-devel.
>
>
> Luca
>
>
> ------------------------------------------------------------------------
>
> diff --git a/output_example.c b/output_example.c
> index 515a172..65e09d0 100644
> --- a/output_example.c
> +++ b/output_example.c
> @@ -156,7 +156,8 @@ static void write_audio_frame(AVFormatContext *oc,
> AVStream *st)
>
> pkt.size= avcodec_encode_audio(c, audio_outbuf, audio_outbuf_size,
> samples);
>
> - pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
> + if (c->coded_frame->pts != AV_NOPTS_VALUE)
> + pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base,
> st->time_base);
> pkt.flags |= PKT_FLAG_KEY;
> pkt.stream_index= st->index;
> pkt.data= audio_outbuf;
> @@ -269,18 +270,6 @@ static void open_video(AVFormatContext *oc, AVStream *st)
> exit(1);
> }
>
> - video_outbuf = NULL;
> - if (!(oc->oformat->flags & AVFMT_RAWPICTURE)) {
> - /* allocate output buffer */
> - /* XXX: API change will be done */
> - /* buffers passed into lav* can be allocated any way you prefer,
> - as long as they're aligned enough for the architecture, and
> - they're freed appropriately (such as using av_free for buffers
> - allocated with av_malloc) */
> - video_outbuf_size = 200000;
> - video_outbuf = av_malloc(video_outbuf_size);
> - }
> -
> /* allocate the encoded raw picture */
> picture = alloc_picture(c->pix_fmt, c->width, c->height);
> if (!picture) {
> @@ -373,6 +362,16 @@ static void write_video_frame(AVFormatContext *oc,
> AVStream *st)
>
> ret = av_write_frame(oc, &pkt);
> } else {
> + video_outbuf = NULL;
> + /* allocate output buffer */
> + /* XXX: API change will be done */
> + /* buffers passed into lav* can be allocated any way you prefer,
> + as long as they're aligned enough for the architecture, and
> + they're freed appropriately (such as using av_free for buffers
> + allocated with av_malloc) */
> + video_outbuf_size = 200000;
> + video_outbuf = av_malloc(video_outbuf_size);
> +
> /* encode the image */
> out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size,
> picture);
> /* if zero size, it means the image was buffered */
> @@ -380,7 +379,8 @@ static void write_video_frame(AVFormatContext *oc,
> AVStream *st)
> AVPacket pkt;
> av_init_packet(&pkt);
>
> - pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base,
> st->time_base);
> + if (c->coded_frame->pts != AV_NOPTS_VALUE)
> + pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base,
> st->time_base);
> if(c->coded_frame->key_frame)
> pkt.flags |= PKT_FLAG_KEY;
> pkt.stream_index= st->index;
> @@ -389,6 +389,7 @@ static void write_video_frame(AVFormatContext *oc,
> AVStream *st)
>
> /* write the compressed frame in the media file */
> ret = av_write_frame(oc, &pkt);
> + av_free(pkt.data);
> } else {
> ret = 0;
> }
> @@ -409,7 +410,7 @@ static void close_video(AVFormatContext *oc, AVStream *st)
> av_free(tmp_picture->data[0]);
> av_free(tmp_picture);
> }
> - av_free(video_outbuf);
> +// av_free(video_outbuf);
> }
>
> /**************************************************************/
> @@ -463,9 +464,11 @@ int main(int argc, char **argv)
> and initialize the codecs */
> video_st = NULL;
> audio_st = NULL;
> +fmt->video_codec = CODEC_ID_H264;
> if (fmt->video_codec != CODEC_ID_NONE) {
> video_st = add_video_stream(oc, fmt->video_codec);
> }
> +fmt->audio_codec = CODEC_ID_NONE;
> if (fmt->audio_codec != CODEC_ID_NONE) {
> audio_st = add_audio_stream(oc, fmt->audio_codec);
> }
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> libav-user mailing list
> [email protected]
> https://lists.mplayerhq.hu/mailman/listinfo/libav-user
--
David REGADE
Ingénieur R&D / Chef de projet
Viewsurf S.A.S.
17 avenue des Mondaults
33270 Floirac - France
Tel: 05.57.22.54.40
Fax: 05.56.08.22.62
_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user