thank you very much... I did it just like below and it works..but I can't tell that it's completely true right now because I still continue to control my code.. but thanks again
// Find the decoder for the video stream pCodec=avcodec_find_decoder(CODEC_ID_H263); if(pCodec==NULL) { fprintf(stderr, "Unsupported codec!\n"); return -1; // Codec not found } pCodecCtx = avcodec_alloc_context(); // Open codec if(avcodec_open(pCodecCtx, pCodec)<0) return -1; // Could not open codec On Feb 5, 9:15 pm, emymrin <emym...@gmail.com> wrote: > Try to instrument avcodec_open and anything that it calls with > __android_log_print to get an idea about what is wrong. > > On 5 фев, 19:03, cervello <eceooz...@gmail.com> wrote: > > > > > > > > > I'm trying to decode a video but in my code I think there is a problem > > about avcodec_find decoder().. I control it with log_message and on > > logcat there is "here1" but there isn't "here2" .. So I think there is > > a problem with avcodec_find_decoder... > > Can anyone any idea?? Please help me, Thanks > > > And how can I describe pCodecCtx->codec_id.. With %d and %s It didn't > > work. > > > char info[40]; > > sprintf(info,"i degeri = %d",pCodecCtx->codec_id); > > log_message(info); > > > *****Here is my code****** > > > jint Java_com_test_Test_takePics(JNIEnv* env, jobject javaThis) { > > int framecount; > > log_message("Fonka girdi"); > > //OPENING FILE********************************************** **** > > AVFormatContext *pFormatCtx; > > unsigned char r, g, b; > > int i,j; > > > char* filename = "/sdcard/do-beer-not-drugs.3gp"; > > av_register_all(); > > > // Open video file > > if(av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL)!=0) > > return -1; // Couldn't open file > > > // Retrieve stream information > > if(av_find_stream_info(pFormatCtx)<0) > > return -1; // Couldn't find stream information > > > // Dump information about file onto standard error > > dump_format(pFormatCtx, 0, filename, 0); > > framecount = pFormatCtx->streams[0]->nb_frames; > > hist = malloc(framecount*sizeof(int*)); > > > for (j = 0; j < framecount; ++j) { > > hist[j] = malloc(sizeof(int)*64); // this is because we use 64-bin > > histogram} > > > for (i = 0; i < framecount; i++) { > > for (j = 0; j < 64; j++) { > > hist[i][j] = 0; > > > } > > } > > > AVCodecContext *pCodecCtx; > > > // Find the first video stream > > int videoStream; > > videoStream=-1; > > /*char info[40]; > > sprintf(info,"i degeri = %d",pFormatCtx->nb_streams); > > log_message(info);*/ > > for(i=0; i<pFormatCtx->nb_streams; i++){ > > if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO) { > > videoStream=i; > > break; > > > }} > > > if(videoStream==-1) > > return -1; // Didn't find a video stream > > > AVCodec *pCodec; > > char info[40]; > > sprintf(info,"i degeri = %d",pCodecCtx->codec_id); > > log_message(info); > > > // Find the decoder for the video stream > > pCodec=avcodec_find_decoder(pCodecCtx->codec_id); > > > if(pCodec==NULL) { > > fprintf(stderr, "Unsupported codec!\n"); > > return -1; // Codec not found} > > > log_message("here1"); > > // Open codec > > if(avcodec_open(pCodecCtx, pCodec)<0) > > return -1; // Could not open codec > > log_message("here2"); > > // Get a pointer to the codec context for the video stream > > pCodecCtx=pFormatCtx->streams[videoStream]->codec; > > > //STORING THE DATA********************************************** ** > > > AVFrame *pFrame; > > > // Allocate video frame > > pFrame=avcodec_alloc_frame(); > > > // Allocate an AVFrame structure > > AVFrame *pFrameRGB; > > pFrameRGB=avcodec_alloc_frame(); > > > if(pFrameRGB==NULL) > > return -1; > > > uint8_t *buffer; > > int numBytes; > > // Determine required buffer size and allocate buffer > > numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width, > > pCodecCtx->height); > > buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t)); > > > // Assign appropriate parts of buffer to image planes in pFrameRGB > > // Note that pFrameRGB is an AVFrame, but AVFrame is a superset > > // of AVPicture > > avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24, > > pCodecCtx->width, pCodecCtx->height); > > > //READING DATA********************************************** ***** > > > int frameFinished; > > AVPacket packet; > > > i=0; > > while(av_read_frame(pFormatCtx, &packet)>=0) { > > // Is this a packet from the video stream? > > if(packet.stream_index==videoStream) { > > // Decode video frame > > avcodec_decode_video(pCodecCtx, pFrame, &frameFinished, > > packet.data, packet.size); > > > // Did we get a video frame? > > if(frameFinished) { > > static struct SwsContext *img_convert_ctx; > > > // Convert the image into RGB format > > if(img_convert_ctx == NULL) { > > int w = pCodecCtx->width; > > int h = pCodecCtx->height; > > > img_convert_ctx = sws_getContext(w, h, > > pCodecCtx->pix_fmt, > > w, h, PIX_FMT_RGB24, SWS_BICUBIC, > > NULL, NULL, NULL); > > if(img_convert_ctx == NULL) { > > fprintf(stderr, "Cannot initialize the conversion context!\n"); > > exit(1);} > > } > > > int ret = sws_scale(img_convert_ctx, pFrame->data, pFrame- >linesize, > > 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize); > > > for (j = 0; j < 3*pCodecCtx->height*pCodecCtx->width -3; j++) { > > r = (unsigned char) pFrameRGB->data[0][j]; > > g = (unsigned char) pFrameRGB->data[0][j+1]; > > b = (unsigned char) pFrameRGB->data[0][j+2]; > > > r = (unsigned char) ((r >> 2) & 0x30); > > g = (unsigned char) ((g >> 4) & 0x0C); > > b = (unsigned char) ((b >> 6) & 0x03); > > > unsigned char h = (unsigned char)(r|g|b); > > hist[i][h]++; > > > } > > > // Save the frame to sdcard > > SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, ++i); > > > } > > } > > > // Free the packet that was allocated by av_read_frame > > av_free_packet(&packet); > > > } > > > // Free the RGB image > > av_free(buffer); > > av_free(pFrameRGB); > > > // Free the YUV frame > > av_free(pFrame); > > > // Close the codec > > avcodec_close(pCodecCtx); > > > // Close the video file > > av_close_input_file(pFormatCtx); > > > int keyframecount; > > framecount=i; > > keyframecount = select_keyFrames(framecount); > > encodeVideo(env,keyframecount); > > return 0; > > > } -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en