I want to add something.
The EXC_ARITHMETIC-Exception comes from the compute_pkt_field2-function. But I
can't find out why.
regards,
Sven
Am 26.01.2011 um 10:46 schrieb Sven Alisch:
> Hello everybody,
>
> I want to cut and remux a transport stream recorded from a satellite
> receiver. The consists of an h.264 and an AC3 Stream. I develop my
> application under MAC OS 10.6 (Snow Leopard) with XCode and use the normal
> gcc-compiler.
>
> My idea was to read at a key position via AVPacket the packets and give them
> to a new output stream. Here is the code:
>
> -----------------------------------------> SNIP
> <-----------------------------------------
> The "Muxer" part:
> ...
> AVOutputFormat* outputFormat = guess_format("NULL", "test.ts", NULL);
> AVFormatContext* formatContext = av_alloc_format_context();
> if (!formatContext)
> return false;
> formatContext->oformat = outputFormat;
>
> // initializing Streams
> m->videofile->VideoTrack->initOutputStream(formatContext,
> m->videofile->VideoTrack);
> mlist_t* audiotracks = m->videofile->AudioTracks;
> mlist_start(audiotracks);
> while (audiotracks->current != NULL)
> {
> tavtrack_t* at = (tavtrack_t*) audiotracks->current->element;
> at->initOutputStream(formatContext, at);
> mlist_inc(audiotracks);
> }
>
> // filename stuff
> const char* filename = m->videofile->filename;
> char outputFileName[255];
> strcpy(outputFileName, filename);
> strcpy(&outputFileName[strlen(filename)], "_svenali.ts");
> snprintf(formatContext->filename, sizeof(formatContext->filename), "%s",
> outputFileName);
>
> if (av_set_parameters(formatContext, NULL) < 0)
> return false;
>
> dump_format(formatContext, 0, outputFileName, 1);
> av_write_header(formatContext);
> ...
> -----------------------------------------> SNAP
> <-----------------------------------------
>
> The initOutputStream-function is a pointer at functions, which creating the
> AVStream-structure (shown in the following code). The following code shows
> the example of my video-configuration.
>
> -----------------------------------------> SNIP
> <-----------------------------------------
>
> void h264_initOutputStream(AVFormatContext* fc, tavtrack_t* track)
> {
> track->streamContext = av_new_stream(fc, track->stream_idx);
>
> if (!track->streamContext)
> {
> return;
> }
>
> AVCodecContext* c = track->streamContext->codec;
> c->codec_id = track->codec_context->codec_id;
> c->codec_type = CODEC_TYPE_VIDEO;
>
> c->width = track->codec_context->width;
> c->height = track->codec_context->height;
> c->sample_aspect_ratio = track->codec_context->sample_aspect_ratio;
>
> c->time_base.den = track->codec_context->time_base.den;
> c->time_base.num = track->codec_context->time_base.num;
> }
> -----------------------------------------> SNAP
> <-----------------------------------------
>
> Now the interesting part. I simply read packets, modifying the pts and dts
> values (shown in the next code) and get an Exception of EXC_ARITHMETIC. It
> seems a devide by zero-problem. But I don't know where it happens.
> -----------------------------------------> SNIP
> <-----------------------------------------
> The "Muxer" part again:
>
> do
> {
> av_read_frame(m->videofile->AVContext, &packet);
> av_dup_packet(&packet);
>
> if (packet.pts == stopIndex->KeyPTS)
> break;
>
> if (packet.pts != AV_NOPTS_VALUE)
> {
> packet.pts -= m->videofile->VideoTrack->pts_offset;
> packet.dts -= m->videofile->VideoTrack->dts_offset;
> }
>
> if (isVideoTrack(m, packet.stream_index) || isAudioTrack(m,
> packet.stream_index))
> av_interleaved_write_frame(formatContext, &packet);
> } while (true);
> -----------------------------------------> SNAP
> <-----------------------------------------
>
> Where is my problem?
>
> regards,
> Sven
> _______________________________________________
> libav-user mailing list
> [email protected]
> https://lists.mplayerhq.hu/mailman/listinfo/libav-user
_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user