[Libav-user] Simple transcoding h264/mlaw -> mpeg4/aac

Gabriele Giovanni Celso Ghio shinnok at email.it
Wed Apr 1 22:36:02 CEST 2015


Hi, there is a possible SIMPLE example that do a SIMPLE transcode from
h264/mlaw to mpeg4/aac?

I still have not yet found one that works (ffmpeg/transcode.c not work)

I post my code: there is a problem on avcodec_encode_audio2 
-22 Invalid Argument (Input contains NaN)

I want to make code very simple, so I don’t want to use fifo_queue and more,
because the video type is only in one format (webcam)

Dump is correct:
Input #0, avi, from '/Users/Shinnok/Library/Developer/Xcode/DerivedData/RainBlack-bamexxbsnwvvoqfegnzeexphynmr/Build/Products/Debug/camera.avi':
  Duration: 00:00:11.60, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: h264 (Baseline) (h264 / 0x34363268), yuv420p(tv), 1280x720, 1003 kb/s, 15 fps, 15 tbr, 15 tbn, 30 tbc
    Stream #0:1: Audio: pcm_mulaw ([7][0][0][0] / 0x0007), 8000 Hz, 1 channels, s16, 64 kb/s
Output #0, mp4, to '/Users/Shinnok/Library/Developer/Xcode/DerivedData/RainBlack-bamexxbsnwvvoqfegnzeexphynmr/Build/Products/Debug/output.mp4':
  Metadata:
    encoder         : Lavf56.25.101
    Stream #0:0: Video: mpeg4 ( [0][0][0] / 0x0020), yuv420p, 1280x720, q=2-31, 1200 kb/s, 15360 tbn, 15 tbc
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 8000 Hz, mono, fltp, 16 kb/s

(It’s in Objc)
Thanks,
Gabriele



__block struct AVFormatContext *inputCtx = NULL;
	__block struct AVFormatContext *outputCtx = NULL;
	__block int ret = 0;
	
	__block void (^mainProcess)() = ^{
		__block struct AVPacket packet;
		__block struct AVFrame *frame;
		
		while (true) {

			if ((ret = av_read_frame(inputCtx, &packet)) < 0) {
				break;
			}

			frame = av_frame_alloc();
			unsigned int streamIdx = packet.stream_index;
			int got_packet = 0;
			av_packet_rescale_ts(&packet,
								 inputCtx->streams[streamIdx]->time_base,
								 inputCtx->streams[streamIdx]->codec->time_base);
			enum AVMediaType type = inputCtx->streams[streamIdx]->codec->codec_type;
			int len = 0;
			if (type ==  AVMEDIA_TYPE_VIDEO) {
				NSLog(@"Decoded video");
				len = avcodec_decode_video2(inputCtx->streams[streamIdx]->codec, frame, &got_packet, &packet);
			} else if (type ==  AVMEDIA_TYPE_AUDIO) {
				NSLog(@"Decoded audio");
				len = avcodec_decode_audio4(inputCtx->streams[streamIdx]->codec, frame, &got_packet, &packet);
			}
			
			if (len < 0) {
				av_frame_free(&frame);
				av_log(NULL, AV_LOG_ERROR, "Decoding failed\n");
				exit(1);
			}
			
			while (got_packet) {
				NSLog(@"Encoding...");
				AVPacket enc_pkt;
				
				/* encode filtered frame */
				enc_pkt.data = NULL;
				enc_pkt.size = 0;
				
				av_init_packet(&enc_pkt);
				
				if (type == AVMEDIA_TYPE_VIDEO) {
					NSLog(@"Encoding video");
					if ((ret = avcodec_encode_video2(outputCtx->streams[streamIdx]->codec, &enc_pkt, frame, &got_packet)) < 0) {
						av_frame_free(&frame);
						exit(1);
					}
				} else {
					NSLog(@"Encoding audio");
					frame->pts = av_frame_get_best_effort_timestamp(frame);
					if ((ret = avcodec_encode_audio2(outputCtx->streams[streamIdx]->codec, &enc_pkt, frame, &got_packet)) < 0) {
						NSLog(@"avcodec_encode_audio2 %s", av_err2str(ret));
						av_frame_free(&frame);
						exit(1);
					}
				}

				while (got_packet) {
					NSLog(@"Write packet");
					/* prepare packet for muxing */
					enc_pkt.stream_index = streamIdx;
					av_packet_rescale_ts(&enc_pkt,
										 outputCtx->streams[streamIdx]->codec->time_base,
										 outputCtx->streams[streamIdx]->time_base);
					
					av_log(NULL, AV_LOG_DEBUG, "Muxing frame\n");
					/* mux encoded frame */
					ret = av_interleaved_write_frame(outputCtx, &enc_pkt);
				}
			}
			packet.data += len;
			packet.size -= len;
			
			av_frame_free(&frame);
		}
		
		av_write_trailer(outputCtx);
		dispatch_async(callbackQueue, ^{
			NSLog(@"FINISH");
		});
		

 

 

 --

 ZE-Light e ZE-Pro: servizi zimbra per caselle con dominio email.it, per tutti i dettagli 

Clicca qui http://posta.email.it/caselle-di-posta-z-email-it/?utm_campaign=email_Zimbra_102014=main_footer/f

 

 Sponsor:

 Soluzioni di email hosting per tutte le esigenze: dalle caselle gratuite a quelle professionali su piattaforma Zimbra, da quelle su proprio dominio a quelle certificate PEC. Confronta le soluzioni

 Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid=13326&d=1-4

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://ffmpeg.org/pipermail/libav-user/attachments/20150401/f845a808/attachment.html>


More information about the Libav-user mailing list