Skip to content

bug with detection video size at 264 and 265 #166

Open

Description

@sansarus

just change 265 to 264 decoder show different size but vls and ffrobe not.
bigger resolution of stream not start (maybe because of size bug too)

ffprobe -i rtsp://192.168.1.25:554/stream1
Stream #0:0: Video: hevc (Main), yuvj420p(pc, bt709), 1920x1080, 25 fps, 25 tbr, 90k tbn, 25 tbc

but decoder say

"ui_thread": "ok",
"mode": "single",
"active_slot": 1,
"single": {
"url": "rtsp://192.168.1.25:554/stream1",
"transport": "TCP (auto)",
"transport_mode": "AUTO",
"video": true,
"status": "connected",
"size": "2304x1088",
"codec": "H.265",
"audio": "PCMU",
"out_fps": 24,
"decode": "full"

and

Stream #0:0: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 1920x1080, 25 fps, 25 tbr, 90k tbn, 50 tbc

decoder say
ui_thread": "ok",
"mode": "single",
"active_slot": 1,
"single": {
"url": "rtsp://192.168.1.25:554/stream1",
"transport": "TCP (auto)",
"transport_mode": "AUTO",
"video": true,
"status": "connected",
"size": "1920x1088",
"codec": "H.264",
"audio": "PCMU",
"out_fps": 12,
"decode": "full"

Activity

  1. compot-dev commented on Oct 14, 2026

    @compot-dev
    Collaborator

    Thanks for the report and the ffprobe output, that made the size problem easy to find.

    Size. The app took the size from the decoder's output buffer, which is padded to the decoder's alignment, and not from the visible picture (the crop rectangle):

    • H.264 1080p showed as 1920×1088 (16-line macroblocks). This happens on every device.
    • On your device the H.265 decoder pads the width as well, so 1920×1080 became 2304×1088. The single view also fitted the picture to that size, so the picture was probably squeezed horizontally (2.12:1 instead of 16:9).

    The fix is in #167: the size now comes from the crop rectangle. I'll post here when the build is released.

    Higher resolution does not start. This is probably a separate problem. Could you tell us:

    1. Which device is it (model, Android version)? The menu next to Exit shows the app version.
    2. Which stream does not start: resolution, codec, fps (ffprobe output like above)?
    3. What the screen shows: an error text, a black picture, or the status?
    4. If possible, http://<device>:8085/stats.json and http://<device>:8085/log while it fails (check that no password is in the log).

    The output-buffer width 2304 suggests the decoder aligns to a large block size, so its resolution limit can also be lower than expected. stats.json lists the decoders and the frame rate each one supports at 1080p.

    Also, H.264 showed out_fps: 12 while the camera sends 25. Did the H.264 picture look jerky?

  2. added a commit that references this issue on Oct 14, 2026
  3. compot-dev commented on Oct 14, 2026

    @compot-dev
    Collaborator

    The size fix is released in v2.04 (#167). On our test box 1080p streams now show as 1920×1080 (H.264 and H.265, before: 1920×1088), and 720p as 1280×720. On your device the H.265 stream should show as 1920×1080 instead of 2304×1088, and the single view should keep its 16:9 shape.

    Could you check it, and send the details asked above for the higher resolution that does not start?

  4. sansarus commented on Oct 16, 2026

    @sansarus
    MemberAuthor

    1080p show correct size and fps.

    bigger - stil not work ("version": "2.13")
    Stream #0:0: Video: hevc (Main), yuvj420p(pc, bt709), 2304x1296, 25 fps, 25 tbr, 90k tbn, 25 tbc

    {
    "app": "OpenIPC Decoder",
    "version": "2.13",
    "git": "584c8e4",
    "time": "2026-10-16 04:15:16",
    "uptime_s": 537,
    "device": "rockchip HY300 · rk30board · board ChipTrip",
    "android": "11 (SDK 30)",
    "screen": "1024x600",
    "addresses": [
    "http://192.168.220.89:8085/"
    ],
    "server": "listening",
    "decoders": [
    {
    "name": "OMX.rk.video_decoder.avc",
    "type": "video/avc",
    "hardware": true,
    "adaptive": true,
    "max_instances": 6,
    "fps_1080p": 60
    },
    {
    "name": "OMX.rk.video_decoder.h263",
    "type": "video/3gpp",
    "hardware": true,
    "adaptive": true,
    "max_instances": 6
    },
    {
    "name": "OMX.rk.video_decoder.hevc",
    "type": "video/hevc",
    "hardware": true,
    "adaptive": true,
    "max_instances": 6
    },
    {
    "name": "OMX.rk.video_decoder.m4v",
    "type": "video/mp4v-es",
    "hardware": true,
    "adaptive": true,
    "max_instances": 6
    },
    {
    "name": "OMX.rk.video_decoder.vp8",
    "type": "video/x-vnd.on2.vp8",
    "hardware": true,
    "adaptive": true,
    "max_instances": 6,
    "fps_1080p": 60
    },
    {
    "name": "c2.android.avc.decoder",
    "type": "video/avc",
    "hardware": false,
    "adaptive": true,
    "max_instances": 32
    },
    {
    "name": "OMX.google.h264.decoder",
    "type": "video/avc",
    "hardware": false,
    "adaptive": true,
    "max_instances": 32
    },
    {
    "name": "c2.android.h263.decoder",
    "type": "video/3gpp",
    "hardware": false,
    "adaptive": true,
    "max_instances": 32
    },
    {
    "name": "OMX.google.h263.decoder",
    "type": "video/3gpp",
    "hardware": false,
    "adaptive": true,
    "max_instances": 32
    },
    {
    "name": "c2.android.hevc.decoder",
    "type": "video/hevc",
    "hardware": false,
    "adaptive": true,
    "max_instances": 1
    },
    {
    "name": "OMX.google.hevc.decoder",
    "type": "video/hevc",
    "hardware": false,
    "adaptive": true,
    "max_instances": 1
    },
    {
    "name": "c2.android.mpeg4.decoder",
    "type": "video/mp4v-es",
    "hardware": false,
    "adaptive": true,
    "max_instances": 2
    },
    {
    "name": "OMX.google.mpeg4.decoder",
    "type": "video/mp4v-es",
    "hardware": false,
    "adaptive": true,
    "max_instances": 2
    },
    {
    "name": "c2.android.vp8.decoder",
    "type": "video/x-vnd.on2.vp8",
    "hardware": false,
    "adaptive": true,
    "max_instances": 1
    },
    {
    "name": "OMX.google.vp8.decoder",
    "type": "video/x-vnd.on2.vp8",
    "hardware": false,
    "adaptive": true,
    "max_instances": 1
    },
    {
    "name": "c2.android.vp9.decoder",
    "type": "video/x-vnd.on2.vp9",
    "hardware": false,
    "adaptive": true,
    "max_instances": 1
    },
    {
    "name": "OMX.google.vp9.decoder",
    "type": "video/x-vnd.on2.vp9",
    "hardware": false,
    "adaptive": true,
    "max_instances": 1
    }
    ],
    "ui_thread": "ok",
    "mode": "single",
    "active_slot": 1,
    "single": {
    "url": "rtsp://192.168.1.25:554/stream1",
    "transport": "TCP (auto)",
    "transport_mode": "AUTO",
    "video": false,
    "status": "connected",
    "size": "1920x1080",
    "codec": "H.265",
    "audio": "PCMU",
    "out_fps": 0,
    "decode": "full"
    },
    "slots": [
    {
    "slot": 1,
    "on_screen": true,
    "url": "rtsp://192.168.1.25:554/stream1",
    "transport": "TCP (auto)",
    "transport_mode": "AUTO",
    "video": false,
    "text": "connected"
    },
    {
    "slot": 2,
    "on_screen": false,
    "video": false,
    "text": "not configured",
    "probe": {
    "state": "not checked"
    }
    },
    {
    "slot": 3,
    "on_screen": false,
    "video": false,
    "text": "not configured",
    "probe": {
    "state": "not checked"
    }
    },
    {
    "slot": 4,
    "on_screen": false,
    "video": false,
    "text": "not configured",
    "probe": {
    "state": "not checked"
    }
    }
    ]
    }

    Stream #0:0: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 2304x1296, 25 fps, 25 tbr, 90k tbn, 50 tbc

    {
    "app": "OpenIPC Decoder",
    "version": "2.13",
    "git": "584c8e4",
    "time": "2026-10-16 04:20:49",
    "uptime_s": 870,
    "device": "rockchip HY300 · rk30board · board ChipTrip",
    "android": "11 (SDK 30)",
    "screen": "1024x600",
    "addresses": [
    "http://192.168.220.89:8085/"
    ],
    "server": "listening",
    "decoders": [
    {
    "name": "OMX.rk.video_decoder.avc",
    "type": "video/avc",
    "hardware": true,
    "adaptive": true,
    "max_instances": 6,
    "fps_1080p": 60
    },
    {
    "name": "OMX.rk.video_decoder.h263",
    "type": "video/3gpp",
    "hardware": true,
    "adaptive": true,
    "max_instances": 6
    },
    {
    "name": "OMX.rk.video_decoder.hevc",
    "type": "video/hevc",
    "hardware": true,
    "adaptive": true,
    "max_instances": 6
    },
    {
    "name": "OMX.rk.video_decoder.m4v",
    "type": "video/mp4v-es",
    "hardware": true,
    "adaptive": true,
    "max_instances": 6
    },
    {
    "name": "OMX.rk.video_decoder.vp8",
    "type": "video/x-vnd.on2.vp8",
    "hardware": true,
    "adaptive": true,
    "max_instances": 6,
    "fps_1080p": 60
    },
    {
    "name": "c2.android.avc.decoder",
    "type": "video/avc",
    "hardware": false,
    "adaptive": true,
    "max_instances": 32
    },
    {
    "name": "OMX.google.h264.decoder",
    "type": "video/avc",
    "hardware": false,
    "adaptive": true,
    "max_instances": 32
    },
    {
    "name": "c2.android.h263.decoder",
    "type": "video/3gpp",
    "hardware": false,
    "adaptive": true,
    "max_instances": 32
    },
    {
    "name": "OMX.google.h263.decoder",
    "type": "video/3gpp",
    "hardware": false,
    "adaptive": true,
    "max_instances": 32
    },
    {
    "name": "c2.android.hevc.decoder",
    "type": "video/hevc",
    "hardware": false,
    "adaptive": true,
    "max_instances": 1
    },
    {
    "name": "OMX.google.hevc.decoder",
    "type": "video/hevc",
    "hardware": false,
    "adaptive": true,
    "max_instances": 1
    },
    {
    "name": "c2.android.mpeg4.decoder",
    "type": "video/mp4v-es",
    "hardware": false,
    "adaptive": true,
    "max_instances": 2
    },
    {
    "name": "OMX.google.mpeg4.decoder",
    "type": "video/mp4v-es",
    "hardware": false,
    "adaptive": true,
    "max_instances": 2
    },
    {
    "name": "c2.android.vp8.decoder",
    "type": "video/x-vnd.on2.vp8",
    "hardware": false,
    "adaptive": true,
    "max_instances": 1
    },
    {
    "name": "OMX.google.vp8.decoder",
    "type": "video/x-vnd.on2.vp8",
    "hardware": false,
    "adaptive": true,
    "max_instances": 1
    },
    {
    "name": "c2.android.vp9.decoder",
    "type": "video/x-vnd.on2.vp9",
    "hardware": false,
    "adaptive": true,
    "max_instances": 1
    },
    {
    "name": "OMX.google.vp9.decoder",
    "type": "video/x-vnd.on2.vp9",
    "hardware": false,
    "adaptive": true,
    "max_instances": 1
    }
    ],
    "ui_thread": "ok",
    "mode": "single",
    "active_slot": 1,
    "single": {
    "url": "rtsp://192.168.1.25:554/stream1",
    "transport": "TCP (auto)",
    "transport_mode": "AUTO",
    "video": false,
    "status": "connected",
    "size": "1920x1080",
    "codec": "H.264",
    "audio": "PCMU",
    "out_fps": 0,
    "decode": "full"
    },
    "slots": [
    {
    "slot": 1,
    "on_screen": true,
    "url": "rtsp://192.168.1.25:554/stream1",
    "transport": "TCP (auto)",
    "transport_mode": "AUTO",
    "video": false,
    "text": "connected"
    },
    {
    "slot": 2,
    "on_screen": false,
    "video": false,
    "text": "not configured",
    "probe": {
    "state": "not checked"
    }
    },
    {
    "slot": 3,
    "on_screen": false,
    "video": false,
    "text": "not configured",
    "probe": {
    "state": "not checked"
    }
    },
    {
    "slot": 4,
    "on_screen": false,
    "video": false,
    "text": "not configured",
    "probe": {
    "state": "not checked"
    }
    }
    ]
    }

    stats.json see codec change but not recognize resolution (decoder show freeze image since 1080p )

    log.txt

  5. compot-dev commented on Oct 16, 2026

    @compot-dev
    Collaborator

    Thanks, the log helped. When the app connects to the 2304×1296 stream, OMX.rk.video_decoder.avc starts and allocates its buffers but never outputs a frame, while 1080p from the same camera plays. So it isn't a size-detection problem but a decoder setup one: the app configures the decoder for a small picture and lets it learn the real size from the stream, and this Rockchip decoder apparently doesn't grow beyond 1080p that way.

    There's a test build that tells the decoder the largest picture it supports up front (single view only):

    APK: https://github.com/OpenIPC/decoder/releases/download/hy300-166-test1/decoder-hy300-test1.apk
    (version 2.14, 6dd18a2; it installs over 2.13 and keeps the settings)

    Could you try 2304×1296 in H.264 and H.265 with it? If it still doesn't play, please attach http://<device>:8085/log again. With this build it should have a line Decoder OMX.rk.video_decoder.…: pictures up to ….

  6. added
    tomorrowPlanned for the next day
    todayTasks for today
    and removed
    tomorrowPlanned for the next day
    on Oct 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtodayTasks for today

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions